Command Injection命令注入

Low
stristr(string,search,before_search)
stristr函數搜索字符串在另外一字符串中的第一次出現,返回字符串的剩餘部分(從匹配點),若是未找到所搜索的字符串,則返回 FALSE。參數string規定被搜索的字符串,參數search規定要搜索的字符串(若是該參數是數字,則搜索匹配該數字對應的 ASCII 值的字符),可選參數before_true爲布爾型,默認爲「false」 ,若是設置爲 「true」,函數將返回 search 參數第一次出現以前的字符串部分。
php_uname(mode)
這個函數會返回運行php的操做系統的相關描述,參數mode可取值」a」 (此爲默認,包含序列」s n r v m」裏的全部模式),」s 」(返回操做系統名稱),」n」(返回主機名),」 r」(返回版本名稱),」v」(返回版本信息), 」m」(返回機器類型)。
能夠看到, 服務器經過判斷操做系統執行不一樣ping命令,可是對ip參數並未作任何的過濾,致使了嚴重的命令注入漏洞。
 
漏洞利用
window和linux系統均可以用&&來執行多條命令
先試試127.0.0.1&&dir
127.0.0.1&&net user (不知道爲啥,我這net user命令不會執行,cmd都挺正常的)
 
ps :在這裏有必要說一下邏輯運算符「&」 「|」 都是什麼意思
&& :表明首先執行命令a 再執行命令b ,可是前提條件是命令a 執行正確纔會執行命令b ,在a 執行失敗的狀況下不會執行b 命令。因此又被稱爲短路運算符。
& :表明首先執行命令a 再執行命令b ,若是a 執行失敗,仍是會繼續執行命令b 。也就是說命令b 的執行不會受到命令a 的干擾,在執行效率上來講「&&」 更加高效。
|| :表明首先執行a 命令再執行b 命令,若是a 命令執行成功,就不會執行b 命令,相反,若是a 命令執行不成功,就會執行b 命令。
| :表明首先執行a 命令,再執行b 命令,無論a 命令成功與否,都會去執行b 命令。
 
二、medium等級命令行注入
服務器端對ip參數作了必定過濾,即把」&&」 、」;」刪除,本質上採用的是黑名單機制,所以依舊存在安全問題。 可是他並無過濾「|」 ,因此咱們依然能夠進行注入。
127.0.0.1|net user
127.0.0.1 &dir
127.0.0.1&;&ipconfig
 
High
黑名單看似過濾了全部的非法字符,但仔細觀察到是把」| 」(注意這裏|後有一個空格)替換爲空字符,因而 」|」成了「漏網之魚」。
Command 1 | Command 2
「|」是管道符,表示將Command 1的輸出做爲Command 2的輸入,而且只打印Command 2執行的結果。
127.0.0.1|net user
 
Impossible
stripslashes(string)
stripslashes函數會刪除字符串string中的反斜槓,返回已剝離反斜槓的字符串。
explode(separator,string,limit)
把字符串打散爲數組,返回字符串的數組。參數separator規定在哪裏分割字符串,參數string是要分割的字符串,可選參數limit規定所返回的數組元素的數目。
is_numeric(string)
檢測string是否爲數字或數字字符串,若是是返回TRUE,不然返回FALSE。
能夠看到,Impossible級別的代碼加入了Anti-CSRF token,同時對參數ip進行了嚴格的限制,只有諸如「數字.數字.數字.數字」的輸入纔會被接收執行,所以不存在命令注入漏洞。
相關文章
相關標籤/搜索