การติดตั้งและใช้งาน Kali ด้วย Docker ฉบับมือโปร

15 มีนาคม 2019

พิชญะ โมริโมโต
พิชญะ โมริโมโตหัวหน้าทีมทดสอบเจาะแฮกระบบ (lead penetration tester) ของบริษัท สยามถนัดแฮก, เป็นที่ปรึกษาด้านความปลอดภัยให้หน่วยงานเอกชน, เป็นที่รู้จักกันในฐานะ หนึ่งในแอดมินกลุ่ม 2600 Thailand และเป็นหนึ่งในคนเขียนบทความลงเพจ สอนแฮกเว็บแบบแมว ๆ

สำหรับคนที่สนใจเรื่องแฮก ๆ คำศัพท์เทคนิคคำแรก ๆ ที่น่าจะเห็นผ่านตาเวลาไปหาข้อมูลว่าจะแฮกเป็นทำยังไงคงหนีไม่พ้นคำว่า Kali ลินุกซ์ ในบทความนี้เราจะมาดูตัวอย่างการติดตั้งและใช้งาน Kali ลินุกซ์กัน ในแบบฉบับที่สะดวกมากยิ่งขึ้นคือการรันบน Docker container

Kali ลินุกซ์คืออะไร?

Kali คือระบบปฏิบัติการณ์ลินุกซ์ (Linux) ตัวนึงของคอมพิวเตอร์ เหมือนกับการที่มือถือเรามี iOS กับ Android คอมฯ เราก็มีระบบปฏิบัติการณ์หลายตัวอย่าง MacOS, Windows และลินุกซ์ ซึ่งโดยปกติแล้วลินุกซ์มักจะถูกใช้ใน เครื่องเซิร์ฟเวอร์เช่นไว้รันเซิร์ฟเวอร์เว็บที่ท่านผู้อ่านกำลังอ่านเว็บอยู่นี้

แต่ Kali เป็นลินุกซ์ที่ออกแบบมาสำหรับ “งานด้านความปลอดภัยระบบไอที” โดยการที่ติดตั้งซอฟต์แวร์ต่าง ๆ ที่มักจะถูกใช้งานบ่อย ๆ ในการทำงานเอาไว้เรียบร้อยแล้ว หรือยังไม่ได้ติดตั้งแต่ว่า สามารถติดตั้งได้โดยง่าย ผ่านระบบติดตั้งโปรแกรมที่มีให้เรียกว่า software repository ของ Kali โดยเฉพาะ

ความเข้าใจผิดเกี่ยวกับ Kali ลินุกซ์

หลายครั้ง Kali มักถูกมองว่าเป็นระบบของแฮกเกอร์ ติดตั้งแล้วจะเป็นแฮกเกอร์เจาะระบบได้ทันทีเหมือนในหนัง เอาไว้ใช้จอดำ ๆ เท่ ๆ มีตัวอักษรวิ่ง ๆ แต่ในความเป็นจริง ความสำคัญของการทำงานด้านความปลอดภัยฯ จะเป็นความรู้ มากกว่าการมีโปรแกรมหรือใช้ Kali ลินุกซ์ การถามว่าใช้ลินุกซ์หรือใช้โปรแกรมอะไรแฮก เหมือนไปถาม นักวาดรูปว่า ใช้ดินสอยี้ห้ออะไร วาดรูปสวยจัง ดินสออาจมีผลต่อรูปที่จะวาดจริง แต่ไม่ได้สำคัญเท่าความรู้ความสามารถ นักวาดรูปเก่ง ๆ อาจใช้ดินสอแท่งละ 8 บาท วาดรูประดับโชว์หน้านิตยสารระดับโลกก็ได้

สรุป Kali ลินุกซ์ เป็นของดี เหมาะแก่การใช้งานไว้ทดลอง ทดสอบโปรแกรมด้านความปลอดภัยฯ ต่าง ๆ เหมาะสำหรับมือใหม่และผู้ไม่อยากเสียเวลาลงโปรแกรมเอง ที่คนทำงานด้านไอทีทุกคนควรศึกษาและลองใช้เพื่อศึกษาโปรแกรมต่าง ๆ ที่แฮกเกอร์อาจจะใช้ในการทดสอบระบบ

