iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 30
0
Security

CTF30系列 第 30

CTF 18: Important Service (Pwn, Kindergarten PWN)

CTF30 來到尾聲。
今年決定從領域非常廣的 網路安全概述,跳到非常偏實作的 CTF30。原意是希望藉著這一整個月都持續看 CTF Writeup 來累積更多的 CTF 實戰經驗,並學習如何運用各種解題技巧和工具來在駭客比賽中取得更好的結果。

多年來一直在業餘狀況下做研究,偶而打打 CTF 和 PT,但感覺經驗累積還需要更快才行。

今年參賽有組了隊伍 Infosec Horadrim,但可惜的是有隊友因為發文界面 UI 的設計,誤以為文章已發出,但其實只是存成草稿,最後導致團隊挑戰失敗。

fUmEKRa.png

這個 UI 導致的問題是除了我的參賽隊友遇到以外,亦有從朋友間聽聞,有其他參賽者也發生一樣的狀況。由於我用 Email 和主辦反映後仍未得到改善,故只好在文章上公開講了。希望未來的參賽者,能夠互相提醒,避免憾事再度發生。

值得一提的是,今年參賽 22 人的 好想工作室第二屆鐵人賽 亦有用上去年我做的 催文機 (GitHub),時時提醒發文,今年順利完賽。

故若主辦方未來還是不會修改這個 UI,我就會推薦團隊參賽的大家一起來使用這個 Bot。甚至可以做成某種平臺,每天幫你提醒。

Important Service

由於這個程式的中,函式的位置不是固定的,所以我們做 exploit 時,要以相對位置來計算。

(gdb) info functions
All defined functions:

Non-debugging symbols:
0x0000000000001000  _init
0x0000000000001030  putchar@plt
0x0000000000001040  __isoc99_fscanf@plt
0x0000000000001050  puts@plt
0x0000000000001060  fread@plt
0x0000000000001070  __stack_chk_fail@plt
0x0000000000001080  system@plt
0x0000000000001090  fgetc@plt
0x00000000000010a0  setvbuf@plt
0x00000000000010b0  _start
0x00000000000010e0  deregister_tm_clones
0x0000000000001110  register_tm_clones
0x0000000000001150  __do_global_dtors_aux
0x00000000000011a0  frame_dummy
0x00000000000011a9  givemeshellpls
0x00000000000011bc  dologic
0x0000000000001279  main
0x00000000000013d0  __libc_csu_init
0x0000000000001440  __libc_csu_fini
0x0000000000001448  _fini

所以這裡會有一個有趣的功能 giveshellpls,注意它的位置只和 dologic 只差 1 byte。

   0x0000000000001293 <+26>:    lea    rax,[rip+0xffffffffffffff22]        # 0x11bc <dologic>
   0x000000000000129a <+33>:    mov    QWORD PTR [rbp-0x20],rax

由於我這次連 r2 都沒用,所以只能用 gdb 來拆程式。
程式的一開始,大概有一句 var = dologic;。所以我們可以複寫這個變數,然後跳到 givemeshellpls

我們的 varrbp-0x20,然後我們可以輸入的字串位置在 rbp-0x420
這代表說,只要覆蓋 0x400 byte 後,就可以改掉 var 的最低 bit,然後拿下 flag。

參考資料

https://www.pwndiary.com/write-ups/p-w-n-ctf-2018-important-service-write-up-pwn259/


上一篇
CTF 18: Important Service (Pwn, Kindergarten PWN)
系列文
CTF3030

尚未有邦友留言

立即登入留言