0Pricing
Ethical Hacking Academy · บทเรียน

การทำ fuzz เพื่อค้นหาการล่ม

ค้นหาออฟเซ็ต

การทำ fuzz เพื่อค้นหาการล่ม เป็นบทเรียน Ethical Hacking Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Ethical Hacking Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Ethical Hacking Academy มีบทเรียนทั้งหมด 4 บทเรียน

ฟัซซิงคืออะไร

ฟัซซิง คือการส่งข้อมูลนำเข้าที่ผิดรูปแบบหรือมีขนาดใหญ่เกินไปให้โปรแกรม เพื่อกระตุ้นพฤติกรรมที่ไม่คาดคิด โดยเฉพาะการหยุดทำงาน การหยุดทำงานมักบ่งชี้ถึงข้อบกพร่องที่ทำให้หน่วยความจำเสียหาย

สำหรับบัฟเฟอร์โอเวอร์โฟลว์ เป้าหมายแรกคือทำให้เป้าหมายหยุดทำงาน เพื่อยืนยันว่ามีโอเวอร์โฟลว์อยู่

ขั้นตอนการทำงาน

ขั้นตอนการโจมตีแบบคลาสสิกมีดังนี้:

  • ทำฟัซเพื่อทำให้โปรแกรมหยุดทำงาน
  • ค้นหาออฟเซ็ตที่แน่นอนไปยังแอดเดรสย้อนกลับ
  • ควบคุม EIP
  • เปลี่ยนเส้นทางไปยังเชลล์โค้ด

บทเรียนนี้ครอบคลุมสองขั้นตอนแรก

การแนบตัวดีบัก

หากต้องการสังเกตการหยุดทำงาน ให้แนบตัวดีบัก (เช่น Immunity Debugger หรือ x64dbg บน Windows หรือ GDB บน Linux) เข้ากับเป้าหมาย

เมื่อโปรแกรมหยุดทำงาน ตัวดีบักจะแสดงสถานะของเรจิสเตอร์ โดยเฉพาะ EIP ซึ่งเผยให้เห็นว่าเราเขียนทับแอดเดรสย้อนกลับแล้วหรือไม่

การส่งข้อมูลนำเข้าที่เพิ่มขึ้น

ฟัซเซอร์อย่างง่ายจะส่งสตริงที่มีขนาดเพิ่มขึ้นเรื่อย ๆ จนกว่าโปรแกรมจะหยุดทำงาน จุดเริ่มต้นที่ใช้กันทั่วไปคือการส่งอักขระ 'A' จำนวนมาก (0x41)

หาก EIP แสดง 41414141 หลังการหยุดทำงาน แสดงว่าคุณยืนยันการควบคุมแอดเดรสย้อนกลับได้แล้ว

python -c 'print("A"*2000)' | ./vuln

การยืนยันการหยุดทำงาน

เมื่อแอปพลิเคชันหยุดทำงานและ EIP เท่ากับ 41414141 โอเวอร์โฟลว์ได้ไปถึงแอดเดรสย้อนกลับที่บันทึกไว้แล้ว

แต่คุณยังไม่ทราบว่ามีไบต์กี่ไบต์อยู่ก่อน EIP อย่างแน่ชัด การส่งไบต์เดียวกันทั้งหมดบอกได้เพียงว่าควบคุม EIP ได้ ไม่ได้บอกตำแหน่งของ EIP

การค้นหาออฟเซ็ต: รูปแบบวนซ้ำ

หากต้องการหาออฟเซ็ตที่แม่นยำ ให้ส่งรูปแบบเฉพาะที่ไม่ซ้ำกันแทนการส่ง 'A' ทั้งหมด หน้าต่างขนาด 4 ไบต์แต่ละหน้าต่างจะแตกต่างกัน ดังนั้นค่าที่ไปอยู่ใน EIP จึงระบุออฟเซ็ตได้

Metasploit มี pattern_create.rb มาให้สำหรับงานนี้

msf-pattern_create -l 2000

การอ่านออฟเซ็ต

หลังจากหยุดทำงานด้วยรูปแบบดังกล่าว ให้จดค่าที่อยู่ใน EIP แล้วส่งค่าให้ pattern_offset.rb ซึ่งจะคืนจำนวนไบต์ที่แน่นอนก่อนถึง EIP

ออฟเซ็ตนี้คือขนาดของข้อมูลเติมก่อนหน้าไบต์ของแอดเดรสย้อนกลับ

msf-pattern_offset -l 2000 -q 39654138

การตรวจสอบออฟเซ็ต

