BUUCTF-pwn2_sctf_2016

这题利用的是负数转无符号数造成缓冲区溢出,以及泄露libc基地址执行ROP

题目分析

在这里插入图片描述
由于NX开启,我们考虑使用ROP,Canary没有打开使得这题变得很方便
下面是vuln函数:
在这里插入图片描述
在该函数中,程序读入一个字符串并转化为带符号整形(signed int),这时,如果我们输入负数可以避开不能大于32的检查
在get_n函数中,读入长度被强制转换为unsigned int,此时-1变成了4294967295。使得我们能够进行缓冲区溢出攻击
在这里插入图片描述

漏洞利用

根据之前分析,我们能进行缓冲区溢出修改程序返回值,所以利用过程如下

  1. 我们先调用printf函数将printf的got表的值打印出来,根据它使用LibcSearcher计算libc的基地址,并让程序跳转到main开头,ROP链为p32(printf_plt) + p32(main) + p32(printf_got)
  2. 构造ROP链为p32(system) + p32(main) + p32(bin_sh)就能获得shell了

Exp

from pwn import *
from LibcSearcher import *

r = remote("node3.buuoj.cn", 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值