การติดตั้งและใช้งาน Kali ลินุกซ์

การติดตั้ง Kali ลินุกซ์ก็ไม่ต่างกับการติดตั้งลินุกซ์ตัวอื่น ๆ ส่วนมากแล้วทำกันสองวิธีคือ การติดตั้งเป็นระบบปฏิบัติการณ์หลักในคอมฯ หรือ ติดตั้งในโปรแกรม virtual machine ต่าง ๆ ที่เป็นการทำให้เราติดตั้งระบบปฏิบัติการณ์อื่นเป็นเหมือนโปรแกรมในคอมฯ เราได้ เช่น VMWare หรือ VirtualBox ซึ่งแต่ละแบบก็มีข้อดี-ข้อเสีย แตกต่างกัน แต่ในบทความนี้เราจะมาดูวิธีการติดตั้งและใช้งานแบบที่ผู้เขียนใช้เป็นการส่วนตัวและพบว่าดี จึงอยากบอกต่อ เป็นแบบที่คนส่วนมากไม่ได้ทำกันคือการติดตั้ง Kali ในรูปแบบ Docker container

ข้อดีของการใช้งาน Kali ลินุกซ์ผ่าน Docker container

  1. กินพื้นที่เครื่องน้อย และทำงานได้เร็ว
  2. เมื่อติดตั้ง Kali container เสร็จแล้ว จะกลับมาเรียกใช้งานได้สะดวกและง่าย
  3. สามารถเลือกติดตั้งเฉพาะโปรแกรมที่เราจะใช้งานได้
  4. สามารถสำรองข้อมูลเครื่อง (snapshot) ได้ง่ายและเร็ว

Docker และ container คืออะไร? (ฉบับย่อ)

แบบเข้าใจง่าย ๆ Docker เป็นโปรแกรมสำหรับรัน ระบบปฏิบัติการณ์ขนาดเล็ก ภายในระบบปฏิบัติการณ์หลักของเรา คล้าย ๆ กับ virtual machine แต่ว่าสิ่งที่มันรันจะเรียกว่า container ซึ่งจะมี “ขนาดเล็ก” กว่า การรันระบบปฏิบัติการณ์เต็ม ๆ ใน VMWare หรือ VirtualBox โดยเหตุผลที่มันมีขนาดเล็กได้นั้น เพราะว่าตัว container มีความสามารถที่จะแชร์ส่วนประกอบต่าง ๆ กับเครื่องที่รัน Docker เรียกว่าเครื่อง host ได้นั้นเอง แถมยังกินทรัพยากรเครื่องน้อยกว่าการ, Docker มักถูกใช้ในการพัฒนาและวางระบบแบบ Microservice ที่ทำการแยกส่วนประกอบต่าง ๆ ของระบบออกเป็น container เพื่อให้พัฒนาและบริหารจัดการได้ง่ายรองรับธุรกิจสมัยใหม่ที่ต้องการ scale หรืออาจมีการเปลี่ยนแปลงโครงสร้างอยู่ตลอดเวลา แต่ Microservice และการใช้ Docker โดยละเอียดจะอยู่นอกเหนือจากขอบเขตที่จะอธิบายในบทความนี้

ในบทความนี้เราจะมาดูวิธีการ เริ่มต้นติดตั้งและใช้งาน Kali ด้วย Docker จากศูนย์ถึงร้อย หรือเรียกเท่ ๆ ว่า From Zero to Hero กัน

เริ่มต้นติดตั้งใช้งาน Docker

ผู้เขียนแนะนำว่าโปรแกรม Docker ควรถูกติดตั้งในระบบปฏิบัติการณ์ ลินุกซ์ หรือ MacOS ถ้าใครใช้ Windows ควรหาลินุกซ์มาลง (แต่ Windows ก็สามารถติดตั้งได้)

ดาวโหลดโปรแกรมสำหรับติดตั้ง Docker บน MacOS
https://docs.docker.com/docker-for-mac/install/
ดาวโหลดโปรแกรมสำหรับติดตั้ง Docker บน Windows
https://docs.docker.com/docker-for-windows/install/
คำสั่งการติดตั้งบนลินุกซ์ Ubuntu หรือ Debian

$ sudo apt install -y docker

