hello_world(簽到)
思路:✅
這道題就是利用printf函式洩露libc的基地址,然後再次進行棧溢位透過system,/bin/sh來獲取shell
wp:
invisible_flag
思路:✅
題目提示orw,那我們先看看是否開了沙盒
那麼是開了沙盒的,試試orw讀取flag
雖然保護全開但是程式會執行我們寫的shellcdoe那麼就可以orw讀取flag了
wp:
static_link
思路:✅
那麼這題提示我們是靜態編譯,對於靜態編譯的,哪些ret2libc什麼的都沒法使用了,但是我們可以利用程式現有的函式,比如read,write,mprotect....等等。那麼這道題目就可以利用mprotect函式來獲取shell,對於這個函式詳細的解釋,可以看看這篇部落格 mprotect靜態編譯
wp:
guestbook1
思路:✅透過修改index和name來完成類似於棧遷移的過程,先修改最後一個位元組到backdoor,因為我們不知道棧的地址,但是可以透過爆破最後一個位元組來完成遷移(有1/16的機率)
wp:
baby_gift
思路:✅題目給了我們gift函式,但是我發現沒有什麼實際的作用,但是他提醒了我們要看看rdi(hahaha)
程式是有溢位的,但是沒有pop_rdi那一類的gadget
那我們看看反彙編的GetInfo函式,發現了一個不得了的東西
那麼就是我們輸入棧上的資料被賦值給了rax,rax賦值給了rdi,也就是我們可以,透過輸入的資料來控制rdi,那麼我輸入一個%p後面\x00截斷一下,然後返回地址呼叫printf是不是就可以洩露rsi的地址,我們還要看一下rsi的地址是不是跟libc的地址有關
發現是有關的,那麼我們就可以計算出read函式的地址,進而得到libc版本和libc_base
那麼接下來就再來一次溢位透過輸入/bin/sh控制rdi,然後system就好了
但是值得注意的是我們要把eax清零之後再進行我們的列印和system函式,不然就會出現一系列的問題。
wp:
fmt
思路:✅題目是格式化字串型別的題目,而且給了後門函式,還有libc的地址,但是這次沒有給我們printf而是scanf,但是本質上是一樣的,都可以進行漏洞的利用,因為程式利用exit來退出的,我們可以利用sacnf的%s來進行修改exit_hook為後門函式,關於這個函式具體可以看這個部落格 https://www.cnblogs.com/bhxdn/p/14222558.html
wp:
❗這裡踩個坑,我發現直接gdb除錯和使用指令碼來動態除錯,exit_hook的偏移不一樣,可能是我輸入的東西的區別?.......所有還是以指令碼除錯的為主吧haha
simple_srop
思路1:✅本題開了沙盒,所以不能直接sh來進行getshell,可以進行orw讀取flag,注意一下偏移即可
思路2:✅透過mprotect函式執行orw shellcode,當然這個shellcode可以手寫也可以使用工具,其實兩種思路都是差不多的都要注意偏移
wp:
Intermittent
思路:✅這個題目限制了我們的shellcode,但是別怕,因為程式會跳到,可執行段上去執行,然後我們輸入的資料在棧上,它會四個位元組一組賦值給可執行段上,但是不連續,我們可以透過我們輸入棧上的資料和它配合來syscall
因為rax要為一個合法地址,所以我們要給rax賦值(它實際上是把rax最低的一個位元組加到它本身)
wp:
那先到這裡吧(後續我再補上haha)
總結:這次收穫很大,比賽不是目的,而是總結提高的一次機會,師傅們都很厲害,大家一起交流,有什麼具體的問題可以評論留言,第一時間解答!!