โปรดตรวจสอบเสมอ สร้างข้อมูลนำเข้าที่มีไบต์ 'A' จำนวน offset ไบต์ ตามด้วยไบต์ 'B' สี่ไบต์ (0x42) หาก EIP กลายเป็น 42424242 แสดงว่าออฟเซ็ตถูกต้อง

การยืนยันนี้ช่วยป้องกันการเสียเวลาหลายชั่วโมงไปกับการแก้ไขข้อผิดพลาดที่คลาดเคลื่อนไปไม่กี่ไบต์ในภายหลัง

"A"*offset + "B"*4   # EIP should become 42424242

การระบุ ESP

หลังจากควบคุม EIP แล้ว ให้สังเกตด้วยว่า ESP ชี้ไปที่ใดในขณะที่เกิดการหยุดทำงาน โดยปกติ ESP จะชี้ไปถัดจากแอดเดรสย้อนกลับที่ถูกเขียนทับ เข้าไปยังบัฟเฟอร์ส่วนที่เหลือของคุณ

พื้นที่นั้นคือบริเวณที่คุณจะวางเชลล์โค้ดในภายหลัง

สรุปเครื่องมือ

เครื่องมือฟัซซิงและเครื่องมือสร้างรูปแบบที่มีประโยชน์ ได้แก่:

  • Spike และ boofuzz: เครื่องมือฟัซโปรโตคอลเครือข่าย
  • pattern_create / pattern_offset: ใช้ระบุตำแหน่งออฟเซ็ตของ EIP
  • mona.py ใน Immunity: ทำงานรูปแบบ ออฟเซ็ต และอักขระต้องห้ามโดยอัตโนมัติ
!mona pattern_create 2000

ความสามารถในการทำซ้ำมีความสำคัญ

การหยุดทำงานที่มีประโยชน์ต้องทำซ้ำได้ ให้บันทึกข้อมูลนำเข้าที่ทำให้เกิดปัญหาไว้อย่างครบถ้วน และเรียกใช้ใหม่จากสถานะสะอาดเพื่อยืนยันว่าออฟเซ็ตคงที่

การหยุดทำงานที่ไม่สม่ำเสมอมักหมายความว่าข้อบกพร่องไม่ใช่สแตกโอเวอร์โฟลว์ที่ชัดเจน หรือมีเงื่อนไขบางอย่าง (จังหวะเวลา ความยาว เนื้อหา) เปลี่ยนแปลงไปในแต่ละครั้งที่เรียกใช้

ตรวจสอบอย่างรวดเร็ว

ลองทบทวนว่าเหตุใดรูปแบบวนซ้ำจึงดีกว่าสตริงที่ประกอบด้วยไบต์เหมือนกันทั้งหมด

สรุปทบทวน

ขณะนี้คุณทราบวิธีค้นหาออฟเซ็ตที่ทำให้โปรแกรมหยุดทำงานแล้ว:

  • ทำฟัซด้วยข้อมูลนำเข้าที่เพิ่มขึ้นเพื่อกระตุ้นการหยุดทำงาน และยืนยันด้วย 41414141 ใน EIP
  • ใช้รูปแบบวนซ้ำร่วมกับ pattern_create / pattern_offset เพื่อค้นหาออฟเซ็ตที่แน่นอน
  • ตรวจสอบด้วยข้อมูลเติมและไบต์ 'B' สี่ไบต์ (42424242)
  • สังเกตว่า ESP ชี้ไปที่ใดเพื่อใช้วางเชลล์โค้ดในภายหลัง

ถัดไปคุณจะควบคุม EIP ได้อย่างสมบูรณ์และเปลี่ยนเส้นทางการทำงาน

คำถามที่พบบ่อย

บทเรียน “การทำ fuzz เพื่อค้นหาการล่ม” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การทำ fuzz เพื่อค้นหาการล่ม” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Ethical Hacking Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Ethical Hacking Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การทำ fuzz เพื่อค้นหาการล่ม”

ค้นหาออฟเซ็ต คุณปฏิบัติ Ethical Hacking Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Ethical Hacking Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Ethical Hacking Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การทำ fuzz เพื่อค้นหาการล่ม” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Ethical Hacking Academy นี้ได้ไหม

ได้ บทเรียน Ethical Hacking Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. หน่วยความจำและสแตก
  2. การทำ fuzz เพื่อค้นหาการล่ม
  3. การควบคุม EIP
  4. เชลล์โค้ดและการโจมตีด้วยช่องโหว่
← กลับไปที่ Ethical Hacking Academy