前言:
堅(jiān)持就是有點(diǎn)麻煩,但是你只要做下去就會(huì)感到習(xí)慣和快樂(lè)的事。
一、命令執(zhí)行漏洞概念
什么是命令執(zhí)行漏洞?命令執(zhí)行漏洞就是服務(wù)器端沒(méi)有對(duì)客戶端用戶輸入的命令進(jìn)行過(guò)濾,導(dǎo)致用戶可以通過(guò)任意拼接系統(tǒng)命令,使服務(wù)器端成功執(zhí)行任意系統(tǒng)命令。為什么客戶端能直接對(duì)服務(wù)器執(zhí)行命令呢,因?yàn)樵诜?wù)器安裝的web程序,web框架和web組件等外部程序有時(shí)候去需要調(diào)用執(zhí)行命令的函數(shù),所以如果沒(méi)有對(duì)客戶端用戶輸入的命令進(jìn)行過(guò)濾,就會(huì)使得用戶通過(guò)外部程序直接編寫和執(zhí)行系統(tǒng)的命令函數(shù)。
二、命令執(zhí)行原理
命令執(zhí)行漏洞主要是服務(wù)端沒(méi)有對(duì)執(zhí)行命令的函數(shù)做出過(guò)濾導(dǎo)致的。我們可通過(guò)編寫一些系統(tǒng)函數(shù)來(lái)輸入疑似存在命令執(zhí)行接口的地方,來(lái)檢測(cè)是否此接口是否存在命令執(zhí)行漏洞。
1. 常見(jiàn)的執(zhí)行系統(tǒng)命令的函數(shù)有:
windows系統(tǒng):
whoami:查看服務(wù)器用戶名
ipconfig:查看本機(jī)IP地址子網(wǎng)掩碼以及默認(rèn)網(wǎng)關(guān)等
dir:查看本目錄文件
Linux系統(tǒng):
whoami:查看服務(wù)器用戶名
ifconfig:查看本機(jī)IP地址子網(wǎng)掩碼以及默認(rèn)網(wǎng)關(guān)等
ls:列出本目錄文件
pwd:查看現(xiàn)目錄的絕對(duì)路徑
除了拼接函數(shù)外,我們還可以使用命令連接符來(lái)組合這些系統(tǒng)函數(shù)增加命令執(zhí)行成功率。常見(jiàn)的命令連接符有(“|,&&,||”這三個(gè)連接符都是Windows系統(tǒng)與Linux系統(tǒng)共有的,而“&”是Windows系統(tǒng)特有,“;”是Linux系統(tǒng)特有的):
- |
管道操作符
A|B:無(wú)論執(zhí)行的A命令是否正確,B命令都執(zhí)行
- &&
邏輯與
A&&B:只有在A命令成功執(zhí)行的前提下,B命令才可以執(zhí)行
- ||
邏輯或
A||B:只有在A命令沒(méi)有執(zhí)行失敗的前提下,B命令才可以執(zhí)行
- &
A&B:不管A是否執(zhí)行成功,B命令都會(huì)執(zhí)行
- ;
A&B:不管A是否執(zhí)行成功,B命令都會(huì)執(zhí)行
2. 代碼命令執(zhí)行
一般我們能通過(guò)外部程序直接調(diào)用的系統(tǒng)命令的接口并不多,但是有些外部程序使用的代碼可以也導(dǎo)致命令執(zhí)行。 PHP代碼執(zhí)行漏洞是將PHP代碼注入到Web應(yīng)用中通過(guò)Web容器執(zhí)行 。例如PHP中的 eval()、assert()、``、system()、exec()、shell_exec()、passthru()、 pcntl_exec()等(Windows上未對(duì)反斜杠進(jìn)行過(guò)濾),當(dāng)用戶可以控制命令執(zhí)行函數(shù)中的參數(shù)時(shí),將可以注入惡意系統(tǒng)命令到正常命令中,造成命令執(zhí)行攻擊。
我們來(lái)解釋一下這些命令的意思
system():
system函數(shù)是php函數(shù)通過(guò)調(diào)用外部程序命令來(lái)實(shí)現(xiàn)與系統(tǒng)命令函數(shù)交互達(dá)到執(zhí)行系統(tǒng)函數(shù)的目的,system將執(zhí)行結(jié)果顯示輸出
舉例
創(chuàng)建一個(gè)123.php文件,在里面寫入
<?php
system("whoami");
?>
執(zhí)行命令whoami并輸出
passthru()
passthru()函數(shù)(一般用于UNIX系統(tǒng))和system函數(shù)類似,執(zhí)行命令并且可以將輸出結(jié)果回顯
<?php
echo"<pre>";
passthru("ipconfig");
echo"</pre>";
?>
exec函數(shù)也是命令執(zhí)行函數(shù)。作用與system差不多,只不過(guò)exec函數(shù)可以執(zhí)行,但是不回顯結(jié)果,只返回執(zhí)行結(jié)果的最后一行。
要回顯結(jié)果可以加上echo函數(shù)
<?php
exec("ipconfig");
?>
shell_exec()
與exec函數(shù)差不多,執(zhí)行命令函數(shù),但是不回顯,我們可以使用echo函數(shù)把執(zhí)行結(jié)果顯示出來(lái)
代碼執(zhí)行漏洞
由于服務(wù)器對(duì)危險(xiǎn)函數(shù)過(guò)濾不嚴(yán),導(dǎo)致用戶輸入的一些字符串可以被轉(zhuǎn)換成代碼來(lái)執(zhí)行,從而造成代碼執(zhí)行漏洞。
下面介紹一些危險(xiǎn)函數(shù),它們可以將輸入的字符串轉(zhuǎn)化為代碼。
eval()
eval() 函數(shù)可將括號(hào)里面的字符串轉(zhuǎn)換為代碼執(zhí)行,字符串必須是合法的php代碼并且用分號(hào)結(jié)束,這樣才能執(zhí)行代碼命令。
創(chuàng)建text.php文件。里面代碼是
<?php
$cmd=$_GET["cmd"];
eval("$cmd");
?>
然后我們往這個(gè)文件名后面加上?cmd=phpinfo();
發(fā)現(xiàn)代碼被后臺(tái)解析了,并且成功執(zhí)行了,但是一般情況下這個(gè)頁(yè)面是不能顯示出來(lái)了,是被過(guò)濾掉的,因?yàn)檫@樣會(huì)暴露里面的配置信息。而這里是因?yàn)閑val函數(shù)我們才能實(shí)現(xiàn)代碼執(zhí)行。
這里說(shuō)一下php中的phpinf代碼是表示輸出php的配置信息的。如果服務(wù)端沒(méi)有過(guò)濾eval這個(gè)危險(xiǎn)注入函數(shù)的話,就會(huì)導(dǎo)致代碼執(zhí)行漏洞。
assert()
assert()函數(shù)是一個(gè)斷言函數(shù),在php里面判斷一個(gè)表達(dá)式是否成立,返回真或假。如果直接將PHP代碼傳入也會(huì)被執(zhí)行
三、命令執(zhí)行漏洞演示
我們只是通過(guò)文字解說(shuō)的話太抽象了,聽(tīng)起來(lái)還是懵懂,所以我們來(lái)通過(guò)使用DVWA靶場(chǎng)來(lái)為大家演示命令執(zhí)行漏洞。
首先我們觀察這個(gè)頁(yè)面得知,這里是一個(gè)ping裝置,就是說(shuō)類似于我們使用cmd窗口ping的功能
一般來(lái)說(shuō)ping裝置只能輸入ip進(jìn)行ping,而輸入其他系統(tǒng)則不能成功執(zhí)行的。這時(shí)候如果我們能執(zhí)行除了ip之外的系統(tǒng)命令,就證明存在命令執(zhí)行漏洞了。
LOW等級(jí):
我們輸入ip試試,可以執(zhí)行成功
再試一下直接輸入其他系統(tǒng)命令。
發(fā)現(xiàn)不成功。
說(shuō)明這里需要使用命令連接符拼接。
然后我們查看一下源碼,發(fā)現(xiàn)沒(méi)有任何防護(hù),也就是說(shuō)我們可以通過(guò)這個(gè)裝置任意執(zhí)行其他命令
我們?cè)囈幌缕唇酉到y(tǒng)命令來(lái)查看服務(wù)器的用戶,發(fā)現(xiàn)這里居然能執(zhí)行成功
medium等級(jí)
我們?cè)俅屋斎肷洗文莻€(gè)low等級(jí)的命令函數(shù)試一下,發(fā)現(xiàn)執(zhí)行失敗
我們看一下源碼,發(fā)現(xiàn)這里多了一層防護(hù),過(guò)濾掉了&&和;符號(hào)
但是命令連接符可不止這兩個(gè)啊,既然這兩個(gè)被過(guò)濾掉了,我們使用其他命令
high等級(jí)
我們嘗試輸入了所有的命令連接符去拼接系統(tǒng)命令了,發(fā)現(xiàn)都不能執(zhí)行系統(tǒng)命令了,為啥呢,我們查看一下源碼
發(fā)現(xiàn)所有的連接符都被過(guò)濾掉了,這個(gè)可怎么辦啊,難道沒(méi)有辦法了嗎,不,既然這里直接拼接的命令不成功,那我們?cè)囈幌吕@過(guò)
使用空格繞過(guò)
成功繞過(guò)。
四、漏洞危害
1. 繼承Web服務(wù)器程序的權(quán)限,去執(zhí)行系統(tǒng)命令或讀寫文件
2. 可以反彈shell
五、安全防護(hù)
1. 服務(wù)端過(guò)濾危險(xiǎn)函數(shù)
2.?使用自定義函數(shù)或函數(shù)庫(kù)來(lái)代替外部命令文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-471342.html
————————————————
版權(quán)聲明:本文為CSDN博主「bk天氣」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/m0_49577923/article/details/121341057文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-471342.html
到了這里,關(guān)于命令執(zhí)行漏洞的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!