iT邦幫忙

2024 iThome 鐵人賽

DAY 23
0
Security

從0開始的打Pwn教學系列 第 23

【Day-23】Return to function

  • 分享至 

  • xImage
  •  

既然知道怎麼使用pwntools後,我們來設計一個小程式(生成的時候都會關閉保護),這支程式有一個here的Function,但main並沒有Call到它,不過main有一個危險的gets,我們可以利用它造成的Stack buffer overflow來覆蓋掉Return address,跳進here中。
https://ithelp.ithome.com.tw/upload/images/20241007/20169016q2Qpcthm1D.png

我們不需要大費周章的自己輸入字串來去計算要放多少才會到RBP然後再去看Return address,除了我們有方便的pwntools工具以外,還有一點是Stack aligment的問題。
Stack aligment的目的主要是向下相容以及增加運算速度,他能夠讓程式的Stack空間被整除,例如,在64位元的 glibc中,RSP被預設對齊到16的倍數,以確保符合Calling convention,並提高CPU存取記憶體的效率,如果使用的Stack空間不足,系統會自動進行對齊,以確保整體效能。
而這也會導致我們如果直接看程式碼來做Stack buffer overflow,可能會把要塞到Return address的Padding數量搞錯。
所以這邊我們可以利用pwntools的cyclic來計算,生一個絕對會大於Stack空間的數量,這邊生40個大小的。
https://ithelp.ithome.com.tw/upload/images/20241007/20169016CFAJ135xfC.png

然後直接讓程式跑起來,因為我們程式很簡單,不需要設定break point,只有一個gets,所以輸入完後程式就會直接到ret的地方。
https://ithelp.ithome.com.tw/upload/images/20241007/20169016QSPm0OCIDH.png

這邊直接顯示Segmentation fault,接著來看暫存器狀態。
https://ithelp.ithome.com.tw/upload/images/20241007/20169016aNjJVqQoKO.png

可以看到RBP的值被改變了,我們把RBP的值送到cyclic_find裡面去看塞到RBP的padding數量有多少。
https://ithelp.ithome.com.tw/upload/images/20241007/20169016kIPCHBHYvi.png

既然知道padding到RBP需要10,而RBP佔的空間是8 Bytes,那就可以推算說到Return address應該需要18個Bytes,然後就可以放我們想要他跳到的Address上了,這邊看一下here的Address是多少。
https://ithelp.ithome.com.tw/upload/images/20241007/20169016OM58HwmmfW.png

有了padding的數量和轉跳的Address後,我們就來寫個簡單的python程式,首先先將test打開,接收到字串input:後,輸入18個a和here的Address,接著就接手這個程式。
https://ithelp.ithome.com.tw/upload/images/20241007/20169016sAkRBJ6eVL.png

跟預想的一樣,執行後就會跳到here裡面,從它puts出"Hi!"的字串來得證。
https://ithelp.ithome.com.tw/upload/images/20241007/20169016s0XPVzQ3Fl.png

既然我們知道了怎麼改變程式的順序,那我們也可以玩一些其他的東西,比如讓main跑兩次。
https://ithelp.ithome.com.tw/upload/images/20241007/20169016vDd3y6sIpX.png
https://ithelp.ithome.com.tw/upload/images/20241007/201690162buJg2XVri.png

就會發現出現了input:,但其實我們的sendline已經有送過一次字串了。
https://ithelp.ithome.com.tw/upload/images/20241007/20169016jHCMs1eRbP.png

還有很多好玩的東西,想讓它去哪就去哪。


上一篇
【Day-22】Pwntools 介紹
下一篇
【Day-24】實戰 - Reverse
系列文
從0開始的打Pwn教學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言