赞
踩
题目给出函数test
,test
里面有函数getbuf
,然后它给定的提权函数是touch1()
,我们那我们先gdb ctarget
进入调试,然后输入disassemble getbuf
查看汇编代码。
可以很清楚的看到函数的缓冲区大小是0x28
字节,然后gets
已经说明是库的标准函数了,gets
函数是有漏洞的,它在读入字符串的时候不会对长度检测,而是给多少读多少。那么我们可以用这个gets
来实现栈溢出,执行我们的权限函数touch1()
,我们可以先用00
字节填充40
个字节,然后再加上shell
函数的地址。注意前面可以用除了0a
的任意字节填充,因为0a
代表’\n’
的意思,gets
函数一旦读到这个字符就会认为字符串读取结束了。我们用print touch1
去查看该函数的地址。
发现了提权函数的地址之后我们就可以构造payload
了。我们先q
退出gdb
,然后这里先创建一个文本文件vim attack1.txt
然后填充
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00
c0 17 40
注意,地址在计算机里是小端序存储。也就是高地址存储高位字节,然后我们构造的payload
是往栈底方向填充的,而栈又是向低地址增长的,因此如此反转过后我们的函数地址要按字节倒着填充。然后根据字节生成字符串文件。
运行题目给的hex2raw
文件,./hex2raw <source file> target file
命令去生成目标文件。然后再./ctarget -q -i target file
这里我生成的文件名叫attackraw1.txt
,然后终端输入运行命令,发现攻击成功了。
这个需要攻击执行的函数名为touch2()
,这个栈溢出的漏洞依然可以利用。但是
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。