20145219《网络对抗》PC平台逆向破解
shellcode注入
1、shellcode
shellcode是一段代码,溢出后,执行这段代码能开启系统shell。
2、构造方法
(1)nop+shellcode+retaddr(适用于缓冲区大的情况)
(2)retaddr+nop+shellcode(适用于缓冲区小的情况)
3、nop+shellcode+retaddr方法
用vim编写一段代码shellcode
安装execstack
设置堆栈可执行
查询地址随机化状态(2表示开启,0表示关闭),若是开启状态,则关闭地址随机化
采用nop+shellcode+retaddr
方式构造payload,其中\x4\x3\x2\x1
处是将来要填的shellcode起始地址,最后一个字符不能是\x0a
打开一个新终端,将payload注入到pwn1中(此处pwn1复制了一份,并命名为20145219pwn)
在第一个终端中查询20145219pwn进程的UID
保持第二个终端如上图状态,再打开一个新终端,开启GDB,对20145219pwn进行调试
先用attach命令进入对应UID端口,进行追踪
设置断点
在GDB调试出现continue
的时候,在第二个终端中敲一下回车,此时,第二个终端如下图,GDB调试也暂停在断点处
查看内存地址,最终找到shellcode起始地址为0xffffd300
将用nop+shellcode+retaddr
方式构造的payload中的\x4\x3\x2\x1
改为\x00\xd3\xff\xff
,并在再次注入到20145219pwn中,观察结果看到注入失败……
4、retaddr+nop+shellcode方法
在nop+shellcode+retaddr
方式的基础上,在构造的payload的最前面,加上\x00\xd3\xff\xff
,重新注入到20145219pwn中,观察结果看到注入成功^_^