Where no man has GOne before!

תיאור

Where no man has GOne before!

פתרון

נתחיל מהרצת הקובץ המצורף:

root@kali:/media/sf_CTFs/bsidestlv/Where_no_man_has_GOne_before# ./revengme
Enter your password:test
Don't Worry, Relax, Chill and Try harder

עלינו להכניס סיסמא. נפתח את הקובץ באמצעות Ghidra וננתח אותו על מנת להבין מהי הסיסמא שיש להכניס.

מכיוון שמדובר בקובץ שנכתב ב-Golang, נשתמש בסקריפט-עזר שיבצע שחזור של שמות הפונקציות שהוסרו מהבינארי.

לאחר הרצת הקובץ, ניתן לבחון את פונקציית main.main. הפונקציה ארוכה ולא ברורה, אך יש בה עובדה בולטת אחת - קריאה יחידה לפונקציית runtime_memequal_4023F0. העובדה הזו חשובה כי במימוש טריוויאלי של קוד לבדיקת סיסמא, נצפה להשוואה של הסיסמא שהתקבלה לסיסמא הנכונה.

נריץ את התוכנה עם דיבאגר ונקבע Breakpoint על פונקציית ההשוואה הזו. כאשר התוכנה מגיעה אל ההשוואה, ניתן לראות את הדגל במספר רגיסטרים, למשל:

RSI:0xc00001c0c0("BSidesTLV{revenge isbest served cold}")

ניתן לאמת שזוהי הסיסמא הנכונה על ידי הרצת התוכנה בשנית:

root@kali:/media/sf_CTFs/bsidestlv/Where_no_man_has_GOne_before# ./revengme
Enteryourpassword:BSidesTLV{revengeisbestservedcold}
YouCrackedit,AHeroisborn