20145208 蔡野《网络对抗》shellcode注入&Return-to-libc攻击深入
20145208 蔡野《网络对抗》shellcode注入&Return-to-libc攻击深入
Shellcode注入
- shellcode的获取代码
- 我使用了许心远同学博客中的代码:

- 得到shellcode如下
\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\ - 对环境进行设置,设置为堆栈可执行,并关闭地址随机化:

- 在Linux下有两种攻击buf的构造方法,这里选择
nops+shellcode+retaddr的方法来构造攻击,对返回地址进行猜测,尝试找到shellcode的地址:

- 然后在终端注入上面的
input_shellcode来攻击buf,先不用着急按回车,新开一个终端查看进程pid:

- 使用gdb调试程序,然后设置断点,查看注入buf的内存地址:

- 然后在ret的地址位置设置断点后回到之前的终端回车,之后回到gdb进行调试:

- 现在找到了01020304了,后面的信息明显不对,所以继续往前找:

- 找到9090310c后再往前找:

- 可以看出来这里开始就是shellcode了,所以找到了位置,并且返回地址也是对的,所以可以算出shellcode是在
0xffffd400位置,将返回地址修改为0xffffd400,重新注入:

- 成功了!
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位环境:

- 进入32位linux环境之后,将地址随机化关闭,使用命令
ln -s zsh sh把/bin/sh指向zsh:

- 将漏洞程序代码保存到
/tmp文件夹下:

- 编译程序并设置
SET-UID:

- 编译的时候遇到错误,检查代码后发现原来是实验楼原代码调用头文件的时候没有
#符号,纠正后成功:

- 同样在
/tmp文件夹下建一个读取环境变量的程序:

- 和一个攻击程序(攻击程序暂时如下,要根据内存修改):

- 现在需要用刚才的
20145208_getenvaddr程序获得BIN_SH地址:

- 通过gdb调试20145208_exploit攻击程序获得 system 和 exit 地址:

- 把得到的地址填到攻击程序代码的对应位置:

- 把之前调试用的攻击程序和badfile文件删除后重新编译修改后的攻击程序:

- 先运行攻击程,再运行漏洞程序,可见攻击成功,获得了 root 权限:

- 做到最后才发现之前做的有问题,没有新建一个用户,这样没办法知道是不是获取了root权限,因为本来就是root,所以重新做了一遍,过程都一样,所以只修改了最后一张图作为验证。
深入思考
将/bin/sh重新指向/bin/bash时的攻击
- 按照上面的方法从头开始做一遍,只需要改变重定向:

结果没有获取权限,因为bash内置了权限降低的机制,就使得我们虽然可以让bof返回时执行system(“/bin/sh”),但是获取不到root权限。
在网上查资料的时候了解到需要修改setuid()函数,就是我们可以利用函数setuid(0)来提升权限,只需要在调用系统函数system(“/bin/sh”)之前,先调用系统函数setuid(0)。
获取setuid的方式和前面system、exit一样可以用gdb来看,得到setuid地址之后要对攻击程序进行修改,在bof的返回地址处(&buf[24])写入setuid()的地址,setuid的参数0写在buf[32]处,这是因为setuid()执行完毕之后,会跳转到setuid所在地址的下一个位置,所以这个位置应该放入system函数的入口地址,同理system的参数
BIN_SH的地址放入&buf[36]处:

- 测试成功获得权限:

