20145301《网络对抗》shellcode注入&Return-to-libc攻击深入
20145301《网络对抗》shellcode注入&Return-to-libc攻击深入
Shellcode注入
shellcode是什么?
Shellcode是指能完成特殊任务的自包含的二进制代码,根据不同的任务可能是发出一条系统调用或建立一个高权限的Shell,Shellcode也就由此得名。它的最终目的是取得目标机器的控制权,所以一般被攻击者利用系统的漏洞送入系统中执行,从而获取特殊权限的执行环境,或给自己设立有特权的帐户。
Linux下有两种基本构造攻击buf的方法:retaddr+nop+shellcode,nop+shellcode+retaddr。
实验的目标是找到返回地址的位置和shellcode的地址。然后通过修改返回地址使其自动执行shellcode
apt-get install exestack安装exestack
实践过程
- 实验用的是老师上课用的shellcode:

- 将环境设置为:堆栈可执行、地址随机化关闭

- 使用anything+retaddr+nops+shellcode的结构构造攻击buf,猜测返回地址所在位置,并且找到shellcode所在地址

- 在终端注入攻击buf
- 注意在此时先输入一次“回车”,在后面的调试过程中需要继续运行的时候再输入一次“回车”。 打开另外一个终端,用gdb来调试进程,先找到该进程的进程ID,再打开gdb,用attach指令对该进程进行调试:

- 对foo函数进行反汇编:

- 在ret处设置断点,接着继续运行到断点处(也就是要在这是输入第二次回车),查看当前esp的值并依照此位置显示接下来的内存地址内容,来推断shellcode的地址:

- 由图推断出shellcode地址为:0xffffd42c 继续运行,可以推断返回地址是输入的\x01\x02\x03\x04所覆盖的,于是修改之:


- 将返回地址修改为0xffffd42c,重新注入,成功获得了shell

Return-to-libc攻击深入
相关知识
- 缓冲区溢出的常用攻击方法是用shellcode的地址来覆盖漏洞程序的返回地址,使得漏洞程序去执行存放在栈中shellcode。于是为了阻止这种类型的攻击,一些操作系统(比如Fedora)使得系统管理员具有使栈不可执行的能力。这样的话,一旦程序执行存放在栈中的shellcode就会崩溃,从而阻止了攻击。
- 但这种保护方式并不是完全有效的,return-to-libc攻击是一种缓冲区溢出的变体攻击。这种攻击不需要一个栈可以执行,甚至不需要一个shellcode。取而代之的是我们让漏洞程序调转到现存的代码(比如已经载入内存的libc库中的system()函数等)来实现我们的攻击。
实践过程
- 添加一个用户(但是做到后面突然进不去Linux32环境了。。。索性后面改在root用户做):


- 进入32位linux环境,将地址随机化关闭,并且把/bin/sh指向zsh:

- 将漏洞程序保存在/tmp目录下,编译该代码,使用–fno-stack-protector来关闭阻止缓冲区溢出的栈保护机制,并设置给该程序更高权限:


- 读取环境变量的程序gentenvaddr


- 将攻击程序保存在/tmp目录下:

- 通过getenvaddr程序获得BIN_SH地址(0xffffde6d)

- 通过gdb获得system(0xfe36840)和exit地址(0xfe2a7f0)

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

- 删除刚才调试编译的exploit程序和badfile文件,重新编译修改后的exploit.c,接着运行exploit、retlib,攻击成功,获得了root权限:

深入思考 :将/bin/sh重新指向/bin/bash时的攻击
- 首先,我们将/bin/sh重新指向/bin/bash,运行漏洞程序:

- 发现无法获取root权限,因为bash内置了权限降低的机制。
- setuid()用来重新设置执行目前进程的用户识别码,其有效的用户识别码必须为0(root)。利用函数setuid(0)可以实现我们的目标,在调用系统函数之前,先调用系统函数setuid(0)来提升权限。 我们先要对攻击程序进行修改,在bof的返回地址处写入setuid()的地址,setuid的地址通过gdb来获得:

- setuid的参数0写在buf[32]

- 修改完成后,编译运行,攻击成功!!!

