文件上传漏洞利用-后端黑名单绕过

举报
黑色地带(崛起) 发表于 2023/02/16 14:15:24 2023/02/16
【摘要】 文件上传漏洞利用-后端黑名单绕过

文件上传漏洞利用-后端黑名单绕过

目录

后端黑名单绕过

特殊可解析后缀

原理:就是加上数字等,但是可以被当做原来的类型进行执行

利用过程:

.htaccess解析

原理:上传.htaccess文件到指定的目录,重写当前目录下的解析规则,上传图片马,打开图片马所在位置将以新指定的方式解析运行

环境条件:

利用过程:

大小写绕过

原理:对大小写不敏感,上传大小写混写的php进行绕过

利用过程:

重写(双写)绕过

原理:被删除一个黑名单字符后,形成新的预期类型

利用过程:

‘.’或者空格点绕过

原理:还是相当于是绕过了黑名单

第一步:打开burpsuite进行代理拦截

第二步:把shell.php文件改为shell.png,然后将其上传

第三步:用burpsuite进行抓包修改,把后缀改为php,并在后缀后面加上空格或者点

第四步:获取webshell权限,即浏览器打开上传的图片马地址

第五步:使用工具(蚁剑/菜刀)进行连接等操作

利用过程:

::$$DATA绕过

原理:

换言之:

第一步:burpsuite拦截

第二步:文件上传

第三步:抓包修改,后缀改为php,并在后缀后面加上::$DATA

第四步:获取webshell权限,即浏览器打开上传的图片马地址

第五步:使用工具(蚁剑/菜刀)进行连接等操作

利用过程:

配置解析漏洞

原理:

触发点:

利用:

以Apache解析漏洞为例

第一步:新建一个Apache无法正确解析识别的文件

第二步:在这个文件里面写入执行语句

第三步:获取wheshell权限,即访问这个文件所在的位置

 upload-labs靶场下载地址:https://github.com/c0ny1/upload-labs/

第一次下时候,没下最新版的,结果我又重新到GitHub去下载了更新后的最新版


(注:此博文从绕过原理方法入手,下篇博客将从upload-labs刷关入手)



后端黑名单绕过

特殊可解析后缀

原理:就是加上数字等,但是可以被当做原来的类型进行执行

黑名单规则不严谨,在某些特定环境中某些特殊后缀仍会被当作php文件解析

$deny_ext = array(".php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx",".jsw",".jsv",".jspf",".jtml",".jSp",".jSpx",".jSpa",".jSw",".jSv",".jSpf",".jHtml",".asp",".aspx",".asa",".asax",".ascx",".ashx",".asmx",".cer",".aSp",".aSpx",".aSa",".aSax",".aScx",".aShx",".aSmx",".cEr",".sWf",".swf",".htaccess");

编辑


利用过程:


盲猜准备的php20就不在范围内

编辑

编辑

 编辑


再获取webshell权限,即浏览器打开上传的图片马地址

 接下来的工作交给蚁剑和菜刀了

编辑





.htaccess解析

原理:上传.htaccess文件到指定的目录,重写当前目录下的解析规则,上传图片马,打开图片马所在位置将以新指定的方式解析运行


参考:【文件上传.htaccess重定解析规则】phpstudy apache本地配置.htaccess进行url重写


.htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置,即可以用来控制所在目录的访问权限以及解析设置,通过设置可以将该目录下的所有文件作为php文件来解析。

通过.htaccess文件,可以帮我们实现:自定义404错误页面、网页301重定向、允许/阻止特定的用户或者目录的访问、改变文件扩展名、禁止目录列表、配置默认文档等功能。

.htaccess可以写入apache配置信息,改变当前目录以及子目录的apache配置信息




环境条件:

phpstudy+php5.6以下不带nts的版本

upload-labs-Pass04

服务器和服务商没有禁止.htaccess文件

Allow Override All

LoadModule rewrite_module modules/mod_rewrite.so #rewrite模块为开启状态



利用过程:

第一步:准备好.htaccess文件内容:

第一种:会误伤正常文件,容易被发现

<IfModule mime_module>
AddHandler php5-script .gif          #当前目录下,只针对gif文件解析成php执行
SetHandler application/x-httpd-php    #当前目录下,所有文件都被解析成php执行
</IfModule>


或者直接

<IfModule mime_module>

AddType application/x-httpd-php .gif

</IfModule>



第二种:能精确解析,不容易被发现

<FilesMatch "1.gif">             #1.gif是自己将要上传执行的文件名
SetHandler application/x-httpd-php   #在当前目录下,如果匹配到1.gif文件,则被解析成PHP代码执行
AddHandler php5-script .gif          #在当前目录下,如果匹配到1.gif文件,则被解析成PHP代码执行
</FilesMatch>


第二步:准备好图片马

在1.gif中写入了(测试一下能否执行)

<?php phpinfo();?>   

#一般都写入

<?php @eval($_POST['密码'])?>


准备好 

编辑




第三步:先上传 .htaccess文件,再上传图片马

编辑

编辑

上传写了代码的要执行文件(图片马)

编辑



