การควบคุม EIP
เขียนทับที่อยู่ส่งคืน
การควบคุม EIP เป็นบทเรียน Ethical Hacking Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Ethical Hacking Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Ethical Hacking Academy มีบทเรียนทั้งหมด 4 บทเรียน
เป้าหมาย
เมื่อมีออฟเซ็ตแล้ว คุณจึงสามารถใส่ไบต์สี่ไบต์ใด ๆ ลงใน EIP ได้ คำถามตอนนี้คือ คุณควรใส่แอดเดรสใดลงไป
คุณต้องการให้ EIP ชี้ไปยังเชลล์โค้ด แต่ไม่สามารถกำหนดแอดเดรสของสแตกแบบตายตัวได้ คุณต้องการการกระโดดที่เชื่อถือได้
เหตุใดจึงไม่กำหนดแอดเดรสของสแตกแบบตายตัว
แอดเดรสของสแตกที่เชลล์โค้ดของคุณอยู่สามารถเปลี่ยนไปในแต่ละครั้งและในแต่ละระบบ แม้การเปลี่ยนแปลงสภาพแวดล้อมเพียงเล็กน้อยก็ทำให้แอดเดรสเคลื่อนที่ได้
ดังนั้น ให้ใช้คำสั่งที่เสถียรซึ่งมีอยู่ในหน่วยความจำและเปลี่ยนเส้นทางการทำงานไปยังตำแหน่งที่ ESP ชี้อยู่ในขณะนั้น
เทคนิค JMP ESP
หาก ESP ชี้ไปยังเชลล์โค้ดในขณะที่เกิดการหยุดทำงาน คุณสามารถตั้ง EIP ให้เป็นแอดเดรสของคำสั่ง JMP ESP ได้ เมื่อ EIP โหลดแอดเดรสนั้น CPU จะทำงานตาม jmp esp และกระโดดเข้าสู่เชลล์โค้ดของคุณ
การอ้อมผ่านคำสั่งนี้ทำให้การโจมตีเชื่อถือได้โดยไม่ขึ้นกับแอดเดรสของสแตกที่แน่นอน
jmp esp ; opcode FF E4การค้นหา JMP ESP
ให้ค้นหาไบต์รหัสคำสั่ง FF E4 ในโมดูลที่โหลดอยู่ (ควรเลือกโมดูลที่ไม่มี ASLR) แอดเดรสฐานของโมดูลจะคงที่ ทำให้แก็ดเจ็ตนี้เชื่อถือได้
เครื่องมืออย่าง mona.py สามารถค้นหาคำสั่งที่เหมาะสมได้โดยอัตโนมัติ
!mona jmp -r esp -cpb "\x00"การหลีกเลี่ยงอักขระต้องห้าม
ค่าบางไบต์ทำให้ข้อมูลนำเข้าเสียหายก่อนจะไปถึงบัฟเฟอร์อย่างครบถ้วน ค่าที่พบได้บ่อยคือไบต์ว่าง 0x00 ซึ่งใช้ยุติสตริงภาษา C ส่วนค่าอื่น ๆ ได้แก่ 0x0a (ขึ้นบรรทัดใหม่) และ 0x0d (คืนแคร่)
แอดเดรส JMP ESP ต้องไม่มีอักขระต้องห้ามเหล่านี้
การระบุอักขระต้องห้าม
หากต้องการค้นหาว่าไบต์ใดเป็นอักขระต้องห้าม ให้ส่งค่าไบต์ทั้งหมดตั้งแต่ 0x00 ถึง 0xff ในบัฟเฟอร์ แล้วตรวจสอบหน่วยความจำในตัวดีบัก ไบต์ที่ถูกดัดแปลงหรือหายไปคืออักขระต้องห้าม
คุณจะตัดไบต์เหล่านี้ออกจากทั้งแอดเดรสย้อนกลับและเชลล์โค้ด
!mona bytearray -cpb "\x00"การสร้างการเขียนทับ EIP
ตอนนี้ให้ประกอบข้อมูลนำเข้า: ข้อมูลเติมจนถึงออฟเซ็ต จากนั้นตามด้วยแอดเดรส JMP ESP โดยเรียงตามลำดับลิตเทิลเอนเดียน
หาก JMP ESP อยู่ที่ 0x625011AF ไบต์ที่เขียนจะกลับลำดับกัน
buf = "A"*offset + "\xaf\x11\x50\x62" # 0x625011AF, little-endianการตรวจสอบการกระโดด
ตั้งจุดพักที่แอดเดรส JMP ESP ในตัวดีบัก แล้วเรียกใช้การโจมตี เมื่อ EIP มาถึงแอดเดรสนั้นและก้าวเข้าสู่ตำแหน่งที่ ESP ชี้อยู่ แสดงว่าคุณยืนยันการเปลี่ยนเส้นทางที่เชื่อถือได้แล้ว
ณ จุดนี้ EIP ชี้ไปยังตำแหน่งที่คุณจะวางเชลล์โค้ด
การจัดพื้นที่สำหรับเชลล์โค้ด
หลังแอดเดสย้อนกลับ บัฟเฟอร์ส่วนที่เหลือ (ซึ่ง ESP ชี้อยู่) จะเก็บเชลล์โค้ดของคุณ หากพื้นที่คับแคบ คุณอาจต้องใช้การกระโดดระยะสั้นหรือย้ายตำแหน่ง
ราง NOP (ชุดไบต์ที่ไม่ทำงาน 0x90) ก่อนเชลล์โค้ดจะเพิ่มความยืดหยุ่น ทำให้การกระโดดลงจุดใดก็ได้ในรางนั้น
buf = "A"*offset + ret + "\x90"*16 + shellcodeการประกอบทุกส่วนเข้าด้วยกัน
โครงสร้างการโจมตีทั้งหมดมีดังนี้:
- ข้อมูลเติมจนถึงออฟเซ็ต
- แอดเดรส JMP ESP (ไม่มีอักขระต้องห้าม เรียงแบบลิตเทิลเอนเดียน)
- ราง NOP
- เชลล์โค้ด
คุณอยู่ห่างจากการเปิดเชลล์เพียงขั้นตอนเดียว
ทางเลือกอื่นนอกเหนือจาก JMP ESP
JMP ESP เป็นวิธีเปลี่ยนเส้นทางแบบคลาสสิก แต่ไม่ใช่วิธีเดียว หากเรจิสเตอร์ตัวอื่นชี้ไปยังบัฟเฟอร์ของคุณ คุณสามารถใช้ jmp eax, call esp หรือแก็ดเจ็ต push esp; ret ได้
หลักการเหมือนเดิม: ค้นหาคำสั่งที่เสถียรซึ่งโอนการควบคุมไปยังตำแหน่งที่เชลล์โค้ดของคุณอยู่
ตรวจสอบอย่างรวดเร็ว
ลองทบทวนว่าเหตุใดจึงนิยมใช้ JMP ESP มากกว่าแอดเดรสของสแตกที่กำหนดแบบตายตัว
สรุปทบทวน
ขณะนี้คุณควบคุมลำดับการทำงานได้แล้ว:
- เขียนทับ EIP ด้วยแอดเดรสของแก็ดเจ็ต JMP ESP แทนแอดเดรสสแตกที่เปราะบาง
- ค้นหาแก็ดเจ็ตในโมดูลที่ไม่มี ASLR และหลีกเลี่ยงอักขระต้องห้าม เช่น
0x00 - เขียนแอดเดรสแบบลิตเทิลเอนเดียน และเพิ่มราง NOP ก่อนเชลล์โค้ด
ถัดไปคุณจะสร้างเชลล์โค้ดและเปิดเชลล์
คำถามที่พบบ่อย
บทเรียน “การควบคุม EIP” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การควบคุม EIP” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Ethical Hacking Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Ethical Hacking Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การควบคุม EIP”
เขียนทับที่อยู่ส่งคืน คุณปฏิบัติ Ethical Hacking Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Ethical Hacking Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Ethical Hacking Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การควบคุม EIP” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Ethical Hacking Academy นี้ได้ไหม
ได้ บทเรียน Ethical Hacking Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