20155312张竞予 Exp1 PC平台逆向破解(5)M

Exp1 PC平台逆向破解(5)M

目录

  • 实验内容

    • 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
    • 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
    • 注入一个自己制作的shellcode并运行这段shellcode。
  • 实验步骤及结果
  • 问题及解决方案
  • 参考资料

实验内容

实验知识概要

1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码

通过反汇编指令objdump -d 20155312zjy查看可执行文件20155312zjy的反汇编代码和对应的机器码,如下图所示:

我们不难发现:

  • NOP汇编指令的机器码是“90”
  • JNE汇编指令的机器码是“75”
  • JE 汇编指令的机器码是“74”
  • JMP汇编指令的机器码是“eb”
  • CMP汇编指令的机器码是“39”

想要了解其他指令的机器码,可以参考汇编指令和机器码的对应表

2.掌握反汇编与十六进制编程器

  • 反汇编指令是“objdump -d objfile” ,其中-d参数是

    从objfile中反汇编那些特定指令机器码的section,和它类似的还有-D参数,但它反汇编所有section。

    • 如果我们想要以全屏幕的方式按页显示反汇编的内容,可以利用“管道”,即在反汇编指令后添加| more,这样我们就可以利用more的一些快捷键,如:Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令)
  • 十六进制编程器,是用来以16进制视图进行文本编辑的编辑工具软件。其实我们只需要用各系统都兼容的“vim”编辑器就可以实现十六进制编辑的功能。具体步骤如下:
    • ① 输入命令vi 20155312zjy查看可执行文件内容,发现大部分是我们没法理解的乱码;
    • ② 按esc后输入:%!xxd将显示模式切换为16进制模式;
    • ③ 进行相关操作后,输入:%!xxd -r转换16进制为原格式。

返回目录


实验步骤及结果

一、手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数

  1. 用反汇编指令objdump -d 20155312zjy指令查看可执行文件20155312zjy(pwn1的副本)的反汇编结果;
  2. 锁定需要改的目标代码80484b5: e8 d7 ff ff ff call 8048491 <foo>
  3. 对比getShell函数的地址0804847d和foo函数的地址08048491,可以发现两地址之差为十六进制“14”;
  4. 分析call汇编指令的机器码,可以锁定e8这个字节为代码部分,代表call这个指令,后面的“d7 ff ff ff”这四个字节为数值部分,代表指令跳转时需要与“eip”寄存器相加的偏移量;
  5. 由于数值存储方式为小端方式,所以锁定需要改的字节为“d7”,将它与地址差“14”做减法运算后的值为“c3”;
  6. 用vim编辑器打开20155312zjy文件vi 20155312
  7. 将该文件转换为十六进制显示:%!xxd
  8. /e8d7查找需要修改的内容;
  9. 修改d7为c3;
  10. 转换16进制为原格式::%!xxd -r
  11. 保存并退出;
  12. 反汇编看一下,发现call指令正确调用getShell;
  13. 运行zjy20155312,截图如下:

返回目录

二、利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数

实验步骤如下:

  1. 分析代码,发现foo函数存在Buffer overflow漏洞
  2. 返回目录

三、注入一个自己制作的shellcode并运行这段shellcode

返回目录


问题及解决方案

①修改更新源sources.list

  • 添加下列更新源到/etc/apt/sources.list文件

```

#阿里云kali源

deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib

deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib

deb http://mirrors.aliyun.com/kali-security kali-rolling/updates main contrib non-free

deb-src http://mirrors.aliyun.com/kali-security kali-rolling/updates main contrib non-free

#中科大kali源

deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib

deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib

deb http://mirrors.ustc.edu.cn/kali-security kali-current/updates main contrib non-free

deb-src http://mirrors.ustc.edu.cn/kali-security kali-current/updates main contrib non-free

```

  • 对软件进行一次整体更新
apt-get clean
apt-get update
apt-get upgrade

②安装32位运行库

