20155217《网络对抗》Exp01 PC平台逆向破解(5)M
20155217《网络对抗》Exp01 PC平台逆向破解(5)M
实验要求
- 掌握NOP,JNE,JE,JMP,CMP汇编指令的机器码
- 掌握反汇编与十六进制编程器
- 能正确修改机器指令改变程序执行流程
- 能正确构造payload进行bof攻击
汇编相关
- NOP:空指令。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。
机器码:90 - JNE:条件转移指令,与JNZ等价。ZF=0,转至标号处执行,即如果不相等则跳转。
机器码:75 - JE:条件转移指令。如果相等则跳转,即ZF=1,转至标号处执行。
机器码:74 - CMP:比较指令。相当于减法指令,只是对操作数之间运算进行比较,而不保存结果。cmp指令执行后,将对
标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。 - JMP:无条件转移指令。
段内直接短转Jmp short。
机器码:EB段内直接近转移Jmp near。
机器码:E9段内间接转移Jmp word。
机器码:FF段间直接(远)转移Jmp far。
机器码:EA
- 反汇编:
objdump -d XX - 进入十六进制编辑模式:
:%!xxd - 查询:
/ - 调试:
gdb XXX - 切回原模式:
%!xxd -r
直接修改程序机器指令,改变程序执行流程
- 下载目标文件pwn1,利用反汇编
objdump -d pwn1找到foo函数和getshell函数的机器码,分别是08048491,0804747d。利用两个地址的相对偏移来改变调用地址,从而使主函数调用getshell函数。

vi进入文件,并按ESC后,输入:%!xxd转化为十六进制显示模式,查找要修改的内容/e8 d7。7d比91大14,因此将d7 - 14,得到新的地址c3(可用windows计算器或将十六进制转化为十进制再转为十六进制来运算)。

- 进入修改,并退出
ESC。返回原函数:%!xxd -r,保存退出:wq。

- 反汇编查看修改情况,call指令正确调用getShell,然后执行。


通过构造输入参数,造成BOF攻击,改变程序执行流
该可执行文件正常运行是调用函数foo,这个函数有Buffer overflow漏洞。而目标是触发函数getshell。
- 输入
gdb pwn20155217-2,r输入测试值,info r观察eip堆栈值

- 猜测最后八个5中某四个进入了堆栈中,为了准确,把8个5换成12345678进一步探索。

- 发现eip堆栈值为4,即占用返回地址的压栈数据为4 3 2 1。
- 发现溢出的字节后,只要把溢出的数据换成
getshell的内存地址输入,就会运行getshell函数。 通过
perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input生成文件输入到程序中。用perl来生成在ASCII界面所无法输入的16进制值。
用
(cat input; cat) | ./pwn20155217-2来进入pwn20155217-2中。

正确构造payload进行bof攻击
- 下载execstack并修改设置。

- 准备shellcode

- 注入攻击后,用另一个终端调试进程
ps -ef | grep 20155217-3查看进程号,gdb调试。


- 看到01020304的地址在
0xffffd26c,修改shellcode,改为0xffffd26c挨着的地址0xffffd270,进行攻击。

- 攻击成功。
遇到的问题
- 一开始注入攻击后,打开另一个终端用
ps -ef | grep pwn20155217-3查找进程号失败。

