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

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

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

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

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


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

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

這里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

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

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

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

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