apt-get install lib32ncurses5

运行后会等待一会会出现如下提示界面,这时按一下回车就好了:

  • 问题2:在解决问题1时,运行apt-get upgrade时提示“有未能满足的依赖关系”
  • 解决:按照系统提示,运行apt --fix-broken install即可,如下图所示,待执行完毕进行后续操作即可。

返回目录


参考资料

原文地址:https://www.cnblogs.com/zjy1997/p/8546932.html

时间: 2024-11-06 23:39:33

20155312张竞予 Exp1 PC平台逆向破解(5)M的相关文章

Exp1 PC平台逆向破解(5)M 20154307 冯彬

Exp1 PC平台逆向破解(5)M 20154307 冯彬 本次只是做了部分实验,课上学习了手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 首先,我们先了解本次任务需要用到的代码 1.反汇编,将汇编语言转换成机器语言 `objdump -d 文件名 | more` 2.vi命令,进入文件编辑界面 vi 文件名 3.vi命令状态下的进制转换 ①将当前文本转化为16进制格式 :%!xxd ②将当前文本转化回文本格式 :%!xxd -r 4.vi状态下的查找 /查找的内容 5.

2017-2018-2 《网络对抗技术》 20155322 第二周 Exp1 PC平台逆向破解(5)M

2017-2018-2 <网络对抗技术> 20155322 第二周 Exp1 PC平台逆向破解(5)M 1-实践目标 1.1-实践介绍 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.我们实践的目标就是想办法运行这个代码片段.我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Sh

20155338《网络对抗技术》 Exp1 PC平台逆向破解

20155338<网络对抗技术> Exp1 PC平台逆向破解 实践目标 1.实践的对象是一个名为pwn1的linux可执行文件. 2.该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 3.该程序同时包含另一个代码片段,getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.我们实践的目标就是想办法运行这个代码片段. 4.本次实践主要是学习两种方法: (1).利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发get

2017-2018-2 《网络对抗技术》 20155319 第二周 Exp1 PC平台逆向破解(5)M

2017-2018-2 <网络对抗技术> 20155319 第二周 Exp1 PC平台逆向破解(5)M 一.实践目标 1.1实践介绍 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.我们实践的目标就是想办法运行这个代码片段.我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何She

Exp1 PC平台逆向破解 20154302薛师凡

Exp1 PC平台逆向破解 20154302薛师凡 一.实践目标 对象是一个名为20154302的linux文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.我们实践的目标就是想办法运行这个代码片段.我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode. 二.实践内容 1.手工修改可执行文件,改变程序执行流程,直接跳

Exp1 PC平台逆向破解 20154301仉鑫烨

Exp1 PC平台逆向破解1 20154301仉鑫烨 1.实验目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.实践目标即为想办法运行这个代码片段.利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数. 注入一个自己制作的shellcode并运行这段

20155318 Exp1 PC平台逆向破解(5)M

20155318 Exp1 PC平台逆向破解(5)M 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.我们实践的目标就是想办法运行这个代码片段.我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode 实践内容 手工修改可执行文件,改变程序执行流程,直接跳转到

20154322 杨钦涵 Exp1 PC平台逆向破解(5)M

Exp1 PC平台逆向破解(5)M 一.实验目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.我们实践的目标就是想办法运行这个代码片段.我们将学习两种方法运行这 个代码片段,然后学习如何注入运行任何Shellcode. 二.实验知识掌握 1.掌握NOP, JNE, JE, JMP, CMP

20155330 《网络攻防》Exp1 PC平台逆向破解(5)M

20155330 <网络攻防>Exp1 PC平台逆向破解(5)M 实践目标 运行pwn1可执行文件中的getshell函数,学习如何注入运行任何Shellcode 本次实践的对象是一个名为pwn1的linux可执行文件. 实践内容 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数. 注入一个自己制作的shellcode并运行这段shellcode. 基本思路 运行原本不可访问的代码