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命令, 2、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進行了嚴格的限制,只有諸如“數字.數字.數字.數字”的輸入才會被接收執行,因此不存在命令注入漏洞, 本文僅是個人學習記錄,部分摘自FreeBuf.Com等,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/21014.html
標籤:其他
上一篇:Brute Force暴力破解
下一篇:CSRF(跨站請求偽造)
