20145211《网络对抗》注入Shellcode并执行&&Return-to-libc攻击
Shellcode注入
基础知识
- Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢出,覆盖成为指向 shellcode的地址。
实践过程
shellcode的生成方法指导书上已经写得很详细了,在做实验时我直接用的是老师上课用的shellcode:
将环境设置为:堆栈可执行、地址随机化关闭
选择
anything+retaddr+nops+shellcode
的结构构造攻击buf,先猜测返回地址所在位置,并且找到shellcode
所在地址在终端注入这段攻击buf:
先不输入“回车”,在后面的调试过程中需要继续运行的时候再回车,此时再打开另外一个终端,用gdb来调试
20145215pwn1
这个进程,先找到该进程的进程ID,再打开gdb,用attach
指令对该进程进行调试:对
foo
函数进行反汇编:在
ret
处设置断点,接着继续运行到断点处,显示当前esp的值并依照此位置显示接下来的内存地址内容,来分析我们之前猜测的返回地址位置是否正确以及shellcode
的地址,然而我一开始一直没有找到,如同见鬼,再修改无数次后在勉强找到- 由上图可以看出,第一个红色方块中的内容是我们之前猜测返回地址而输入的值,第二个方块中的内容则是
shellcode
代码,由此我们可以推断出shellcode
地址为:0xffffd3d4
继续运行,如红色方块中所示,可以确认返回地址是被我们之前输入的
\x01\x02\x03\x04
所覆盖的:将返回地址修改为
0xffffd3d4
,重新注入,苍天啊,终于成功了
Return-to-libc攻击实验
实验内容
- return-to-libc实验是一个基于缓冲区溢出攻击实验的基础上的一种攻击实验
- 缓冲区溢出攻击相关知识:
- 原理:通过一段包含shellcode以及shellcode地址的长字符串注入到程序中,以shellcode地址来覆盖程序原有的返回地址,从而让目标程序来执行我们的shellcode,以此达到攻击目的
- 保护措施:为了防止缓冲区溢出攻击,现在常用的保护措施有两种,一是设置堆栈不可执行,漏洞程序在执行注入到堆栈中的shellcode时就会发生程序崩溃。二是代码生成地址随机化,以此来使得攻击者无法准确得知shellcode的地址
- return-to-libc攻击原理:
- 为了避开堆栈不可执行的问题,return-to-libc攻击放弃了让漏洞程序执行堆栈中的shellcode,而是跳转到已经存在的代码(例如libc库中的system函数)来完成攻击
实践过程
首先添加用户hzy
进入32位linux环境,将地址随机化关闭,并且把
/bin/sh
指向zsh
:将漏洞程序保存在
/tmp
目录下:编译该代码,使用
–fno-stack-protector
来关闭阻止缓冲区溢出的栈保护机制,并设置给该程序的所有者以suid权限,可以像root用户一样操作:读取环境变量的程序:
- 将攻击程序保存在
/tmp
目录下:
- 将攻击程序保存在
- 用刚才的
getenvaddr
程序获得BIN_SH
地址,利用gdb获得system
和exit
地址:
将上述所找到的三个内存地址填写在
20145211exploit.c
中:删除刚才调试编译的
20145211exploit
程序和badfile
文件,重新编译修改后的20145215exploit.c,gcc -m32 -o 20145211exploit 20145211exploit.c
先运行攻击程序20145211exploit
,再运行漏洞程序20145211retlib
,攻击成功,获得了root权限,ls一波:
实践思考
- 对普通缓冲区溢出攻击的防御,一方面需要学会使用能够防止缓冲区溢出的函数,警惕攻击的发生。另一方面,可以在系统中开启类似数据执行保护机制(DEP)这样的防护机制,这样被保护程序的内存使其不能同时被写和被执行,从而防止了代码注入式的缓冲区溢出攻击。但是,这些不能有效抵御 return-into-libc ,因此还需要进一步的解决方案。
- 目前对于 return-into-libc 攻击,比较好的解决方法是地址空间随机化 ,增加了攻击者成功发起攻击的难度,同时更容易导致攻击时程序运行的崩溃,使得检测机制也更容易检测到此种攻击。
20145211《网络对抗》注入Shellcode并执行&&Return-to-libc攻击的更多相关文章
- 20145307陈俊达《网络对抗》shellcode注入&return to libc
20145307陈俊达<网络对抗>shellcode注入 Shellcode注入 基础知识 Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将 ...
- 20145320《网络对抗》注入Shellcode并执行
20145320注入Shellcode并执行 准备一段Shellcode 首先先准备一段C语言代码:这段代码其实和我们的shell功能基本一样 为了之后能够看到反汇编的结果,这次采用的静态编译.正常返 ...
- 20145305 《网络对抗》注入Shellcode并执行&Return-to-libc 攻击实验
注入Shellcode并执行 实践指导书 实践过程及结果截图 准备一段Shellcode 我这次实践和老师用的是同一个 设置环境 构造要注入的payload 我决定将返回地址改为0xffffd3a0 ...
- 20145239杜文超《网络对抗》- shellcode注入&Return-to-libc攻击深入
20145239杜文超<网络对抗>- shellcode注入&Return-to-libc攻击深入 shellcode基础知识 Shellcode是一段代码,作为数据发送给受攻击服 ...
- 20145210姚思羽《网络对抗》——shellcode注入& Return-to-libc攻击深入
20145210姚思羽<网络对抗>shellcode注入&Return-to-libc攻击深入 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实际是一段代码,但却作为数据发送给受攻 ...
- 20145208 蔡野《网络对抗》shellcode注入&Return-to-libc攻击深入
20145208 蔡野<网络对抗>shellcode注入&Return-to-libc攻击深入 Shellcode注入 shellcode的获取代码 我使用了许心远同学博客中的代码 ...
- 20145326蔡馨熠《网络对抗》shellcode注入&Return-to-libc攻击深入
20145326蔡馨熠<网络对抗>shellcode注入&Return-to-libc攻击深入 准备一段shellcode 首先我们应该知道,到底什么是shellcode.经过上网 ...
随机推荐
- Spring启动过程分析】(1)启动流程简介
1. spring简介 spring的最基本的功能就是创建对象及管理这些对象之间的依赖关系,实现低耦合.高内聚.还提供像通用日志记录.性能统计.安全控制.异常处理等面向切面的能力,还能帮我们管理最头疼 ...
- oracle 字段自增 两段代码搞定
(这几天做了个小小课程设计时用的是oracle数据库,第一次用,发现oracle和我们以前用的sql server .mysql是有如此多不同的地方,下面是遇到的问题之一和解决方法,和大家分享下) 用 ...
- Atlassian Confluence任意文件读取漏洞
Atlassian Confluence Atlassian Confluence是澳大利亚Atlassian公司的一套专业的企业知识管理与协同软件,也可以用于构建企业WiKi.该软件可实现团队成员之 ...
- intellij IDEA 报 非法字符 \65279 原因及解决方法
用eclipse创建的项目导入到 intellij IDEA 之后 编译时包 非法字符 '\65279' 该问题产生的原因是 IDEA对以UTF8编码的文件保存时自动加上了BOM(UTF-8文件签名) ...
- C/C++程序编译流程
单个文件的编译过程 多个文件的编译过程
- 利用aspose-words 实现 java中word转pdf文件
利用aspose-words 实现 java中word转pdf文件 首先下载aspose-words-15.8.0-jdk16.jar包 引入jar包,编写Java代码 package test; ...
- jenkins前端构建
nginx 安装yum install nginx //输入下载 or yum install epel-release //如果上一步安装失败 yum install nginx //再次下载 配置 ...
- Android--aapt命令
1.aapt l[ist] [-v] [-a] file.{zip,jar,apk} 释义:列出压缩文件中的内容 aapt l xxx.apk:简单的罗列压缩文件中每一项的内容 aapt l -v x ...
- 第二次去苹果店维修MacBook
今天上午,在使用外接鼠标的情况下,屏幕上鼠标指针乱窜.乱点.不受控制的故障再次出现,这次拍下了视频. 再次去苹果网站预约Genius Bar(天才吧),中午的时候去了苹果店.这次没有像上次那样检查身份 ...
- 磁盘 I/O 性能监控的指标
指标 1:每秒 I/O 数(IOPS 或 tps) 对于磁盘来说,一次磁盘的连续读或者连续写称为一次磁盘 I/O, 磁盘的 IOPS 就是每秒磁盘连续读次数和连续写次数之和.当传输小块不连续数据时,该 ...