首页
社区
课程
招聘
[求助]为什么这里read没有被调用?
发表于: 2017-4-14 11:16 3181

[求助]为什么这里read没有被调用?

2017-4-14 11:16
3181


这里已经控制了pc指针,准备通过控制寄存器来调用read,把"/bin/sh\0"写入bss段


其中:

r12 :0x601020 (read 的got表地址)

rdi  :0 (标准输入流)

rsi   : 0x601040 (bss段地址)  

rdx  : 写入长度 (我这里是16)


但是call了之后没有要求我输入东西就直接调用下一句了,可是调试信息是跟预想的一样的,用edb调试改写也是可以输入的,为什么?


补充,call之后的截图

rax是0x00



漏洞程序简化版(linux 64):


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <dlfcn.h>
void vulnerable_function() {
	char buf[128];
	read(STDIN_FILENO, buf, 512);
}
int main(int argc, char** argv) {
	write(1, "Levle5\n", 7);
	vulnerable_function();
}



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 290
活跃值: (79)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
call了之后rax的值是多少?
2017-4-14 12:03
0
雪    币:
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
rax  是  0x00 
2017-4-14 12:30
0
雪    币:
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
Englishmajor call了之后rax的值是多少?
调用后  rax  是0x00
2017-4-14 12:31
0
雪    币: 290
活跃值: (79)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
read()  return  0  的话是表示end  of  file.  我也不知道为什么没有要求你输入。或者你可以用si(step  instruction)进入call  read  找找原因。我猜你是想用system来运行/bin/sh。libc里面可能已经有这个string.
2017-4-14 12:55
0
雪    币:
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
Englishmajor read() return 0 的话是表示end of file. 我也不知道为什么没有要求你输入。或者你可以用si(step instruction)进入call read 找找原因。我猜你是想用s ...
谢谢了,我还是继续debug试试吧,不清楚什么原因,实际的程序没源码,我只是找了个例子而已
2017-4-14 12:56
0
游客
登录 | 注册 方可回帖
返回
//