1. 命令執(zhí)行漏洞介紹
當應用需要調(diào)用一些外部程序去處理內(nèi)容的情況下,就會用到一些執(zhí)行系統(tǒng)命令的函數(shù)。如php中的system,exec,shell_exec等,當用戶可以控制命令執(zhí)行函數(shù)中的參數(shù)時,將可注入惡意系統(tǒng)命令到正常命令中,造成命令執(zhí)行攻擊。
2. 命令執(zhí)行漏洞:直接調(diào)用操作系統(tǒng)命令
舉個例子貼出代碼

這里發(fā)現(xiàn)con_fuction里面有exec,那么exec()這個函數(shù)是干嘛的呢?
下面我給大家簡單介紹一下php中的可以導致命令執(zhí)行的函數(shù)
system函數(shù)----string system(string command, int [return_var]);
實例代碼: $last_line = system('ls', $retval);
exec函數(shù)----string exec(string command, string [array], int [return_var]);
實例代碼 :echo exec("whoami");
popen函數(shù)----int popen(string command, string mode);
實例代碼
$fp = popen( "/bin/ls", "r" );
這里的函數(shù)還有很多因為我不寫php,所以上面的可能不太專業(yè)
下面就是由于這個exec導致的問題了
他用了exec也就說明他能執(zhí)行系統(tǒng)命令,那么我們嘗試進行一次執(zhí)行

一般我們的poc都是calc,那么這就是最簡單的一個命令執(zhí)行漏洞了
那么我們下面為大家演示命令注入
首先在學習命令注入前我們要理解的是
1. linux管道符
2. 簡單的幾個linux命令
3. 繞過本地驗證
那么下面我給大家介紹一下linux管道符號
網(wǎng)上的內(nèi)容五花八門
個人覺得用處比較大的就是"&" "|"
用法大家看一下
如下時在windows執(zhí)行

命令為whoami&ipconfig如果我們換一個命令呢
換成whoami|ipconfig

這時候我們發(fā)現(xiàn)用"&"作為管道符的命令成功的執(zhí)行了前后兩個然而"|"此命令只執(zhí)行了后面的ipconfig所以管道符的使用也就浮出水面
下面我們同樣在linux下執(zhí)行一下


我們的"&"符號是前后兩個命令依次執(zhí)行
而"|"符號是命令1 的正確輸出作為命令2的輸出對象.。
我們開始命令注入的講解

這里是一個靶場,介紹說的是"內(nèi)部人員方便運維工作留下的ping命令的頁面"那么他是執(zhí)行ping命令,我們就可以嘗試讓目標去通過管道符號去執(zhí)行系統(tǒng)命令。
如果他的命令式ping ip 那么我可以帶ping ip|任意命令,這樣就可以執(zhí)行系統(tǒng)命令
我們來嘗試一下

這里js彈窗說ip格式不正確他有本地的js校驗
我們看一下源代碼

其中
function f_check_IP()
{ var ip = document.getElementById('reg_ip').value;
var re=/^(d+).(d+).(d+).(d+)$/;
if(re.test(ip))
{
if( RegExp.$1<256 && RegExp.$2<256 && RegExp.$3<256 && RegExp.$4<256)
return true;
}
alert("IPu683Cu5F0Fu4E0Du6B63u786E");
return false;
}
這一段js代碼是為了檢查怎么的ip
那么如何繞過js驗證
我們可以用firefox一個插件noscript我這里不是用的noscript用的是js swith

裝好插件之后我們直接點擊紅色js

然后刷新頁面
輸入127.0.0.1|whoami

成功執(zhí)行了系統(tǒng)命令
我們獲取flag的方式無非是那幾樣我們先"ls"一下

成功回顯了目標的目錄內(nèi)文件
我們正常的讀取文件都是cat xxxx
那么我們現(xiàn)在嘗試cat key_22112201407597.php

但是這里無回顯
我們發(fā)現(xiàn)cat key_22112201407597.php
中間存在空格,所以我斷定是空格導致的問題
這里就要介紹一個Linux、里面 的空格{IFS}
在bash中IFS是內(nèi)部的域分隔符
也就是空格的意思我們可以修改命令為cat{IFS}key_22112201407597.php
但是沒有成功回顯,一開始這個靶機執(zhí)行cat{IFS}key_22112201407597.php是正?;仫@但是可能出了些問題,所以我們再來想辦法
這里還有一個小技巧在Linux里我們執(zhí)行cat<xxx
和cat xxx是一樣的
舉個例子

這樣也是可以的
那么我們嘗試
cat<key_22112201407597.php
成功返回了flag
這就是一個命令注入的姿勢。
3. 總結:我們在漏洞挖掘的實戰(zhàn)過程中啊,很少會碰見這樣額接口,相對于多的是某個框架和中間件的漏洞
比如strust2 weblogic jboss 我們需要在github或者exploit-db尋找exp去進行測試