20145208 蔡野《网络对抗》shellcode注入&Return-to-libc攻击深入的更多相关文章
- 20145307陈俊达《网络对抗》shellcode注入&return to libc
20145307陈俊达<网络对抗>shellcode注入 Shellcode注入 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将 ...
- 20145208 蔡野 《网络对抗》免考项目 MSF学习
20145208 蔡野 <网络对抗>免考项目 MSF Exploit模块开发 题目:MSF Exploit模块开发 摘要 本免考项目的目标是通过对msf模块的设计语言--ruby和expl ...
- 20145208 蔡野 《网络对抗》Exp8 Web基础
20145208 蔡野 <网络对抗>Exp8 Web基础 本实践的具体要求有: (1).Web前端HTML(1分) 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POS ...
- 20145208 蔡野《网络对抗》Exp3 Advanced 恶意代码伪装技术实践
20145208 蔡野<网络对抗>Exp3 Advanced 恶意代码伪装技术实践 木马化正常软件 思路: 在正常软件包中将原本的程序主文件(平时打开程序用的exe文件)改成dll后缀(或 ...
- 20145208 蔡野 《网络对抗》Exp9 web安全基础实践
20145208 蔡野 <网络对抗>Exp9 web安全基础实践 本实践的目标理解常用网络攻击技术的基本原理.Webgoat实践下相关实验. 实验后回答问题 (1)SQL注入攻击原理,如何 ...
- 20145208 蔡野 《网络对抗》Exp5 MSF基础应用
20145208 蔡野 <网络对抗>Exp5 MSF基础应用 链接地址 主动攻击:利用ms08_067_netapi进行攻击 对浏览器攻击:MS10-002 对客户端攻击:adobe_to ...
- 20145208 蔡野 《网络对抗》Exp7 网络欺诈技术防范
20145208 蔡野 <网络对抗>Exp7 网络欺诈技术防范 本实践的目标理解常用网络欺诈背后的原理,以提高防范意识,并提出具体防范方法.具体有(1)简单应用SET工具建立冒名网站(2) ...
- 20145208 蔡野 《网络对抗》Exp6 信息搜集与漏洞扫描
20145208 蔡野 <网络对抗>Exp6 信息搜集与漏洞扫描 本实践的目标是掌握信息搜集的最基础技能.具体有(1)各种搜索技巧的应用(2)DNS IP注册信息的查询 (3)基本的扫描技 ...
- 20145208蔡野 《网络对抗》逆向及BOF基础实践
20145208蔡野 <网络对抗>逆向及BOF基础实践 逆向及Bof基础实践 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函 ...
随机推荐
- 2018/04/03 每日一个Linux命令 之 lastb/last
今天还在想暴力破解一个服务器是怎么完成的....... -- lastb功能说明:列出登录系统失败的用户相关信息. -- 单独执行 lastb 时候,它会读取/var/log 下的 btmp 文件,输 ...
- CH0103 最短Hamilton路径 dp
正解:状压dp 解题报告: 完了吃枣退役:D 我是真的没想到这是个dp...脑子越来越不好了,大概是太久没碰OI了都要生疏了...哭了,感觉自己太傻逼了可能不适合学信息... 知道是个状压dp就eas ...
- requests库的get请求(加上head,加上get参数请求)
#coding:utf-8 # 导入requests import requests # 构建url url = 'http://www.baidu.com' # 发送请求,获取响应 # respon ...
- MySQL · 功能分析 · 5.6 并行复制实现分析
背景 我们知道MySQL的主备同步是通过binlog在备库重放进行的,IO线程把主库binlog拉过去存入relaylog,然后SQL线程重放 relaylog 中的event,然而这种模式有一个问题 ...
- 009-jdk1.8版本新特性一-展方法,Lambda表达式,函数式接口、方法引用构造引用
一.JDK1.8 名称:Spider(蜘蛛) 发布日期:2014-03-18 新特性: 1.1.扩展方法[接口的默认方法] Java 8允许我们给接口添加一个非抽象的方法实现,只需要使用 defaul ...
- PHP操作Redis常用技巧
这篇文章主要介绍了PHP操作Redis常用技巧,结合实例形式总结分析了php针对redis的连接.认证.string.hash等操作技巧与注意事项,需要的朋友可以参考下 本文实例讲述了PHP操作Red ...
- MySQL架构简介
- Floyd 判圈算法
Floyd 判圈算法 摘自维基百科, LeetCode 上 141题 Linked List Cycle 用到这个, 觉得很有意思. 记录一下. 链接: https://zh.wikipedia.or ...
- css 文本超出容器长度后自动省略的方法!
我们在给用户显示文本内容的时候,往往需要避免文本内容超出容器宽度,防止换行溢出,小弟在网上找了下发现网上的实现仅仅只是实现了用 ...省略了的功能! 而并没有获取光标提示的功能,所有小弟就结合网上的代 ...
- SSM三层模型之间的参数传递
Controller接收各种形式的传参: RequestMapping()包含三部分信息: 表单传参: 1.表单action请求 1:参数名称和顺序都要和表单字段名称一致,直接接收(适合字 ...