大数跨境
0
0

【安全研究】HTB下Fortune靶机渗透writeup

【安全研究】HTB下Fortune靶机渗透writeup SafedogCybersecurityLab
2020-02-26
1
导读:欢迎各位小伙伴留言交流

↑ 点击上方蓝色字关注我们


笔者最近在hackthebox做靶机类的题目时,发现靶机不仅有偏向CTF类的,也有和实战相似的,而且靶机的质量足以让自己在做题的时候学习到很多“干货”,这里分享一个渗透的案例,希望有兴趣的小伙伴可以一起交流做题的思路。




靶机环境信息






信息收集



Nmap扫描:



80端口:



然后对web的目录进行探测,试图找到敏感的文件或者目录。不过很遗憾没有任何信息。



443端口





80端口漏洞挖掘



回到80端口,抓取数据包,发现只有一个post参数。这个参数输入已开始页面的几个选项值,就返回相应的内容。如果输入的内容不存在,返回为空。




这里初步认为是后台通过数据库查询,于是尝试SQL注入。



但是结果并不是自己想象的。尝试使用工具注入,也没有结果。

于是为了节省时间,就自己添加了一些可能的payload做fuzz。

可能是sql注入漏洞

可能有任意文件读取漏洞

可能有栈溢出漏洞

可能有命令执行漏洞


测试的结果显示当输入 |或;时可以执行命令:



在几次尝试burp手工输入命令点击发包之后,想进一步节省时间,就写了一个伪shell的脚本:



查看了来一下web源代码,发现原来是可控参数直接带入os.popen().read()中去执行,导致了任意命令执行的漏洞。


from flask import Flask, request, render_template, abortimport os app = Flask(__name__)@app.route('/select', methods=['POST'])deffortuned():    cmd ='/usr/games/fortune '    dbs =['fortunes','fortunes2','recipes','startrek','zippy']    selection = request.form['db']    shell_cmd = cmd + selection    result = os.popen(shell_cmd).read()    return render_template('display.html', output=result)


进一步搜索有用的目录和文件夹。在/home/bob/ca目录下看到有certs 和private两个文件夹,里面分别存放了一些私钥和公钥。



其中还有intermediate的公钥和私钥。



这里泄漏了中间证书的公钥和私钥,于是可以用他们来创建end-user certificate证书。


关于证书链的一些基础知识,可以参照如下几个网站:

http://www.bewindoweb.com/274.html

https://tech.igengmei.com/20190520/https-licenses-chain/


这里使用openssl来自建CA:

openssl genrsa -out client.key 2048  //生成客户端的私钥,2048位,保存到client.key中
openssl req -new -key client.key -out client.csr // 生成一个新的证书请求文件、指定client.key为指定的私钥,并保存为client.csr
openssl x509 -req -in client.csr -CA intermediate.cert.pem -CAkey intermediate.key.pem -CAcreateserial -out client.pem -days 1024 -sha256 // 使用x509自建CA
openssl pkcs12 -export -out client.pfx -inkey client.key -in client.pem -certfile intermediate.cert.pem // 生成PKCS12证书。



生成之后在浏览器中导入刚刚生成的证书文件,再次访问10.10.10.127的443端口,就可以看到内容:


这里虽然看到了内容,但是内容要求我们如果没有ssh的key,就需要点击生成一个。



本地保存该私钥,但不代表马上可以登陆。因为目前还缺哪个用户可以使用该私钥。

这里的技巧是通过查看/etc/passwd来看看authpf是哪个用户起的:



在得知nfsuser使用authpf后,就可以ssh登陆:



经过认证之后,改变了访问策略,所以再次扫描端口试试有没有新的端口出现:



果然多出来了三个之前没见过的端口。
查看8081端口,看到如下内容:



pgadmin4 service是Postgres的开源管理工具。



这里想通过已经公布的Nday漏洞打进去,但是失败了,再返回2049端口的nfs,看看能不能有些突破。


对这个不熟悉的可以参照即刻安全的一篇文章:

http://www.secist.com/archives/6192.html


主要的内容就是可以通过nfs来显示共享的文件夹列表,然后可以通过挂载的方式在本地也能正常访问,如果权限足够甚至能直接把ssh的公钥写入然后ssh登陆。


首先先showmount查看哪些目录是可以访问的:



既然看到home目录可以访问,那么不妨进去看看,使用mount -t nfs <IP>:/home /mnt把home目录mount到本机的/mnt目录下方便查看



进chalie目录下查看details,但是发现权限不足。刚才的那篇文章中提到的方法是创建一个和charlie相同的uid,就可以正常查看了,再通过一开始的RCE漏洞,查看charlie的id。



然后在本地创建一个和charlie的uid相同的账户。



既然可以访问了,不妨写入自己的ssh的公钥然后ssh连接上去:



连上之后再看看还有什么有价值的文件夹或者文件,看到mbox的时候看到如下内容:



大意是bob这位管理员把dba的密码设置成和root密码一样。


这样只需要想办法获得dba的密码,就可以用root的账号登陆这台机子获得roo权限。

搜索pgadmin4所在的目录,得到如下几个位置:



然后查找pgadmin4的db数据库文件是保存在哪里的。

通过一番搜索,得知先找到配置文件,再从配置文件中获取数据库名称。



这里得知数据库db文件的名称是pgadmin4.db,于是再用find命令查找,得到如下位置:

/var/appsrv/pgadmin4/pgadmin4.db


然后用scp命令下载到本地:

scp charlie@10.10.10.127:/var/appsrv/pgadmin4/pgadmin4.db .

用sqlitebrowser打开



这里的账户密码不是普通的md5加密,没办法直接解开,但是可以通过查看pgadmin4是怎么进行身份校验就知道怎么获取明文。


先在存放源码的目录下查看有decrypt关键字的文件有哪些:



然后先查看crypto.py这个文件



有了这个脚本也就有了解密函数,但不代表这个时候就能解出明文,还需要知道另一个参数是什么。于是在connection.py中找到。




紧接着查找server表中的user对应的password。



再根据对应的crypto脚本,编写解密脚本。这里直接复制出它的解密和pad函数即可。当然也不要落下padding_string。



运行解密脚本之后可以得到明文密码:



这里直接切换成root权限,输入上面解密后的字符串,便可以得到root权限。





渗透思路梳理



针对本次靶机的渗透,在此处做个简单的总结:

【声明】内容源于网络
0
0
SafedogCybersecurityLab
Safedog Cybersecurity Lab(安全狗网络安全实验室)隶属于安全狗研发中心,现阶段的我们致力于Web、APP以及区块链等方面的安全研究以及热点安全事件的跟踪。这个公众号是我们的分享、交流的平台。
内容 6
粉丝 0
SafedogCybersecurityLab Safedog Cybersecurity Lab(安全狗网络安全实验室)隶属于安全狗研发中心,现阶段的我们致力于Web、APP以及区块链等方面的安全研究以及热点安全事件的跟踪。这个公众号是我们的分享、交流的平台。
总阅读0
粉丝0
内容6