shellcode注入
1、Linux下有两种基本构造攻击buf的方法:retaddr+nop+shellcode
,nop+shellcode+retaddr
。我们采用anything+retaddr+nops+shellcode
的方法。
2、实验的目标是找到返回地址的位置和shellcode的地址。然后通过修改返回地址使其自动执行shellcode
实验前通过命令:apt-get install exestack
安装exestack
拷贝并运行pwn1文件确保可以使用
设置堆栈可执行
-
关闭地址随机化,more/proc/sys/kernel/randomizevaspace用来查询地址随机化是否开启或者关闭的状态,2表示开启,0表示关闭。
-
构造payload,采用nop+shellcode+retaddr方式(x4x3x2x1将覆盖到堆栈上的返回地址的位置,需要将它改为shellcode的地址)
-
打开一个新的端口,用命令:
(cat input_shellcode; cat) > ./20145232pwn1
注入这段攻击并执行文件
-
开启另一个终端,输入
ps -ef | grep 201445232pwn1
,查看进程的UID
-
进入gdb模式,然后输入attach UID与进程进行连接
-
输入命令disassemble foo对foo函数进行反汇编
-
在ret处设置一个断点
-
在端口下按回车执行一下程序,在gdb中输入c
-
查看此时寄存器esp中的值,这个地址就是函数的返回地址
-
输入quit退出gdb模式
-
用xxd input_shellcode查看输入
-
再次执行程序,完成攻击