君莫笑系列視頻學習(2)

早上九點起牀,洗漱喫飯,要十點了,明天早點睡,希望寒假越起越早。。。

現在又到了開心的學習時間。

 

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!

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章