หรือทางที่ง่าย และ เร็ว ที่สุดคือ กดสร้างเครื่องบน VPS (Virtual Private Server) เป็นการเช่าเครื่องเซิร์ฟเวอร์ของผู้ให้บริการ cloud เช่น ของ DigitalOcean ที่สามารถทดลองใช้งานฟรีได้ 60 วัน คลิกที่นี่ ส่วนถ้าใคร ต้องการใช้งาน VPS หรือ cloud ระดับองค์กรที่มีความเสถียรภาพสูง รับประกัน uptime สูงถึง 99.99% รวมถึงได้รับการรับรองมาตรฐานความปลอดภัยในระดับสากล ISO 27001:2013 ผู้เขียนแนะนำ IRIS cloud เป็นอีกตัวเลือก เพราะดูแลโดยทีมงานมืออาชีพของ CAT สามารถสอบถามข้อมูล ติดต่อทำเรื่องจัดซื้อได้ง่ายกว่าผู้ให้บริการในต่างประเทศ และมีศูนย์ข้อมูลตั้งอยู่ในประเทศไทย เร็วกว่า อุ่นใจกว่า

แต่ถ้าสะดวกใช้บน MacOS หรือลินุกซ์หรือ VPS เจ้าอื่นก็สามารถใช้แทนกันได้

สมมุติว่าใช้ DigitalOcean ถ้าทำการสมัครและล็อคอินเข้าใช้งาน DigitalOcean แล้วเราสามารถไปที่เมนู Create Droplets เพื่อทำการติดตั้งลินุกซ์พร้อมกับ Docker ได้ในคลิกเดียว ใช้เวลาไม่เกิน 5 นาที พร้อมเข้าใช้งานได้ทันที

ไปที่เมนู Create > Droplets > เลือก Marketplace > เลือก Docker 18.09.2~3 on 18.04 และตั้งค่าต่าง ๆ ที่ต้องการแล้วกด Create

โดยใน DigitalOcean เราจะเรียก VPS ที่สร้างมาว่า Droplet เราก็จะได้ Droplet ที่เราเพิ่งกดสร้างแบบนี้

ต่อมาทาง DigitalOcean จะส่งรหัสผ่านสำหรับเข้าสู่ระบบครั้งแรกมาในอีเมลที่ใช้สมัครฃ

* ถ้าผู้อ่านมีประสบการณ์ใช้งาน SSH key ควรติดตั้งและเข้าใช้งานผ่าน SSH key จะปลอดภัยกว่าใช้รหัสผ่าน ซึ่ง DigitalOcean รองรับการใส่ public key ตอนสร้าง Droplet เพื่อให้เราใช้ private key ที่คู่กันเข้าล็อคอินเข้าสู่ VPS ด้วยเช่นกัน

การเข้าใช้งาน VPS ที่สร้างมาทำได้หลายท่า สำหรับผู้ใช้ MacOS หรือลินุกซ์สามารถใช้คำสั่ง

$ ssh root@<ไอพีเครื่อง VPS>

ใน Terminal เข้าได้ทันที ส่วนผู้ใช้งาน Windows ต้องติดตั้งโปรแกรมชื่อ Putty เพื่อเข้าใช้งาน

หมายเหตุ: ในบทความจะใช้ Host $ นำหน้าคำสั่งที่ต้องพิมพ์ในเครื่อง Docker host เครื่องหลักที่รันโปรแกรม Docker และใช้ Kali $ นำหน้าคำสั่งที่ต้องพิมพ์ในเครื่อง Kali container เพื่อป้องกันการสับสนว่าเป็นคำสั่งที่ต้องพิมพ์ที่ไหน และจะใช้ # เพื่ออธิบายคำสั่งนั้นเพิ่มเติมโดยผู้อ่าน ไม่ต้องพิมพ์ค่าตั้งตัวอักษร # หลังคำสั่งต่าง ๆ (ถ้ามี)

วิธีการติดตั้ง Kali container ใน Docker

เมื่อเราได้ทำการติดตั้ง Docker เรียบร้อยแล้ว ต่อไปเราจะทำการติดตั้ง Kali container ขั้นแรกคือการดาวโหลด (pull) ตัวเครื่องแม่แบบที่ใช้ในการทำงาน (Docker image) ของ Kali container มาก่อนด้วยคำสั่ง

