การติดตั้งและใช้งาน Kali ด้วย Docker ฉบับมือโปร
15 มีนาคม 2019
สำหรับคนที่สนใจเรื่องแฮก ๆ คำศัพท์เทคนิคคำแรก ๆ ที่น่าจะเห็นผ่านตาเวลาไปหาข้อมูลว่าจะแฮกเป็นทำยังไงคงหนีไม่พ้นคำว่า 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
- กินพื้นที่เครื่องน้อย และทำงานได้เร็ว
- เมื่อติดตั้ง Kali container เสร็จแล้ว จะกลับมาเรียกใช้งานได้สะดวกและง่าย
- สามารถเลือกติดตั้งเฉพาะโปรแกรมที่เราจะใช้งานได้
- สามารถสำรองข้อมูลเครื่อง (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 ปกติกันไปแล้วคราวนี้มาดูวิธีที่ผมใช้งานจริงบ้าง ก็จะคล้าย ๆ กันเพียงแต่ปรับแต่งให้สะดวกขึ้นหน่อย
- ทำการตั้งชื่อ container แทนที่จะใช้ค่า container ID เป็น hex ก็ตั้งชื่อที่สื่อความหมายขึ้นแทนโดยใช้ออฟชั่น –name kaliz
- ทำการตั้งโฟลเดอร์ สำหรับการแชร์ไฟล์ต่าง ๆ ระหว่าง ภายใน Kali container กับ บน host ที่รัน Docker โดยใช้ออฟชั่น -v ~/path/to/kali_shared/:/kali_shared/
- ทำการ 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 ขนาดใหญ่อีกต่อไปแล้ว
บทความที่เกี่ยวข้อง