Skip to content

Commit 634f23f

Browse files
committed
Fix minor README.md formatting
1 parent 08cbb19 commit 634f23f

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

README.md

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,30 +21,34 @@ cd fuzzing_tutorial/
2121

2222
โปรแกรมตัวอย่างของเรา จะทำงานโดยการรับ file ที่เป็น input เข้ามา จากนั้นจะมีการอ่าน content ข้างในทีละบรรทัด โดยบรรทัดแรกต้องเป็นคำว่า **SAFEFILEHEADER** เท่านั้น ส่วนบรรทัดที่สอง เป็นการเลือก mode ในการทำงาน โดยต้องเป็นตัวอักษร **A** หรือ **Z** เท่านั้น
2323

24-
![](images/fuzzing_afl_snippet.png)
24+
<div style="text-align:center"><img src="images/fuzzing_afl_snippet.png" /></div>
2525

2626
โดยใน mode A จะทำการแสดง content ของแต่ละบรรทัดที่เหลือออกมา
27-
![](images/fuzzing_afl_normalrun.png)
27+
28+
<div style="text-align:center"><img src="images/fuzzing_afl_normalrun.png" /></div>
2829

2930
ส่วนใน mode Z จะทำการ copy ข้อความด้วยฟังก์ชัน strcpy() ไปยังตัวแปรที่กำหนดขนาดไว้ 20 bytes จากนั้นทำการกลับข้อความจากหน้าไปหลัง ก่อนที่จะแสดงข้อความออกมา เมื่อเราลองแก้ไฟล์ input/init_input ให้บรรทัดที่ 2 เป็น Z ดู จะได้ผลลัพธ์แบบนี้
30-
![](images/fuzzing_afl_normalrun_z.png)
31+
32+
<div style="text-align:center"><img src="images/fuzzing_afl_normalrun_z.png" /></div>
3133

3234
หลายคนอาจทราบดีว่าฟังก์ชัน strcpy() เป็นฟังก์ชันอันตรายที่สามารถทำให้เกิด buffer overflow ได้ง่าย ทำให้ mode Z เป็นจุดอันตรายในโปรแกรมนี้
3335

3436
ปัญหาคือ ด้วยการทำ Black Box Fuzzing ธรรมดา แทบจะเป็นไปไม่ได้เลยที่จะสุ่มให้ input บรรทัดแรกเป็นคำว่า SAFEFILEHEADER และบรรทัดที่สองเป็นตัวอักษร Z พร้อม ๆ กัน ทำให้ไม่สามารถ fuzzing ส่วนของ code ใน mode Z ได้ การทำ Grey Box Fuzzing เลยกลายมาเป็นตัวเลือกที่ดีสำหรับโปรแกรมแบบนี้
3537

3638
เมื่อแก้ input บรรทัดที่ 1 ให้ผิด
37-
![](images/fuzzing_afl_invalidhead.png)
39+
40+
<div style="text-align:center"><img src="images/fuzzing_afl_invalidhead.png" /></div>
3841

3942
เมื่อแก้ input บรรทัดที่ 2 ให้ผิด
40-
![](images/fuzzing_afl_invalidmode.png)
43+
44+
<div style="text-align:center"><img src="images/fuzzing_afl_invalidmode.png" /></div>
4145

4246
## Let's Fuzz!
4347

4448
เริ่มด้วยการ compile C source file ด้วย afl-gcc เพื่อทำ instrumentation
4549
`afl-gcc supersafeprogram.c -o supersafeprogram`
4650

47-
![](images/fuzzing_afl_instrumentation.png)
51+
<div style="text-align:center"><img src="images/fuzzing_afl_instrumentation.png" /></div>
4852

4953
จะเห็นว่ามีการทำ instrument ไว้ทั้งหมด 36 ตำแหน่งใน code ของเรา เพื่อให้ตัว AFL สามารถรู้ได้ว่า code ส่วนไหนที่ทำงานบ้างในระหว่างการทำ fuzzing
5054

@@ -55,24 +59,24 @@ cd fuzzing_tutorial/
5559

5660
เมื่อปล่อยให้ AFL ทำงานไปเรื่อย ๆ จนเจอว่าพบการ crash ก็สามารถกด Ctrl+C เพื่อหยุดการทำงานได้
5761

58-
![](images/fuzzing_afl_found.png)
62+
<div style="text-align:center"><img src="images/fuzzing_afl_found.png" /></div>
5963

6064
ไฟล์ input ที่ทำให้โปรแกรมนั้น crash จะถูกเก็บไว้ใน *output/crashes* สามารถเข้าไปดูได้ด้วยคำสั่ง
6165
`ls output/crashes/`
6266

63-
![](images/fuzzing_afl_crashes.png)
67+
<div style="text-align:center"><img src="images/fuzzing_afl_crashes.png" /></div>
6468

6569
จะพบไฟล์อยู่ สามารถอ่านไฟล์ได้ด้วยคำสั่ง
6670
`cat output/crashes/<ชื่อไฟล์>`
6771

68-
![](images/fuzzing_afl_result.png)
72+
<div style="text-align:center"><img src="images/fuzzing_afl_result.png" /></div>
6973

7074
จะเห็นได้ว่าตัว AFL สามารถเจอว่าเมื่อกำหนดให้บรรทัดที่ 1 อยู่เหมือนเดิม แต่เปลี่ยนบรรทัดที่ 2 เป็น Z จะสามารถทำให้โปรแกรม crash ได้ ทั้งที่ input ต้นแบบของเราไม่มีการใช้ mode Z เลย
7175

7276
เมื่อลองรันไฟล์ของเรา ด้วย input ที่ afl สร้างขึ้นมา จะพบว่ามีการ crash เกิดขึ้นจริง
7377
`./supersafeprogram output/crashes/<ชื่อไฟล์>`
7478

75-
![](images/fuzzing_afl_replicate.png)
79+
<div style="text-align:center"><img src="images/fuzzing_afl_replicate.png" /></div>
7680

7781
จากจุดนี้ เราสามารถใช้ debugger เพื่อวิเคราะห์การทำงานของโปรแกรมเพื่อวิเคราะห์ว่าช่องโหว่เกิดจากอะไร และอาจโดนโจมตีได้อย่างไรต่อไป
7882

0 commit comments

Comments
 (0)