Host $ docker pull kalilinux/kali-linux-docker

โดยถ้าทำผ่าน droplet จะใช้เวลาในการ pull ประมาณ 2 นาที จากนั้นเราจะสามารถเปิดใช้งาน Kali ลินุกซ์ได้ทันที โดยตรงนี้จะเริ่มมีหลายทางเลือกหน่อยแล้วเริ่มจากแบบง่ายสุด คือการใช้คำสั่ง

Host $ docker run -it kalilinux/kali-linux-docker bash

เพียงเท่านี้เราก็จะเข้าใช้งานเป็น bash shell ของ Kali ลินุกซ์ได้แล้ว แต่ว่าข้างในนั้นยังไม่มีโปรแกรมอะไรที่ใช้ในการทดสอบความปลอดภัย ถ้าลองพิมพ์คำสั่ง

Kali $ sqlmap
Kali $ nmap

จะขึ้นว่า command not found

เราก็จะต้องทำการติดตั้งโปรแกรมต่าง ๆ ที่เราต้องการจาก software repository เอง โดยสิ่งแรกที่ควรทำหลังจากเปิด Kali ขึ้นมาผ่าน Docker ได้แล้วคือการแก้ไขตัว software repository ให้เป็นจากประเทศไทยเพราะจะติดตั้งโปรแกรมต่าง ๆ ได้เร็วขึ้นโดยพิมพ์คำสั่งตามนี้

Kali $ nano /etc/apt/sources.list

ทำการเลื่อน cursor ไปหน้าบรรทัดที่มีอยู่เดิมพิมพ์ # นำหน้าเพื่อปิดการทำงานแหล่งที่ดาวโหลดโปรแกรมของ Kali เดิมจากนั้นใส่ค่าใหม่เข้าไปสองบรรทัดดังนี้

deb http://mirror1.ku.ac.th/kali/ kali-rolling main contrib non-free
deb-src http://mirror1.ku.ac.th/kali/ kali-rolling main contrib non-free

จากนั้นกดปุ่ม ctrl กับตัว x แล้วกด y แล้วกด enter เพื่อบันทึกการแก้ไขไฟล์ ต่อมาให้ทำการทดลองติดตั้งโปรแกรมสำหรับทดสอบความปลอดภัยฯ โดยใช้คำสั่งดังนี้

Kali $ apt update # อัปเดตรายชื่อและเวอร์ชั่นของโปรแกรมใน software repository 
Kali $ apt install -y wpscan # ติดตั้งโปรแกรมชื่อว่า wpscan สำหรับสแกนช่องโหว่ในเว็บ WordPress

เมื่อทำการติดตั้งเสร็จแล้วเราจะสามารถพิมพ์คำสั่ง wpscan เพื่อใช้งานโปรแกรมที่เราเพิ่งติดตั้งได้

แนวทางการใช้งาน container เบื้องต้น

แต่เดี๋ยวก่อน.. การติดตั้ง Kali container ด้วยท่านี้ ถ้าเกิดเรากดออกจาก Kali container ไปแล้ว ด้วยการพิมพ์คำสั่ง

Kali $ exit

หรือกดปิดหน้าต่าง putty แล้วเข้ามาใหม่ จะเกิดอะไรขึ้น? ถ้าเราลองพิมพ์คำสั่ง

Host $ docker ps

ดูจะพบว่า เจ้า Kali container ที่เราเพิ่งสร้างและเข้าไปติดตั้งโปรแกรม wpscan นั้นมันหายไปแล้ว ! จริง ๆ มันยังไม่หายหรอกแค่มันจะโดนหยุดไปอัตโนมัติ เราสามารถเรียกดูได้โดยการพิมพ์คำสั่ง

Host $ docker ps -a

จะพบ Docker container ที่เราเพิ่งใช้ไปอยู่ในสถานะ Exited วิธีการเปิดกลับมาเพื่อเข้าไปใช้งานคือพิมพ์คำสั่ง docker start ตามด้วย container ID ที่แสดงมาจากคำสั่ง docker ps -a เช่นจากตัวอย่าง

Host $ docker start 7311a714aace

จากนั้นเมื่อเปิดแล้วพิมพ์คำสั่งเพื่อเข้าไปใช้งาน bash shell ดังนี้

