|
前一个进程的输出直接做为后一个进程的输入>
将内容定向输入到文件中首先将目标文件pwn1进行反汇编,可以看到相关的汇编代码。
shell
其中main函数中有一条call指令,后面本来接的是foo函数的起始地址dom
为了能让程序在执行时直接跳到shellcode,咱们须要修改调用foo函数时的机器指令,只要修改“d7ffffff”为,"getShell-80484ba"对应的补码就行。以下图所示
函数
这种攻击主要是经过缓冲区的数据溢出致使原函数的返回地址被Shellcode的起始地址所覆盖。spa
首先咱们须要对程序进行GDB调试,查看输入的字符串到第几个字节会发生溢出。(小端机器)
命令行
而后构造一个输入,将Shellcode代码的地址覆盖到相应的位置。这时须要用到perl指令。如图
3d
执行结果以下:调试
准备工做以下:code
设置堆栈可执行 execstack -s 设置堆栈可执行blog
execstack -q 查询文件的堆栈是否可执行教程
关闭地址随机化
more /proc/sys/kernel/randomize_va_space 2
echo "0" > /proc/sys/kernel/randomize_va_space
more /proc/sys/kernel/randomize_va_space 0
经常使用的构造攻击buf的方法
retaddr+nop+shellcode (缓冲区小)
nop+shellcode+retaddr (缓冲区大)
实验首先相似上一个实验构造一个输入,而后用gdb进行调试,对foo函数进行反汇编,在ret指令处设置断点,等待程序继续运行时查看ESP中的值。(一开始按照老师的教程走了一遍,发现原来还有坑,心塞)
ESP的值+4就是Shellcode的地址,再将其写入一开始的攻击buf,执行程序就能攻击成功。
CMP:比较指令,功能至关于减法指令,只是对操做数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。其余相关指令经过识别这些被影响的标志寄存器位来得知比较结果。
实验感想