20145308 《网络对抗》 注入shellcode+Return-to-libc攻击 学习总结
20145308 《网络对抗》 逆向及BOF进阶实践 注入shellcode+Return-to-libc攻击 学习总结
实践目的
- 注入shellcode
实现
Return-to-libc
攻击知识点学习总结
- Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限。另外,Shellcode一般是作为数据发送给受攻击服务器的。 Shellcode是溢出程序和蠕虫病毒的核心,提到它自然就会和漏洞联想在一起
- Linux中两种基本构造攻击buf的方法:
retaddr+nop+shellcode
,nop+shellcode+retaddr
,缓冲区小就就把shellcode放后边,不然就放前边 Return-to-libc
是缓冲区溢出的变体攻击,这种攻击不需要一个栈可以执行,甚至不需要一个shelcode
,取而代之的是我们让漏洞程序调转到现存的代码(比如已经载入内存的lib库中的system()函数等)来实现我们的攻击实践过程
shellcode的注入
编写一段sellcode,文件保存名
20145308shellcode
安装
execstack
设置堆栈可执行,并查询堆栈是否可执行,以便shellcode在堆栈上可以执行
关闭地址随机化,避免每次执行分配的内存地址不同
采取
nop+shellcode+retaddr
方式构造payload
(\x4\x3\x2\x1
将覆盖到堆栈上的返回地址的位置,需要将它改为shellcode的地址)
- 确定
\x4\x3\x2\x1
处返回地址应该填什么 注入攻击buf
- 另开一个终端,用gdb调试
5308pwn
进程 首先要找到
5308pwn
进程号,找到5308
的进程号是2906
启动gdb调试进程,设置断点,查看注入buf的内存地址
设置断点后,在另一个终端按下回车,并寻找返回地址,看到
01020304
表示返回地址的位置是0xffffd33c
,shellcode
就紧挨着这个地址,加四字节为0xffffd340
退出gdb,按照
anything+retaddr+nops+shellcode
修改input_shellcode
如下
成功
Return-to-libc
攻击
- 输入命令安装一些用于编译32位C程序的东西
sudo apt-get update
sudo apt-get install lib32z1 libc6-dev-i386
sudo apt-get install lib32readline-gplv2-dev
,安装未成功,参照同学博客,发现安装与否没有太大关系
进入32位linux环境,并使用bash
关闭地址空间随机化
使用另一个shell程序(zsh)代替
/bin/bash
,设置zsh程序
- 在编译时手动设置栈不可执
编写
retlib.c
编译程序,并设置
SET-UID
- 上述程序有一个缓冲区溢出漏洞,它先从一个叫“badfile”的文件里把 40 字节的数据读取到 12 字节的 buffer,引起溢出。fread()函数不检查边界所以会发生溢出。由于此程序为 SET-ROOT-UID 程序,如果一个普通用户利用了此缓冲区溢出漏洞,他有可能获得 root shell。应该注意到此程序是从一个叫做“badfile”的文件获得输入的,这个文件受用户控制。现在我们的目标是为“badfile”创建内容,这样当这段漏洞程序将此内容复制进它的缓冲区,便产生了一个 root shell
需要用到一个读取环境变量的程序:
getenvaddr.c
编译
编写
exploit.c
用刚才的
getenvaddr
程序获得BIN_SH
地址,0xffffdf43
gdb
获得system
和exit
地址编译
gdb,得到
system
地址0xf7e2eb30
,exit
地址0xf7e227e0
修改
exploit.c
文件,填上刚才找到的内存地址
删除刚才调试编译的exploit程序和badfile文件,重新编译修改后的
exploit.c
先运行攻击程序exploit,生成了badfile文件,再运行漏洞程序retlib,可见攻击成功,获得了root权限
其他
- 刚开始的时候,感觉进阶实验很难,不敢动手,经过老师上课讲解之后,决定尝试一次,最后成功做出了实验,也通过实验对shellcode注入部分的知识有一定的了解
- 但是实验是在关闭地址随机化和设置堆栈可执行等前提下进行的,在现实里基本没有相似的情况,操作系统都会实施措施保护计算机,所以还需要进阶学习
- 进阶学习,选择了
Return-to-libc
的实验,实现了在栈不可执行的情况下,让漏洞程序调转到现存的代码 开始编译exploit程序出错,运行结果是攻击程序和漏洞程序都是运行错误,后来发现自己写代码的时候把
fopen
写成了open
导致错误
20145308 《网络对抗》 注入shellcode+Return-to-libc攻击 学习总结的更多相关文章
- 20145307陈俊达《网络对抗》shellcode注入&return to libc
20145307陈俊达<网络对抗>shellcode注入 Shellcode注入 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将 ...
- 20145215《网络对抗》shellcode注入&Return-to-libc攻击深入
20145215<网络对抗>shellcode注入&Return-to-libc攻击深入 Shellcode注入 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻 ...
- 20145227鄢曼君《网络对抗》shellcode注入&Return-to-libc攻击深入
20145227鄢曼君<网络对抗>shellcode注入&Return-to-libc攻击深入 shellcode注入实践 shellcode基础知识 Shellcode实际是一段 ...
- 20145317《网络对抗》shellcode注入&Return-to-libc攻击深入
20145317<网络对抗>shellcode注入&Return-to-libc攻击深入 学习任务 shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻 ...
- 20145326蔡馨熠《网络对抗》shellcode注入&Return-to-libc攻击深入
20145326蔡馨熠<网络对抗>shellcode注入&Return-to-libc攻击深入 准备一段shellcode 首先我们应该知道,到底什么是shellcode.经过上网 ...
- 20145301《网络对抗》shellcode注入&Return-to-libc攻击深入
20145301<网络对抗>shellcode注入&Return-to-libc攻击深入 Shellcode注入 shellcode是什么? Shellcode是指能完成特殊任务的 ...
- 20145303 刘俊谦《网络对抗》shellcode注入&Return-to-libc攻击深入
20145303 刘俊谦<网络对抗>shellcode注入&Return-to-libc攻击深入 Shellcode注入 shellcode实际是一段代码,但却作为数据发送给受攻击 ...
- 20145239杜文超《网络对抗》- shellcode注入&Return-to-libc攻击深入
20145239杜文超<网络对抗>- shellcode注入&Return-to-libc攻击深入 shellcode基础知识 Shellcode是一段代码,作为数据发送给受攻击服 ...
- 20145210姚思羽《网络对抗》——shellcode注入& Return-to-libc攻击深入
20145210姚思羽<网络对抗>shellcode注入&Return-to-libc攻击深入 shellcode基础知识 Shellcode是一段代码,作为数据发送给受攻击服务器 ...
- 20145208 蔡野《网络对抗》shellcode注入&Return-to-libc攻击深入
20145208 蔡野<网络对抗>shellcode注入&Return-to-libc攻击深入 Shellcode注入 shellcode的获取代码 我使用了许心远同学博客中的代码 ...
随机推荐
- 制作正式版10.11 OS X El Capitan 安装U盘(优盘)
一.准备工作:1.准备一个 8GB 或以上容量的 U 盘,确保里面的数据已经妥善备份好(该过程会抹掉 U 盘全部数据)2.从官网Appstore下载下来的 “安装 OS X El Capitan”,当 ...
- iOS 阅读唐巧博客心得
1. iOS 开发中的争议(一) http://blog.devtang.com/2015/03/15/ios-dev-controversy-1/ 文中提及到,在使用的时候,应该是使用self.pr ...
- iOS 开发笔记 cocoapods 配置遇到的问题
当使用svn的时候,每次使用pods update,都会出现一个问题,原来所有的第三方类库里面的.svn都被删除了.提交上svn服务器时,会要求提交全部.如果只是提交如MJExtension这个类库, ...
- 记录一则RMAN恢复到历史备份(多个incarnation)
环境: OEL 5.7 + Oracle 11.2.0.4 1.直接restore到想要恢复的时间点报错: RMAN> sql "alter session set nls_date_ ...
- mybatis之接口绑定
接口绑定方案 mybatis中,提供了一套接口绑定方案,程序员可以提供一个接口,然后提供对应接口的一个mapper.xml文件.MyBatis会自动将接口和xml文件进行绑定.实际上就是mybatis ...
- virtual和abstract区别
virtual和abstract都是用来修饰父类的,通过覆盖父类的定义,让子类重新定义. 它们有一个共同点:如果用来修饰方法,前面必须添加public,要不然就会出现编译错误:虚拟方法或抽象方法是不能 ...
- SSH异常处理(一)
Could not locate getter method for property [com.test_SSH.Employee#createTime] 这个异常是实体类没有映射到对应的.hbm. ...
- hdu4778 状态压缩
#include <iostream> #include <algorithm> #include <cstdio> #include <vector> ...
- uva 1416 Warfare And Logistics
题意: 给出一个无向图,定义这个无向图的花费是 其中path(i,j),是i到j的最短路. 去掉其中一条边之后,花费为c’,问c’ – c的最大值,输出c和c’. 思路: 枚举每条边,每次把这条边去掉 ...
- Spark学习之路 (十七)Spark分区
一.分区的概念 分区是RDD内部并行计算的一个计算单元,RDD的数据集在逻辑上被划分为多个分片,每一个分片称为分区,分区的格式决定了并行计算的粒度,而每个分区的数值计算都是在一个任务中进行的,因此任务 ...