Host $ docker exec -it 7311a714aace bash

เราจะพบว่า โปรแกรม wpscan ที่เราติดตั้งไว้ และไฟล์ต่าง ๆ ก่อนกดออกจะยังอยู่ดี

ณ จุดนี้เราก็พอจะเห็นภาพ workflow การใช้งาน Docker เบื้องต้นแล้วว่าเริ่มจากการ pull ตัว Docker image มา จากนั้น run เพื่อสร้าง container และเข้าไปเป็น bash shell แล้วก็พอเราออกไปแล้ว เราสามารถสั่ง start และ exec เข้าไปใหม่ได้ สรุปคำสั่งคร่าว ๆ ก็ตามนี้

Host $ docker pull kalilinux/kali-linux-docker 
Host $ docker run -it kalilinux/kali-linux-docker bash
Kali $ exit
Host $ docker ps -a
Host $ docker start 7311a714aace
Host $ docker exec -it 7311a714aace bash

ทดลองใช้งาน Kali ลินุกซ์แฮกช่องโหว่

คราวนี้เรามาลองหาช่องโหว่แบบง่าย ๆ กัน สิ่งสำคัญคือเราต้องทดลองในระบบที่เราได้รับอนุญาตให้ทดสอบหรือระบบของเราเองเท่านั้น วิธีการทดสอบง่าย ๆ เราสามารถสร้าง container ของระบบที่มีช่องโหว่ได้ หรือง่ายกว่านั้นอีก เราก็ใช้ที่มีคนสร้างไว้อยู่แล้ว

โดยวิธีการเลือกใช้ container สำหรับเป็นเป้าในการแฮกคือ เราต้องเข้าใจว่า ช่องโหว่ที่เราจะทำการทดสอบคืออะไร เช่นช่องโหว่ที่มีข้อมูลเปิดเผยออกมาพร้อมตัวเลขอ้างอิง (CVE – Common Vulnerabilities and Exposures) จากนั้นก็เอา keyword เข้าไปหาในเว็บ hub.docker.com เช่น CVE-2017-5638 (ช่องโหว่ใน multipart parser ของ Apache Struts)

ถ้าเคยมีคนสร้างไว้เราก็สามารถนำมาใช้ได้ (docker pull) แต่ถ้าไม่มีเราต้องสร้างเอง ซึ่งในตัวอย่างนี้ เป็น container ของทีมงาน wpscanteam ใน hub.docker.io ที่สร้าง container ที่มีช่องโหว่ชื่อ vulnerablewordpress เตรียมไว้เรียบร้อย

คำเตือน: คำสั่งต่อไปนี้จะทำการเปิด เว็บที่มีช่องโหว่ โดนแฮกได้ดังนั้นจึงควรเปิดในสภาพแวดล้อม network ที่เข้าถึงได้เฉพาะตัวผู้อ่านเองเท่านั้น ถึงแม้ต่อให้โดนแฮกเข้ามา จะอยู่ภายใน container ก็ตาม

Host $ ufw disable 
Host $ docker pull wpscanteam/vulnerablewordpress
Host $ docker run wpscanteam/vulnerablewordpress --name vulnerablewordpress -d -p 80:80 -p 3306:3306 
Host $ docker run --name vulnerablewordpress -d -p 80:80 -p 3306:3306 wpscanteam/vulnerablewordpress

จากนั้นเราจะได้เว็บ WordPress ติดตั้งอยู่เข้าถึงได้จาก port TCP/80 ดังนี้

http://<ไอพีเครื่อง Docker ที่ติดตั้ง vulnerablewordpress>/

เราก็สามารถทำการติดตั้งตัวเว็บ WordPress โดยใส่ข้อมูลต่าง ๆ สุดท้ายเราก็จะได้เว็บ WordPress ที่เป็นเวอร์ชั่นเก่า มีช่องโหว่มา

ณ จุดนี้เราก็เข้าใช้งาน Kali container เพื่อทดสอบหาช่องโหว่โดยใช้โปรแกรม wpscan ที่เราติดตั้งไว้ก่อนหน้านี้ได้ดังนี้

Host $ docker start <ไอดีของ Kali container>
Host $ docker exec -it <ไอดีของ Kali container> bash
Kali $ wpscan --update
Kali $ wpscan --random-user-agent --no-banner --url http://<vulnerablewordpress>/  --enumerate u

