知一得二重识得三,方得永恒。

Webshell定义

Webshell,网站的shell。通过shell管理操作系统,shell是用户和内核交互的程序。通常来说就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,可以称其作为网站后门。

通常包括以下三种主要功能

文件管理
命令执行
管理数据库

根据功能丰富程度来分类

大马 功能更加全面
小马 功能单一
一句话木马 功能由刀来决定

在jsp的网站中,马执行系统命令的偏多

经典一句话木马

PHP

1
2
3
<?php @eval($_POST['pass']);?>	 $_POST	==>	$_REQUEST(可转换)
<?php assert($_POST['pass']);?> $_POST ==> $_REQUEST(可转换)
<?php preg_math('/123/e',$_POST['pass'],'123456');?> 正则匹配/e模式

ASP

1
<%eval request("pass")%>

这里只能使用双引号,单引号在asp中是注释

JSP

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

在这里通常不用GET接受,因为会留下日志且可能会与其他接受参数冲突

细节知识点

1.aspx Webshell的权限比asp的高。因为Aspx用由C#编写的,aspx不通过iis去运行aspx,而是通过C#去执行,因此aspx的权限就是C#运行者的权限(一般情况都比iis高)

2.JSP的网站拿到权限之后一般都是root admin,这是为什么呢?因为JSP的中间件从网上下载下来后直接解压缩就行了,所有权限是当前运行者权限。而类似于apache的权限是由yum或其他命令逐步安装的 ,在安装后apache等中间件会自动创建一个中间件服务帐号。所以权限都不高,而JSP大多数都是root权限(管理员粗心)

3.因为JAVA不同版本写的文件管理功能不通用,所以导致无论是大马、小马还是一句话木马,百分之80的木马文件管理功能用不了。

常见网站组成

PHP

linux/windows + apache + mysql/oracle/mongodb/redis + php(module)

linux/windows + nginx + mysql + php-fpm(fastcgi)

windows + iis +mysql + php(fastcgi)

JSP/JSPX

linux/windows + tomcat/weblogic/jboss + mysql/oracle/mongodb/redis + jsp/jspx

ASP/ASPX

windows + iis + asp/aspx + mssql/access

上面是常见的三大网站组成类型,当客户端进行请求时,http://www.a.com/upload/404.php, 中间件(iis,apache,nginx,tomcat,weblogic)接受到请求会进行解析。中间件会解析路径以及文件名字。

如果文件后缀是中间件中设置的可识别的脚本语言后缀(php,asp,jsp…),就会调用php、net、java程序去执行相应的文件。(文件解析)如果文件后缀不是脚本语言后缀,那么就直接让客户端下载这个文件。可识别后缀在中间件中配置。

在这里是将图片下载到浏览器缓存文件中展示,而不是直接下载到本地。

webshell需要放在网站设置的目录中,后缀需要是中间件可识别的脚本语言后缀。这样webshell才能正常使用。

但是在这几种环境中webshell是不存在的,无法使用的。

1
Linux/Windows nginx + nodejs/go/python/rudy/...  +  mysql/sqlite/oracle

在这些网站中,你无法在URL处访问index.php或者login.php等网页。这些网页只能通过网站内部路由方式请求,去解析访问。

我们只能访问配置允许的路径

1568193541550
1568193541550

当我们请求的网页后缀不在允许路径里且不在路由表里时,则会下载下来。

exe执行文件是直接下载下来的,其他不可识别的文件可能下载到浏览器缓存文件中去。给我们的感觉就是直接把代码显示出来了。比如html代码中间件是不识别的,所以直接下来下来由浏览器显示了。而我们的PHP代码如果在html中也是没有办法被解析的,看到的也就是乱码了。