第四步:获得webshell权限,即复制图片地址并粘贴到地址栏,进行访问:

编辑

编辑

 编辑编辑


尝试用到 .htaccess文件试试

编辑

编辑




将.htaccess文件尝试改为:

<FilesMatch "^a.jpg$">
setHandler application/x-httpd-php
</FilesMatch>  编辑

 未被执行为PHP类型

编辑

试了很多不同的.htaccess文件代码,最终还是没能以PHP代码执行,可能环境条件不满足

编辑







大小写绕过

原理:对大小写不敏感,上传大小写混写的php进行绕过
 

利用过程:

后端一般验证后缀字符串是否和‘php’相等(前提是没有将你传入的字符串进行小写转换后再对比),大写字母和小写字母肯定不相等,利用这一特性绕过

windows对大小写不敏感,所以.PhP文件被当成php文件解析)



准备文件: 

编辑


编辑

当检测不全面的时候,还是有各种混乱进行绕过

编辑


编辑





重写(双写)绕过

原理:被删除一个黑名单字符后,形成新的预期类型


利用过程:

服务端将黑名单的后缀名替换为空,但是仅替换一次,所以可以上传.pphphp后缀,替换后就成了.php

(被拦截的shell.php,上传不了的这个我就不一直试了)

它会删掉第一个php

(中间第二个是错误的讲解)

编辑

 编辑


正确的应该是第三个

编辑







‘.’或者空格点绕过

原理:还是相当于是绕过了黑名单


(不考虑直接把空格或者点加在后缀的末尾,因为在PHP文件后加..,会被windows删掉空格或者点)


第一步:打开burpsuite进行代理拦截

第二步:把shell.php文件改为shell.png,然后将其上传

第三步:用burpsuite进行抓包修改,把后缀改为php,并在后缀后面加上空格或者点

第四步:获取webshell权限,即浏览器打开上传的图片马地址

第五步:使用工具(蚁剑/菜刀)进行连接等操作


利用过程:

shell.png------>shell.php.(空格). ------>shell.php.(空格和点被去除了)---->shell.php(windows会自动去掉末尾的空格和点,这个可以在自己的桌面上新建的试)


我实验的环境:在主机上安装的靶场,burpsuite安装在虚拟机上

我遇见的问题是:burpsuite抓包,无法抓住文件的上传,并将其修改

现象是:拦截不到包,但是访问其他联网的网站,可以拦截到

我分析得出的结论是:upload-labs的上传是在本地完成,不需要再访问另一台电脑上的burpsuite代理服务器

编辑

 编辑

编辑







::$$DATA绕过

原理:

NTFS交换数据流(Alternate DataStreams,简称ADS)是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都可以存在多个数据流。

换言之:

在windows下,在php文件名后面加上::$DATA系统会把它当作文件流来进行处理,不会检测文件的后缀名,且保留::$DATA之前的文件名以及后缀

(不考虑直接在windows上新建,因为::已经被windows所禁止输入)

编辑

加::$DATA的操作过程和前面的加‘.’和空格是一样



第一步:burpsuite拦截

第二步:文件上传

第三步:抓包修改,后缀改为php,并在后缀后面加上::$DATA

第四步:获取webshell权限,即浏览器打开上传的图片马地址

第五步:使用工具(蚁剑/菜刀)进行连接等操作




利用过程:

shell.png------>shell.php.(空格). ------>shell.php.(空格和点被去除了)---->shell.php(windows会自动去掉末尾的空格和点,这个可以在自己的桌面上新建的试)





配置解析漏洞

原理:

解析漏洞是web容器将其他格式的文件解析为可执行脚本语言,这一特点会被利用进行其他操作


触发点:

常见的解析漏洞的web容器有IIS (5.x-6.x 7.5)、Nginx、Apache


利用:

目录解析,文件解析,其他默认可执行文件格式等。


以Apache解析漏洞为例

Apache解析文件的规则是从右到左开始判断解析,如果后缀名为不可识别文件解析,就再往左判断。比如test.php.a.b的“.a”和“.b”这两种后缀是apache不可识别解析,apache就会把test.php.a.b解析成test.php。


影响版本:

Apache 1.x
Apache 2.2.x


查看Apache版本:

方法一:

如果安装的phpstudy集成环境,那这个就简单了

打开phpstudy面板首页就能看到

编辑


方法二:

打开Apache\bin目录,复制绝对路径

用命令提示符进入到Apache\bin中,再执行下面语句查看Apache版本信息:

httpd -v

编辑


或者直接在Apache\bin执行命令提示符

(按住shift键,同时点击右键,点击Open in Windows Terminal)

 然后会直接在当前目录执行

编辑

再输入以下代码查看版本

.\httpd.exe -v

编辑



我的版本已经Apache2.4,已经不存在上面的解析漏洞了

但是操作不能少



第一步:新建一个Apache无法正确解析识别的文件

(存在解析漏洞的版本会将这个软件识别为a.php文件执行)

编辑



第二步:在这个文件里面写入执行语句

编辑



第三步:获取wheshell权限,即访问这个文件所在的位置

(老生常谈又是你)

编辑

编辑




【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。