idea.elf

首先checksec 一下,发现是一个32位的ELF文件,打开了canary保护和栈不可执行保护。

file一下,发现是动态链接的程序

 

 用32位IDA打开

 

main函数很干净,shift+f12查看有没有/bin/sh ,是没有的,同时也没有后门函数。

 

 

子函数init里打印出了一句话

 

vuln函数首先printf一条语句,问我们想让程序读取几个字节的数据,然后调用了get_n函数,这个函数是程序员自己写的,我们进入此函数。 

 

 get_n函数就是读取4个字节大小的数据,当超过4个时for循环会停止,并在下一位添加"/0"。存放到nptr里。

下一个atoi函数是将字符串转为整数的标准库函数,如果字符串的开头不是数字或字符,atoi函数将停止转换并返回已解析的整数,如果字符串是空的或者无法转换,将返回0。所以它就是将我们在get_n函数里输入的字符串转化为整数。也就是nptr里的字符串转换为整数放到v1里。

如果转换的整数大于32也就是超过4个字节会printf一个语句告诉我们这个大小太大了,并结束程序运行。

然后通过puts函数告诉我给我们准备了一个gift。

 只读取6个非空白字符(不包括换行符,制表符和空格),如果输入的少于6个字符,他会全部读取,如果大于6个字符,他会只读取前6个字符并丢弃剩余字符。然后将读取到的字符打印出来,这里可以进行printf的泄露。

然后再告诉我们输入v1个字节大小的数据。然后将此数据存放到nptr数组里,最后打印出来。

 

执行发现通过get_n输入的nptr转换为整数最大为32,所以第二个get_n函数最多接收32个字节大小的数据。gift函数里的scanf函数接收了6个字符的数据,剩下的字符还在缓冲区里,然后通过getchar可以接受一个字符(也可以是换行符,制表符和空格),剩下的字符则传输到第二个get_n函数里了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值