木马上传方式

直接上传

通过直接上传一句话木马获取webShell。

数据库备份webShell

网站进制上传可执行文件,此时我们可以上传正常的图片马,然后通过数据库备份功能修改备份后的文件名,使得图片马能够成功解析执行。

1
copy/b 1.jpg+1.txt 2.jpg   # 将文件写入图片中,这里的文件不局限于txt文件

有时候数据库备份功能对备份的地址做了前端的限制,只需修改前端源码,成功绕过。

突破本地js验证webShell

若网站对上传只做了前端限制,可以通过修改前端代码或者删除检测代码,还可以通过抓包改包成功上传一句话木马。

上传其他脚本webShell

有时候一台服务器上由于搭建了不同脚本的几个网站,导致服务可同时执行多种脚本,此时我们可以尝试上传其他脚本来绕过对某一脚本的限制。

00截断webShell

00截断是利用服务器对%00后面的字符不再识别,导致攻击者可构造%00之前的后缀名为可执行文件,成功绕过白名单限制

解析漏洞webShell

利用不同服务器存在的解析漏洞成功绕过后缀名限制上传。如IISapachenginx

利用编辑器漏洞webShell

有些网站在编辑界面应用了存在已知漏洞的编辑器,可利用漏洞直接getShell,或者配合解析漏洞上传木马getShell。如fckeditorewebeditorcheditor

网站配置插马webShell

一些网站在后台存在网站配置,比如配置网站首页公司名称等信息,此处可直接插入一句话木马。配置界面插马要非常小心,最好下载源码,分析源码闭合代码插入一句话,防止网站被插废。

通过编辑模板webShell

通过对网站的模板编辑写入一句换,利用解析漏洞生成脚本getShell

还可以将一句换木马打包为压缩文件,上传后解压到网站成功getShell

修改脚本文件直接getShell

有的网站管理员可以修改脚本,攻击者可在脚本中插入一句话木马成功getShell

数据库命令执行webShell

有的网站管理员可直接在前端执行sql语句,此时我们可以通过创建数据库写入一句话,再将一句话导出到网站根目录,连接getShell

文件包含webShell

当防火墙对可执行脚本过滤比较严格时,可以通过文件包含的方式绕过。

首先上传一张图片马(后缀为jpg/png等网站允许上传的格式),然后上传包含可执行文件,将上传的文件包含进去。

1
2
<?php include( "xxx.jpg");?>       # php
<!--#include file="xxx.jpg"--> # asp

命令执行webShell

网站存在可执行命令的地方可直接用echo函数写入一句。

Sql注入webShell

存在sql注入的网站,如果有足够的权限并且可以得到绝对路径,我们就可以直接使用select into......outfile函数直接写入一句话到网站根目录。

木马查杀防范

针对一句话木马
  1. 日志排查
    针对Webshell正在使用的常见关键字过滤服务器访问和错误日志,包括文件名称和/或参数名称。
    根据下面的示例,在Apache HTTP Server访问日志中的URL中搜索字符串文件。
    1.png

  2. 文件系统搜索
    文件系统(通常是Web服务器根目录)中搜索文件或文件名中的通用字符串。
    2.png
    如果搜索到很长的字符串,这可能表示已进行了编码。一些后门程序具有数千行代码。
    3.png

  3. 搜索最近X天修改过的文件
    我们可以通过搜索了前一天或前一小时更改的*.php文件来进行排查

    1
    2
    find / -name *.php -mtime -1 -ls    # 搜索前一天
    find / -name *.php -mmin -60 -ls # 搜索前一小时

    但建议搜索所有更改过的文件,毕竟webShell也可以嵌入到图像或任何其他文件中。

  4. .htaccess文件的分析
    分析.htaccess文件是否进行了修改。以下是攻击者可能对.htaccess文件进行更改的示例
    4.png

  5. 监控异常流量
    监视网络中存在异常的网络流量和连接。
    5.png

  6. 借助软件查杀
    下载网站源码至本地,通过D盾Seay源代码审计系统等软件进行查杀

针对内存马(不死马)

由于内存马,即不死马,具有无文件落地、极难检测和发现等特性,难以清除。
针对不死马,我们有以下方法可以进行检测

  1. 重启服务器
    简单粗暴,重启服务器,然后删除木马文件。但大多数awd比赛会因为重启失分,所以不能频繁重启服务。

  2. 日志的排查
    在上面的一句话木马的检测排查的基础上,重点关注一些不明路径以及它的出现频率,可通过此查看其木马文件名。

  3. 重写木马文件
    我们可以通过不断向木马文件重写来克制,前提是写入速度要大于不死马的生成速度,且已知木马文件名

    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    set_time_limit(0);
    ignore_user_abort(true);
    unlink(__FILE__);
    while(1){
    file_put_contents('./shell.php','11111');
    usleep(0);
    }
    ?>
  4. bash脚本删除
    通过编写bash脚本不断的进行删除木马文件,前提是已知木马文件名

    1
    2
    #!/bin/bash
    while : ;do rm -rf .shell.php; done;
  5. 清除进程
    不断地删除程序以及杀死进程

    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    while (1) {
    $pid=xxx; # 进程号
    @unlink('shell.php');
    exec('kill -9 $pid'); # 强制清除进程
    usleep(1000);
    }
    ?>

预防措施

通常,黑客会利用Web服务器软件中存在的漏洞来安装webShell。 因此,消除这些漏洞对于避免失陷Web服务器的潜在风险很重要。
以下是一些与webShell相关的预防措施。

  1. 如果不使用,要禁用危险的PHP函数,例如exec()shell_exec()passthru()system()show_source()proc_open()pcntl_exec()eval()assert()

  2. 如果必须要启用这些命令,请确保未授权用户无法访问这些脚本。此外,使用escapeshellarg()escapeshellcmd()可以确保不能将用户输入注入到shell命令中,从而导致命令执行漏洞。

  3. 如果Web应用程序正在使用上传表单,请确保上传的表单是安全的,并且仅允许上传白名单所允许的文件类型。

  4. 不要相信用户输入的信息。

  5. 不要盲目使用在线论坛或网站上的代码。

  6. 对于WordPress,如果不需要,要避免安装第三方插件。如果需要使用插件,请确保插接件其信誉良好且经常更新。

  7. 在敏感目录(如图片或上传)中禁用PHP执行。

  8. 锁定Web服务器用户权限。