700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 小迪培训(第21天 WEB 漏洞-文件上传之后端黑白名单绕过)

小迪培训(第21天 WEB 漏洞-文件上传之后端黑白名单绕过)

时间:2021-04-25 01:32:29

相关推荐

小迪培训(第21天 WEB 漏洞-文件上传之后端黑白名单绕过)

WEB 漏洞-文件上传之后端黑白名单绕过

前言

文件上传常见验证

后缀名,类型,文件头等

后缀名:黑名单,白名单

黑名单:明确不允许上传的格式后缀

asp php jsp cgi war…

缺陷:在定义不完整的时候,可以使用其他格式达到绕过效果

白名单:明确可以上传的格式后缀

jpg png zip rar gif

相对于黑名单,验证会更安全一些

文件类型:MIME 信息(检测类型,不严谨,可以进行伪造)

Content-Type为MIME信息,通过这个信息来猜测你的文件是什么格式的,什么后缀(验证方式之一)

有时候我们可以通过改变其值,实现欺骗操作,从而成功绕过。

文件头:内容头信息(检测内容,不严谨,可以进行伪造)

对应详解:/chinabinlang/article/details/11797587?utm_source=blogxgwz3

简要上传表单代码分析解释

$_FILES函数详解:/laijinquan/p/8682282.html

演示案例(基于代码分析)

uploadlabs 关卡分析

Pass-01(白名单)

方式一

尝试上传php文件发现上传不了,对代码进行分析,发现验证代码时用前端js编写的

这时候我们上传一个图片格式(内有后门代码),直接打开bp进行抓包操作,修改filename后缀,发现成功上传!

方式二

通过f12将网页代码复制下来发现验证代码时用前端js编写的

这时候我们在自己本地新建一个文件(存放我们的第一关,防止误删其他重要代码),在代码中我们将验证部分删掉,同时加上对应的提交位置

进行上传操作,在对应文件看到php文件,成功上传!

Pass-02(MIME 信息验证)(白名单)

我们先上传PHP文件,发现提示:文件类型不正确,请重新上传!

通过分析代码,我们知道验证的地方是Content-Type这个地方,进行修改后成功将文件上传!

Pass-03(黑名单)(特殊解析后缀)

我们先上传PHP文件,发现提示:不允许上传.asp,.aspx,.php,.jsp后缀文件!

基础:trim函数详解

​ strrchr() 函数详解

通过分析代码,我们知道过滤方式为截图这些,我们首先要把代码读懂,发现这里限制条件并没有包括过滤php5后缀(Apache能够解析php5,但前提是apache的httpd.conf中有如下配置代码, AddType application/x-httpd-php .php .phtml .phps .php5 .pht .php3 .txt)

尝试修改下后缀名为php5,上传成功!

Pass-04(黑名单)(.htaccess解析)

查看代码,我们对其进行分析,发现其过滤的文件后缀更多,但是没有过滤 .htaccess

创建并上传.htaccess文件,文件内容为下面,然后上传带有shana的文件名(自定义),就会被解析成php

<FilesMatch "shana">SetHandler application/x-httpd-php</FilesMatch>

成功上传.htaccess文件和xshana.jpg文件 成功访问,解析php代码成功!

Pass-05(黑名单)(大小写绕过)

查看代码,我们对其进行分析,相对于前面少了这行代码

$file_ext = strtolower($file_ext); //转换为小写

过滤很充分,也过滤了.htaccess和.ini,但是没有将文件后缀名转换为小写,故大写绕过即可

Pass-06(黑名单)(空格绕过)

查看代码,我们对其进行分析,相对于前面少了这行代码

$file_ext = trim($file_ext); //收尾去空

我们可以在文件名后缀最后面加上空格,来绕过黑名单的过滤。到服务器后,会强制将空格去除,从而在服务器上是正常的文件!

Pass-07(黑名单)(点绕过)

查看代码,我们对其进行分析,相对于前面少了这行代码

$file_name = deldot($file_name);//删除文件名末尾的点

少了对点的过滤,因此直接在文件名后缀后面加上.即可实现上次

上传到对应网站后,系统会强制将点去掉,所以在那边我们看到的文件是正常的格式(最后没有一个点)

Pass-08(白名单)(::DATA 绕过)

::DATA

php在 windows中如果文件名 + " : :DATA"之后的数据当成文件流处理,不会检测后缀名,且保持"::DATA"之后的数据当成文件流处理,不会检测后缀名,且保持" : :DATA"之后的数据当成文件流处理,不会检测后缀名,且保持"::DATA"之前的文件名,它的目的就是不检查后缀名(Windows文件流特性)

查看代码,我们对其进行分析,相对于前面少了这行代码

$file_ext = str_ireplace('::$DATA', '', $file_ext);//去除字符串::$DATA

我们直接上传a.php,然后抓包进行修改(如下图),实现绕过!

Pass-09(黑名单)

基础知识

deldot函数

查看代码,我们发现和之前的没有太大区别,这时候我们从代码进行入手,对代码进行分析

获取对应文件名->设立黑名单数组->首位去空->删除末尾的点->截取.后面的字符(包括点)->转换成小写->去除字符串::$DATA->首位去空

主要思路:我们可以通过在末尾加点、空格来实现上传脚本的操作!在这里我们使用bp进行抓包,对其进行修改。

变化过程:

1234.php.空格 . ——>1234.php.空格. ——>1234.php.空格——>1234.php.——>1234.php(window特性)

Pass-10(黑名单)

查看代码,我们发现其中有句语句是将黑名单中后缀改成空格的语句,但这里只执行一次,我们以此为突破口 主要思路:上传php文件,使用bp进行抓包,对其进行修改。将后缀改成pphphp即可

Pass-11(白名单)(%00截断)

基础知识

substr

strrpos

%00和0x00的区别

前者用于地址方面的(get和post提交数据的位置进行修改)(修改位置有所不同,详情看第11和12关),后者是用于文件命名(在filename位置进行修改)

查看代码,进行对应分析

使用bp进行抓包发现这两个地方好像有点关联,我们尝试在后面加上x,1.jpg都不行,我们尝试使用截断 …/upload/1.jpg%00 (get会自动解码),发现能够成功上传!

分析

Pass-12(白名单)

跟Pass-11的方法类似,不过这个是post提交,POST不会像GET那样对%00进行自动解码,post内容修改为下面画框的位置。因此,我们需要在burp中选中%00右击->url ->urldecode->go 即可。

最后感谢小迪师傅的视频!!

笔记来源视频:点击这里

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