目錄
RCE(remote command/code execute)概述:
exec "ping"
管道符
亂碼問題
RCE(remote command/code execute)概述:
RCE漏洞,可以讓攻擊者直接向后臺服務器遠程注入操作系統命令或者代碼,從而控制后臺系統
分為遠程代碼和遠程命令兩種.當對方存在或者提供相應的api接口
exec "ping"
這里介紹一下管道符,因為如果對ping命令功能的設計,沒有做好防護,比如可以輸入多條命令的時候,我們可以通過管道符做一些意想不到的事情。
管道符
管道符 | 實例 | 描述 |
; | A;B | 無論真假,A與B都執行 |
& | A&B | 無論真假,A與B都執行 |
&& | A&&B | A為真時才執行B,否則只執行A |
| | A|B | 顯示B的執行結果 |
|| | A||B | A為假時才執行B,否則只執行A |
當我們正常操作的時候,會出現如下操作:
這時候就可以嘗試使用管道符,可以嘗試簡單的操作127.0.0.1|whoami
這樣我們可以拿來進行用戶的信息獲取和一些操作。
代碼分析
if(isset($_POST['submit']) && $_POST['ipaddress']!=null){$ip=$_POST['ipaddress'];
// $check=explode('.', $ip);可以先拆分,然后校驗數字以范圍,第一位和第四位1-255,中間兩位0-255if(stristr(php_uname('s'), 'windows')){
// var_dump(php_uname('s'));$result.=shell_exec('ping '.$ip);//直接將變量拼接進來,沒做處理}else {$result.=shell_exec('ping -c 4 '.$ip);}}
通過psot,獲取ipaddress,然后對操作系統的類型進行一個判斷,然后進行一個ping命令的拼接,這里是沒有做任何處理的,我們可以看注釋,對此類操做我們可以拆分校驗,先做一個判斷,就可以很好的防止此類型攻擊。
亂碼問題
打開對應的php文件,輸入下面代碼,保存即可。
header("Content-type:text/html;charset=gb2312");
exec "eval"
這里要介紹php中的一個函數eval,會將符合PHP 語法規范字符串當作php代碼,執行當我們去嘗試輸入字符串時,會正常顯示,但是當我們輸入一個phpinfo(); ,這時候就不一樣了。
代碼分析
當用戶點擊了提交按鈕,并在 txt
輸入框中輸入了內容時,把用戶輸入的 txt
內容當成 PHP 代碼執行,如果執行失敗或返回值為“假”(比如返回 null
或空),則進入 if
語句塊。其實只要不要使用類似的函數即可,或者不要將此方法提供給用戶。
$html='';
if(isset($_POST['submit']) && $_POST['txt'] != null){if(@!eval($_POST['txt'])){$html.="<p>你喜歡的字符還挺奇怪的!</p>";}}