实验总结
- 这次实验,零零总总出了不少的问题,大多由于自己的不够细致,而恰恰细节决定成败,自己需要反思进步的还有不少。另外从中学会了如何去猜测并验证推断出地址应该所放的位置,当然前提是在地址随机关闭的情况下,如果地址随机,显然再去攻击就没有这么容易了。还是比较佩服黑客或相关技术人员的聪明才智的。希望自己能在这么课程中学到更多。
20145301《网络对抗》shellcode注入&Return-to-libc攻击深入的更多相关文章
- 20145307陈俊达《网络对抗》shellcode注入&return to libc
20145307陈俊达<网络对抗>shellcode注入 Shellcode注入 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将 ...
- 20145327《网络对抗》——注入shellcode并执行和Return-to-libc攻击深入
20145327<网络对抗>--注入shellcode并执行 准备一段Shellcode 老师的shellcode:\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68 ...
- 20145318《网络对抗》注入shellcode及Return-to-libc
20145318<网络对抗>注入shellcode及Return-to-libc 注入shellcode 知识点 注入shellcodeShellcode实际是一段代码(也可以是填充数据) ...
- 20145308 《网络对抗》 注入shellcode+Return-to-libc攻击 学习总结
20145308 <网络对抗> 逆向及BOF进阶实践 注入shellcode+Return-to-libc攻击 学习总结 实践目的 注入shellcode 实现Return-to-libc ...
- 20144303石宇森《网络对抗》注入shellcode和Return-to-libc攻击
20144303石宇森<网络对抗>PC平台逆向破解 实验1:shellcode注入 实验基础 1.Linux下有两种基本构造攻击buf的方法:retaddr+nop+shellcode,n ...
- 20145211《网络对抗》注入Shellcode并执行&&Return-to-libc攻击
Shellcode注入 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢出,覆盖成为指向 shellcode的地址. ...
- 20145310《网络对抗》注入shellcode及Return-to-libc
Shellcode注入 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢出,覆盖成为指向 shellcode的地址. ...
- 20145315《网络对抗》——注入shellcode以及 Return-to-libc攻击实验
shellcode 准备一段Shellcode 我用的老师的shellcode:\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3 ...
- 20145320《网络对抗》注入Shellcode并执行
20145320注入Shellcode并执行 准备一段Shellcode 首先先准备一段C语言代码:这段代码其实和我们的shell功能基本一样 为了之后能够看到反汇编的结果,这次采用的静态编译.正常返 ...
- 20145305 《网络对抗》注入Shellcode并执行&Return-to-libc 攻击实验
注入Shellcode并执行 实践指导书 实践过程及结果截图 准备一段Shellcode 我这次实践和老师用的是同一个 设置环境 构造要注入的payload 我决定将返回地址改为0xffffd3a0 ...
随机推荐
- android基础---->摄像头与相册的调用
很多应用程序都可能会使用到调用摄像头拍照和从相册选取图片的功能,今天我们开始android中摄像头与相册调用的学习. 目录导航 调用摄像头拍照 从相册中选择照片 友情链接 调用摄像头拍照 大致流程:调 ...
- jQuery数据缓存
jQuery引入数据缓存机制的原因: 1.储存更DOM节点相关的数据.事件.动画等信息 2.用一种低耦合的方式让DOM节点和数据联系起来 实现原理: 1.jQuery内部创建cache对象 2.为需要 ...
- vux组件绑定事件
我一开始是这样绑定事件的,但是没有效果: <box gap="15px 45px"> <x-button plain type="primary&quo ...
- WEB安全番外第六篇--关于通过记录渗透工具的Payload来总结和学习测试用例
背景: 在WEB安全的学习过程中,了解过了原理之后,就是学习各种Payload,这里面蕴藏着丰富的知识含量,是在基本上覆盖了漏洞原理之后的进一步深入学习的必经之路.无理是Burpsuite还是Sqlm ...
- shell脚本分析nginx日志
shell脚本分析nginx日志: name=`awk -F ',' '{print $13":"$32}' $file | awk -F ':' '{print $4}'`ech ...
- jquery插件方式实现table查询功能
1.写插件部分,如下: ;(function($){ $.fn.plugin = function(options){ var defaults = { //各种属性,各种参数 } var optio ...
- JQueryUI之Autocomplete
JQueryUI之Autocomplete JQuery UI 是以 JQuery 为基础的开源 JavaScript 网页用户界面代码库.包含底层用户交互.动画.特效和可更换主题的可视控件,这些控件 ...
- 软件IT
软件IT 周期: 攻防:攻击性板块 范畴:科技板块 业务:软件,互联网,人工智能,区块链... 行情主要因素: 主要问题:新领域,成长不确定性高 投资策略: 个股:科大讯飞,中国软件,用友网络,浪潮信 ...
- 磁盘 I/O 性能监控的指标
指标 1:每秒 I/O 数(IOPS 或 tps) 对于磁盘来说,一次磁盘的连续读或者连续写称为一次磁盘 I/O, 磁盘的 IOPS 就是每秒磁盘连续读次数和连续写次数之和.当传输小块不连续数据时,该 ...
- TA-Lib中文文档(一):快速开始
TA-Lib 简介: 这是一个Python 金融指数处理库TA-LIB,他是基于 Cython 而不是 SWIG. TA-Lib is widely used by trading software ...