国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

精確查找PHP WEBSHELL木馬的方法(1)

2020-02-23 04:45:56
字體:
來源:轉載
供稿:網友
先來看下反引號可以成功執行命名的代碼片段。代碼如下:
代碼如下:
`ls -al`;
`ls -al`;
echo "sss"; `ls -al`;
$sql = "SELECT `username` FROM `table` WHERE 1";
$sql = 'SELECT `username` FROM `table` WHERE 1'
/*
無非是 前面有空白字符,或者在一行代碼的結束之后,后面接著寫,下面兩行為意外情況,也就是SQL命令里的反引號,要排除的就是它。
*/

正則表達式該如何寫?
分析:
對于可移植性的部分共同點是什么?與其他正常的包含反引號的部分,區別是什么?
他們前面可以有空格,tab鍵等空白字符。也可以有程序代碼,前提是如果有引號(單雙)必須是閉合的。才是危險有隱患的。遂CFC4N給出的正則如下:【(?:(?:^(?:/s+)?)|(?:(?P<quote>["'])[^(?P=quote)]+?(?P=quote)[^`]*?))`(?P<shell>[^`]+)`】。
解釋一下:
【(?:(?:^(?:/s+)?)|(?:(?P<quote>["'])[^(?P=quote)]+?(?P=quote)[^`]*?))】
匹配開始位置或者開始位置之后有空白字符或者前面有代碼,且代碼有閉合的單雙引號。(這段PYTHON的正則中用了捕獲命名以及反向引用)
【`(?P<shell>[^`]+)`】這個就比較簡單了,匹配反引號中間的字符串。

某檢測PHP webshell的python腳本考慮欠佳。
再看看下一個列表的第一個元素。【(system|shell_exec|exec|popen)】,這個正則的意思是只要字符串里包含“system”、“shell_exec”、“exec”、“popen”這四組字符串即判定為危險字符。很明顯,這個方法太不嚴謹。如果程序員寫的代碼中,包含了這四組字符,即可被判定為危險函數。很不準確,誤報率極高。見下圖

某檢測PHP webshell的python腳本考慮欠佳。
到底什么樣的代碼是可疑的代碼?關鍵詞是什么?

可疑的代碼肯定是由可以執行危險操作的函數構成,可以執行危險操作的PHP函數最重要的就是“eval”函數了,對于加密的PHP代碼(僅變形字符串,非zend等方式加密),肯定要用到“eval”函數,所以,對于不管是用哪種加密方法的代碼,肯定要用到“eval”函數。其次就是可以執行系統命令的函數了,比如上面某牛的代碼中提到的四個“system”、“shell_exec”、“exec”、“popen”。當然還有其他的,比如passthru等。PHP還支持“·”字符(ESC鍵下面那個)直接執行系統命令。我們可以把正則寫成這樣【/b(?P<function>eval|proc_open|popen|shell_exec|exec|passthru|system)/b/s*/(】。

檢測PHP webshell的python腳本相對較為嚴謹的匹配
解釋一下:

大家都知道【/b/b】用來匹配單詞兩邊的位置的。要保證【/b/b】中間的是單詞,即使函數名前面加特殊字符,也一樣通過匹配,比如加@來屏蔽錯誤。后面的【/s*】用來匹配空白字符的,包括空格,tab鍵,次數為0到無數次。前面的【(?P)】是捕獲命名組。用來當作python代碼直接引用匹配結果的key。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 宁乡县| 塘沽区| 临朐县| 昭觉县| 永年县| 平乡县| 高碑店市| 都江堰市| 金乡县| 江西省| 芮城县| 拜城县| 民权县| 祥云县| 泰安市| 耒阳市| 新津县| 安塞县| 古浪县| 江华| 陇南市| 绥化市| 新沂市| 株洲市| 长泰县| 新和县| 永泰县| 陵水| 宁德市| 石屏县| 萍乡市| 怀集县| 瓦房店市| 绥江县| 乳山市| 宁陵县| 安徽省| 定南县| 海宁市| 平顺县| 体育|