เราก็จะพบช่องโหว่ที่น่าสนใจอันนึงคือมีการทิ้งไฟล์ PHP ชื่อว่า searchreplacedb2.php ไว้ที่ http://<vulnerablewordpress>/searchreplacedb2.php

เมื่อเราตามเข้าไปดูใน URL จะพบหน้า Safe Search Replace พร้อมคำเตือนน่าตื่นเต้น ว่า
“Delete this utility from your server after use. It represents a major security threat to your database if maliciously used.”

โอเคแล้วยังไงต่อ.. เราก็ตามไปดูโค้ด searchreplacedb2.php จะพบว่ามันเอาไว้ ค้นหาคำในฐานข้อมูล ($find) แล้วเปลี่ยนคำที่เจอเป็นค่าอะไรก็ได้ที่เราใส่ไปบนหน้าเว็บ ($replace) ด้วยฟังก์ชัน str_replace() ตามนี้

ดังนั้นเราจึงสามารถลองคิดวิธีสำหรับโจมตีระบบ (exploit) ได้ดังนี้

ก่อนอื่นเราต้องทำความเข้าใจสิ่งที่แฮกเกอร์ทำได้จาก searchreplacedb2.php ก่อนคือเปลี่ยน ค่าที่ใส่เป็นคำค้น เป็นค่าที่แฮกเกอร์กำหนดเองได้เช่น

ถ้าเลือกตาราง wp_users มาหน้าตาประมาณนี้ (แฮกเกอร์รู้แต่โครงสร้างแต่ไม่รู้ค่าข้างใน เอามาให้ดูเพื่อจะได้เข้าใจว่า จะแฮกได้ยังไง)

ถ้าเราใส่ $find เป็น n กับ $replace เป็น xxx

จะได้ค่าในฐานข้อมูลเป็น..

หรือถ้าเราใส่ $find เป็น longcat กับ $replace เป็น sthsth จะได้

น่าจะพอเข้าใจแล้วเราว่าทำอะไรได้ จากสองตัวอย่างเบื้องต้น ถัดมา ต้องมาใช้ความคิดสร้างสรรค์แบบโจร ๆ ว่า การทำแบบนี้ได้จะทำให้เราแฮกเข้าไปยึดระบบได้ยังไง (ถ้าทำให้พังเฉย ๆ ทำได้ง่ายมาก ก็แค่แก้ค่ามั่ว ๆ ลงไป เว็บเจ๊งแน่นอน)

โจรก็จะคิดได้หลายท่าอย่างเช่น

แบบที่ 1 เปลี่ยนค่า user (ที่เรารู้จากผล wpscan) เป็นค่าที่เรากำหนด?

เช่นเปลี่ยนจาก longcat เป็น hackeruser

ผลคือ.. เราก็ไม่รู้รหัสผ่าน (ที่เก็บเป็น hash) อยู่ดี รู้แต่ชื่อล็อคอินไม่ได้

แบบที่ 2 เปลี่ยนค่า hashed password เป็นค่าของเรา?

เราเปลี่ยนตรง ๆ ไม่ได้เพราะเราไม่รู้ค่า hashed password เดิม (ใน column ชื่อ user_pass ของ longcat) ที่เราจะ replace คืออะไร (ในรูปต่าง ๆ ด้านบน ผู้เขียน query มาให้ดูเพื่อแสดงผลของการ search&replace แต่ผู้โจมตีในสถานการณ์จริงจะไม่เห็นค่าเหล่านี้)

คำถามคือ แล้วถ้าเราในฐานะแฮกเกอร์ หรือคนทดสอบเจาะระบบ จะใช้สิ่งที่ทำได้นี้อัปเดต รหัสผ่านของ user ชื่อ longcat ได้ยังไง?

อยากให้ลองคิดกันเองสัก 10 นาที ใช้จินตนาการ ความคิดสร้างสรรค์ ล้วน ๆ ไม่ต้องมีความรู้เทคนิคอะไร ก็แฮกช่องโหว่นี้ได้ ถ้าใครคิดคำตอบออก ก็สามารถทำงานทดสอบเจาะระบบได้สบาย ๆ