- 原因:注入攻击后先敲击了回车。事后明白了这就是老师提醒为什么不能以
\x0a来结束 input_shellcode的原因。
20155217《网络对抗》Exp01 PC平台逆向破解(5)M的更多相关文章
- 20155305《网络对抗》PC平台逆向破解(二)
20155305<网络对抗>PC平台逆向破解(二) shellcode注入 1.shellcode shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 2.构造方法 ...
- 20155311《网络对抗》PC平台逆向破解(二)
20155311<网络对抗>PC平台逆向破解(二) shellcode注入 什么是shellcode? shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 前期准备- ...
- 20145330 《网络对抗》PC平台逆向破解:注入shellcode 和 Return-to-libc 攻击实验
20145330 <网络对抗>PC平台逆向破解:注入shellcode 实验步骤 1.用于获取shellcode的C语言代码 2.设置环境 Bof攻击防御技术 需要手动设置环境使注入的sh ...
- 20145221《网络对抗》PC平台逆向破解
20145221<网络对抗>PC平台逆向破解 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户 ...
- 2018-2019 20165226 网络对抗 Exp1 PC平台逆向破解
2018-2019 20165226 网络对抗 Exp1 PC平台逆向破解 目录 一.逆向及Bof基础实践说明 二.直接修改程序机器指令,改变程序执行流程 三.通过构造输入参数,造成BOF攻击,改变程 ...
- 20155307《网络对抗》PC平台逆向破解(二)
20155307<网络对抗>PC平台逆向破解(二) shellcode注入 什么是shellcode? shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 前期准备- ...
- 20145312 《网络对抗》PC平台逆向破解:注入shellcode和 Return-to-libc 攻击实验
20145312 <网络对抗>PC平台逆向破解:注入shellcode和 Return-to-libc 攻击实验 注入shellcode 实验步骤 1. 准备一段Shellcode 2. ...
- 20145201李子璇《网络对抗》PC平台逆向破解
20145201<网络对抗>PC平台逆向破解 准备阶段 下载安装execstack. 获取shellcode的c语言代码 设置堆栈可执行 将环境设置为:堆栈可执行.地址随机化关闭(2开启, ...
- 20145219《网络对抗》PC平台逆向破解
20145219<网络对抗>PC平台逆向破解 shellcode注入 1.shellcode shellcode是一段代码,溢出后,执行这段代码能开启系统shell. 2.构造方法 (1) ...
- 20145240《网络对抗》PC平台逆向破解_advanced
PC平台逆向破解_advanced shellcode注入 Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限.另外,Shellcode一般是 ...
随机推荐
- win7下解决vs2015新建项目,提示“未将对象引用设置到引用实例“的问题
问题描述: 打开vs2015新建c++项目时,出现有如下内容的对话框“未将对象引用设置到引用实例”的提示 解决方法: 1. 温馨提示:千万不要一冲动,就去卸载vs2015!! win7下安装vs20 ...
- VS2017写代码时几个常用的快捷键
说明:组合键是同时按,非组合键是按住Ctrl依次按后面的键1.格式化 格式化全部代码 Ctrl+A+K+F 格式化选中的代码 Ctrl+K+F 2.注释代码 注释代码 ...
- fastjson 反序列化漏洞利用总结
比赛遇到了,一直没利用成功,这里做个记录. 环境搭建 首先用 vulhub 搭建 fastjson 的漏洞环境. 漏洞环境程序的逻辑为接收 body 的数据然后用 fastjson 解析. 漏洞利用 ...
- Android 编程下的 TraceView 简介及其案例实战
TraceView 是 Android 平台配备一个很好的性能分析的工具.它可以通过图形化的方式让我们了解我们要跟踪的程序的性能,并且能具体到 method.详细内容参考:Profiling with ...
- [WPF 知识总结系列] —— 基本控件的简单样式集合
一.ScrollBar <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presenta ...
- 查询es curl命令记录
curl -H "Content-Type: application/json" -XGET http://10.65.0.33:9200/online/senseLog/_se ...
- 无线网卡加密方式wep wpa/wpa2 介绍
常见无线热点的配置选项:无线名称路由器的无线(Wi-Fi)名称.无线密码无线加密使用WPA2-PSK/WPA-PSK加密方式.AES加密算法,无线密码为8-63个字符,最好是数字.字母.符号的组合.信 ...
- sqlserver性能调优中的逻辑读,物理读,预读是什么意思
表 'T_EPZ_INOUT_ENTRY_DETAIL'.扫描计数 1,逻辑读 4825 次,物理读 6 次,预读 19672 次.SQL SERVER 数据库引擎当遇到一个查询语句时,SQL SER ...
- Python初学者第三天 运算符、while循环
3day Python基础语法 1.运算符:算数运算符.比较运算符.赋值运算符.逻辑运算符 A.算数运算符:a=10,b=3 + 加 a+b - 减 a-b * 乘 a*b / 除 a/b ...
- js fetch处理异步请求
以往一直认为异步请求只能使用原生js的XMLHttpRequest或jQuery的$.ajax().$.post()等框架封装的异步请求方法 原来js还提供fetch来替代XMLHttpRequest ...