早上九點起牀,洗漱喫飯,要十點了,明天早點睡,希望寒假越起越早。。。
現在又到了開心的學習時間。
pwn入門系列-2-一個簡單的例子
https://www.bilibili.com/video/av14824239/?spm_id_from=333.788.videocard.2
第2講,開!
bss段上是未初始化的局部變量和靜態變量,大小0x1000
這講講的是一個小例子
漏洞點就在vuln()函數,buffer數組局部變量只有8個字節,但是read函數可以讀入0x40個數
程序中有read函數,所以plt表中有read函數,我們也可以拿來用(寫exp的時候)了
拿到程序第一步先運行一下
查找多少個字節開始可以覆蓋返回地址:
cyclic 100--複製生成的字符串--gdb ./程序--運行起來--輸入的時候,把字符串粘貼進去--得到一個無效的pc地址--cyclic -l 地址--得到需要覆蓋的地址長度
pwntools官方文檔:https://pwntools.readthedocs.io/en/stable/
可以上官方文檔查詢一些知識
pwn ROP模塊總結
rop = ROP(' .file)
rop.raw()
print rop.dump()
rop.call('read', [1,2,3])
rop.read(1,2,3)|
str(rop)
Linux下打開ida:
打開IDA文件夾所在位置--wine idaq.exe
View -- Open subviews -- Segments -- 找到bss段的起始位置
是最大後的exp,給了我一個新的思路,但是有些地方我不是很懂,希望在下面幾節課裏聽明白吧。
爲什麼是str(rop)?
爲什麼要sleep(1)?
爲什麼感覺是先read,才傳入的shellcode?
我的理解:
p.send的時候,用到了rop,像函數調用一樣走到了上面。
第2講done!