เฉลยย… การ exploit จะแบ่งเป็น 5 ขั้น ขอยกเป็น 2 แนวในการทำ

วิธีแรก แนวลูกทุ่งหน่อย ลุยไปกับ searchreplace2.php ด้วยมือแบบแมนนวล

ขั้นที่ 1

ขั้นแรกเราก็เก็บค่าชื่อ user longcat เก็บไว้ก่อน โดยเปลี่ยนเป็น —–

$find เป็น longcat
$replace เป็น —–

จะได้

ขั้นที่ 2

จากนั้นเรา ไล่เปลี่ยนค่าอื่นทั้งหมดเป็นเครื่องหมาย ! เช่น

$find เป็น a
$replace เป็น !

จากนั้น

$find เป็น b
$replace เป็น !

แล้วก็เปลี่ยน $find เป็น a b c d e f … y z A B C … $ # @ & * ทุกค่า (ยกเว้น – ที่เรา ไว้เก็บ longcat) เป็น $replace ค่า ! ให้หมด จะได้

ค่า hashed password ที่เคยเป็นอะไร ก็ไม่รู้ ไม่ต้องสนใจ จะถูกเปลี่ยนเป็น !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ในขั้นตอนนี้

ขั้นที่ 3

เราจะทำให้ ! ทุกตัวในแต่ละ column กลายเป็น ! ตัวเดียว โดยการ เปลี่ยนค่า !! เป็น ! ซ้ำ ๆ ดังนี้

$find เป็น !!
$replace เป็น !

ทำซัก 100 รอบ ค่า hashed password ใน column ของ user_pass ในขั้น #2 จาก !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! จะกลายเป็น ! ตัวเดียวใน ขั้น 3 นี้

ขั้นที่ 4
เปลี่ยนค่า ! ตัวเดียวเป็นค่า hashed password ที่เรากำหนดเอง ใช้เป็นค่า MD5 ได้เช่น ค่า cb5af2618d55494a6ecf0d196d13c2cf สร้างจาก MD5 hashing ของคำว่า sthpentest สร้างได้จากในเว็บ

$find เป็น !
$replace เป็น cb5af2618d55494a6ecf0d196d13c2cf

จะได้

ขั้นที่ 5

ณ จุดนี้เราก็แก้ค่า —– คืนเป็น longcat ดังนี้

$find เป็น —–
$replace เป็น longcat

จะได้

สุดท้ายเมื่อทำครบ 5 ขั้น เราก็สามารถจะแฮก searchreplace2.php โดยทำการอัปเดตรหัสผ่าน เป็นค่า MD5 ของรหัสผ่านที่เราต้องการได้ ดังตัวอย่างข้างต้น

ซึ่งสามารถทำด้วยมือกดเอง หรือเขียนเป็นโค้ด exploit.py ด้วยภาษา Python ก็จะหน้าตาประมาณนี้

วิธีที่สอง เขียนเป็นโค้ด exploit.py ด้วยภาษา Python

หน้าตาโค้ดจะประมาณนี้ วิธีการยิง exploit นี้ก็เริ่มจากเราก็ทำการติดตั้ง Python กับ module ต่าง ๆ ที่จำเป็นใน Kali container ก่อนดังนี้

Kali $ apt install -y python-pip
Kali $ pip install requests BeautifulSoup

จากนั้นก๊อปโค้ด exploit ไปใส่ไฟล์ exploit.py และแก้ตัวแปล user กับ url ให้ตรงกับที่เหมาะสม (ชื่อ user ที่เจอและ md5 ของรหัสผ่านที่ต้องการเปลี่ยนตามลำดับ) เอาไว้แล้วรันโล้ด

Kali $ nano exploit.py
Kali $ python exploit.py

สุดท้ายเข้าไปที่หน้า http://<vulnerablewordpress>/wp-login.php แล้วล็อคอินด้วย username longcat กับรหัสผ่านที่ใส่ใน exploit.py เช่น sthpentest หรือค่าอื่น ๆ ตามแต่ที่กำหนดไว้ ถัดมาก็เข้าไปแก้ไข โค้ดปลั้กอิน Hello Dolly เพื่อฝัง backdoor (web shell) ไว้ในโค้ด PHP ของเว็บ

