Metasploit เป็นเครื่องมือที่เรียกว่า Exploit Framework ซึ่งสามารถทำได้หลายอย่าง ตั้งแต่เป็น framework สำหรับการใช้งาน exploit ระบบ รวมถึงการใช้งานเพื่อการสร้าง module ใดๆในการโจมตี หรือการหาข้อมูลเครื่องเป้าหมาย โดยมีอีกส่วนที่สำคัญคือการรสร้าง backdoor หรือ payload ขึ้นมาเอง โดยใช้คำสั่งที่ชื่อว่า msfvenom

โดยตัว payload นั้นจะแบ่งออกเป็น 3 ประเภท

  • single(inline) หรือเรียกอีกอย่างว่า Stageless
  • staged
  • stager

ซึ่งวันนี้ตัวที่เราจะพูดถึงคือความแตกต่างระหว่าง Staged และ Stageless ครับ

Staged Payloads

staged เป็น payload ชนิดหนึ่งใน Metasploit ตัวอย่างเช่น windows/meterpreter/reverse_tcp โดยเมื่อทำการสร้าง staged ขึ้นมาจะมีส่วนที่เรียกว่า stager เข้าไปด้วยโดยอัตโนมัติ ซึ่ง stager นั้นเป็นส่วนเล็กๆที่จะกระทำเมื่อถูก execute ดังนี้

  • สร้าง connection กลับไป Metasploit Listener
  • อ่าน 4 bytes แรกจาก Metasploit แล้วคำนวณขนาด payload ที่เหลือ
  • ทำการ allowcate memory ซึ่งเป็น RWX (readable, writable and executable) ตามขนาดที่คำนวณ
  • อ่านส่วน payload ที่เหลือจากการส่งมายัง stager ผ่าน connect จากนั้นเขียนไปยังส่วน memory ที่จอง (ส่ง metsrv.dll มาให้ก่อน เมื่อเสร็จแล้วจึงส่ง stdapi และ priv dll มาให้อีกที)
  • เมื่อกระทำสำเร็จ ก็เริ่มทำการรัน payload ที่เหลือ ซึ่งจะกระทำส่วนการทำงานที่เหลือของ Metasploy Staged payload
    • Loads ตัวเอง (เช่น metsrv) เข้าไปยัง memory โดยใช้ Reflective DLL Injection.
    • คำนวณ offset ของ configuration block.
    • Patch configuration block ที่เก็บส่วน open socket handle ที่ใช้เชื่อมต่อกลับไปยัง Metasploit
    • Executes dllmain() ผ่าน metsrv ที่ถูกโหลดเข้าไปใหม่, passing  pointer ไปยัง configuration block เพื่อให้ metsrv ควบคุม connection
    • เมื่อมีการรัน metsrv จะกระทำสร้าง connection กลับไปหา Metasploit

จากที่เห็น stager นั้นไม่มีหน้าที่อะไรมาก เป็นแค่ตัวที่จะสร้าง connection กลับไปเพื่อเอา payload ที่ใหญ่มาซึ่งก็คือ payload มารันก็เพียงเท่านั้น ซึ่งเพื่อให้ stager สามารถทำงานได้อย่างง่ายๆในพื้นที่ที่ค่อนข้างจำกัดในการ exploit แต่ละที

ทีนี้มาดูส่วนของ Metasploit Listener บ้างว่าทำอะไรบ้าง

  • รับ Connection ใหม่
  • สร้าง payload ขึ้นมา ซึ่งจากตัวอย่างเราใช้ windows/meterpreter/reverse_tcp ดังนั้นสิ่งที่เกิดขึ้นคือ payload ที่ถูกสร้างขึ้นจะเป็น stage แรกของ Meterpreter และมาในรูปแบบของ dynamically patched metsrv DLL แล้วตามด้วย configuration block
  • ส่ง 4-byte ที่เป็นตัวบอกขนาดของ payload ที่เหลือ
  • ส่ง payload ที่เหลือกลับไปให้เครื่องเป้าหมาย
  • จากนั้นรอให้ payload ถูกรัน จากนั้นจะมี connection กลับมาและได้มาซึ่ง Meterpreter session

เป็นอันจบกระบวนการของ Staged Payload

Stageless payloads

ทีนี้มาดูในส่วนของ Stageless นั้นเป็น payload ที่ไม่ค่อยมีคนใช้เพราะเป็นการทำงานแบบทีเดียวจบ คือจะเป็นการสั่งงานไปที่เครื่องปลายทางโดยไม่มีการมาโหลดอะไรจาก Listener ไม่เหมือนกับ stager โดยตัวอย่าง payload ของ Stageless คือ windows/meterpreter_reverse_tcp

ตัว Stageless นั้นจะจบในตัวเองเลย โดยมีขั้นตอนการทำงานดังนี้

  • metsrv จะถูกนำมาใช้ทันทีโดย pointer ไปยัง configuration block ซึ่งถูก set มาให้เหมาะสมกับ payload อยู่แล้ว
  • โหลด stdapi  และ priv dll ต่อ
  • metsrv ทำการสร้าง connection กลับไปยัง Metasploit Listener โดยอ่านจาก configuration block
  • จากนั้นก็คุยกับ Metasploit ผ่าน TLV Packet

ในส่วนของ Metasploit Listener นั้น

  • ในส่วนการจัดการ connection ก็รอรับ connection กันไป
  • เมื่อ connection ใหม่เกิดขึ้น แล้วพบว่าเป็น stageless ดังนั้นมันก็จะไม่มีการ generate payload อะไรอีก ซึ่งทำให้จะไม่มีการส่ง 4 byte หรือ payload อะไรไปให้แต่อย่างใด
  • คุยผ่าน SSL
  • ที่เหลือก็จะเป็นการสร้าง session ต่างปกติเหมือน staged session

ก็จบไปแล้วสำหรับการอธิบาย Stager vs Stageless นะครับ หากใครสนใจอยากได้รายละเอียดเพิ่มเติมก็สามารถลงเรียน Course Basic Penetration Testing ได้ครับ

Source:: Buffered.io,Rapid7