จากนั้นเข้า backdoor เพื่อแฮกเข้าสู่ระบบปฏิบัติการณ์เบื้องหลังเว็บอีกที

จากตัวอย่างนี้จะเห็นว่าเราสามารถใช้ wpscan และติดตั้งใช้งาน python พร้อม module ต่าง ๆ บน Kali container ได้โดยตรงสำหรับการทดสอบแฮกท่าต่าง ๆ ซึ่งก็จะมีโปรแกรมอื่น ๆ อีกมากมาย เราก็ต้องรู้ก่อนว่าแต่ละโปรแกรมทำอะไรสำหรับงานอะไร จากนั้นก็ apt install -y ติดตั้ง แล้วก็เรียกใช้งานนั้นเอง

เทคนิคการตั้งค่า Kali ด้วย Docker แบบแมว ๆ

หลังจากเราดู workflow ปกติกันไปแล้วคราวนี้มาดูวิธีที่ผมใช้งานจริงบ้าง ก็จะคล้าย ๆ กันเพียงแต่ปรับแต่งให้สะดวกขึ้นหน่อย

  1. ทำการตั้งชื่อ container แทนที่จะใช้ค่า container ID เป็น hex ก็ตั้งชื่อที่สื่อความหมายขึ้นแทนโดยใช้ออฟชั่น –name kaliz
  2. ทำการตั้งโฟลเดอร์ สำหรับการแชร์ไฟล์ต่าง ๆ ระหว่าง ภายใน Kali container กับ บน host ที่รัน Docker โดยใช้ออฟชั่น -v ~/path/to/kali_shared/:/kali_shared/
  3. ทำการ forward port ไว้อันนึงให้ เมื่อต่อเข้ามาจาก ไอดีของ Docker host แล้วทะลุเข้าไปใน Kali container ด้วยเผื่อบางครั้งเราต้องการทำ reverse shell หรือเปิด service อะไรบางอย่าง ให้เครื่องภายนอกต่อเข้ามา ด้วยออฟชั่น -p 4444:4444

เมื่อรวมกันแล้วแทนที่เราจะสร้าง Kali container ปกติด้วยท่า

Host $ docker run -it kalilinux/kali-linux-docker bash

เราสามารถทำแบบนี้แทนได้เพื่อความสะดวก

Host $ docker run -it --name kaliz -v ~/path/to/kali_shared/:/kali_shared/ -p 4444:4444 kalilinux/kali-linux-docker:latest

จากนั้นเมื่อเราเคยสร้าง Kali container ไว้แล้วเราอยากจะเรียกขึ้นมาใช้แบบไว ๆ ได้ก็ทำแบบนี้

Host $ nano ~/.zshrc # ใครใช้ Bash ก็แก้ ~/.bash_profile alias kaliz='docker start -i kaliz' # กำหนดว่าถ้าเราเรียก kaliz จะเปิด Kali container ขึ้นมา

เมื่อไรที่เราต้องการเรียก Kali container ขึ้นมาใช้แบบเร่งด่วนเราก็แค่พิมพ์

$ kaliz

จะได้ Kali โผล่มาเวลาไม่กี่วินาทีพร้อมให้เรารันโปรแกรมแฮก ๆ ภายในได้ทันที แทนที่จะต้องนั่งรอ Virtualbox เปิด boot ใหม่หรือหมุนรอ resume state ที่เซฟไว้ ซึ่งโดยปกติผู้เขียนไม่ใช้โปรแกรมบน Kali ที่เป็นการคลิก (GUI) เลยทำให้การทำงานทั้งหมดผ่าน Docker container ได้อย่างรวดเร็ว

ทิ้งท้ายกับการใช้งาน Kali ด้วย Docker อยากให้ทุกคนที่อ่านมาถึงตรงจุดนี้ไปลองใช้งานกันจะพบว่าเราสามารถใช้ Docker อำนวยความสะดวกในงานด้าน IT security ได้อีกมากมาย ไม่ว่าจะเป็นการสร้าง container สำหรับทดสอบช่องโหว่ สำหรับรันโค้ดอันตราย สำหรับทดสอบโปรแกรม โดยไม่ต้องลง image ของ VMware หรือ Virtualbox ขนาดใหญ่อีกต่อไปแล้ว

บทความที่เกี่ยวข้อง