banner

PHP应用&文件上传&函数缺陷&条件竞争&二次渲染&黑白名单&JS绕过

Scroll down

基础知识:

  1. 没有文件解析的安全问题,格式解析是一对一的(不能jpg解析php)
    换句话来说有解析错误配置或后缀解析漏洞的时候才能实现格式差异解析,图片格式解析为脚本格式

  2. 文件上传安全指的是攻击者通过利用上传实现后门的写入,连接后门进行权限控制的安全问题,对于如何确保这类安全问题,一般会从原生态功能中的文件内容,文件后缀,文件类型等方面判断,但是漏洞可能不仅在本身的代码验证逻辑中出现安全问题,也会在语言版本,语言函数,中间件,引用的第三方编辑器等存在缺陷地方配合利用。另外文件上传也有多个存储逻辑,不同的文件存储方案也会给攻击者带来不一样的挑战


测试环境安装参考:

https://github.com/ffffffff0x/f8x
https://github.com/fuzzdb-project/fuzzdb
https://github.com/sqlsec/upload-labs-docker
0、下载上述资源
1、docker安装
apt-get update
wget -O f8x https://f8x.io/
wget -O f8x https://f8x.io/ && mv –force f8x /usr/local/bin/f8x && chmod +x /usr/local/bin/f8x
f8x -d
git clone https://github.com/fuzzdb-project/fuzzdb.git –depth 1
git clone https://github.com/sqlsec/upload-labs-docker.git
2、进入项目文件夹
cd upload-labs-docker
3、一键部署运行
docker-compose up -d
docker-compose config

upload-labs-docker知识点:

1、前端JS绕过问题
如何判断是否是前端验证呢?
首先抓包,如果上传文件的时候还没有抓取到数据包,但是提示文件类型不正确的话,那么这个多半就是前端JS校验了,通过抓包,替换jpg为php即可绕过



2、.htaccess(中间件配置错误解析问题)
.htaccess是修改解析配置的文件
AddType application/x-httpd-php .png
借助配置让.png文件帮助AddType application/x-httpd-php当php执行
先随意上传然后抓包,修改上传文件名为.htaccess,内容为AddType application/x-httpd-php .png。然后再上传png后门图片,既可进入绕过



3、MIME类型
Content-Type:image/png

gif包
Content-Disposition: form-data; name=”file”; filename=”1.gif”
Content-Type: image/gif

php包
Content-Disposition: form-data; name=”file”; filename=”1.php”
Content-Type: application/octet-stream

png包
Content-Disposition: form-data; name=”file”; filename=”mind-map.png”
Content-Type: image/png

这个是检测你MIME类型的,先上传png格式,然后抓包修改文件1.png为1.php即可绕过
通过文件类型判断文件后缀



4、文件头判断
GIF89a是为gif头部开头
‰PNG是为PNG头部开头

先通过010 editer在后门前面加上对应的文件头,上传后门后再修改对应的MIME类型,即可绕过

通过文件头判断文件后缀



5、黑名单-过滤不严
无递归逻辑,只检测一次,没有循环,pphphp

上传1.pphphp即可绕过

通过文件后缀判断文件后缀
1.黑名单
检测上传的文件后缀是不是在黑名单里
2.白名单
检测上传的文件后缀是不是在白名单里



6、黑名单-过滤不严
系统大小写敏感属性

上传1.phP即可绕过,window不区分大小写,linux区分大小写,需要特别注意

通过文件后缀判断文件后缀



7、低版本PHP小于5.3.4,GET-%00截断
自动解码一次
/var/www/html/upload/x.php%00

可以先做测试,repeater先发一个文件看看他返回的php版本
然后直接上传后门,抓包后缀修改为php,在第一排header写上POST /?road=/var/www/html/upload/a.php%00
截断他后面默认的上传路径没就会把文件名替换为a.php,就可以绕过了



8、低版本POST-%00截断
手工解码一次
../upload/a.php%00 二次解码

可以先做测试,repeater先发一个文件看看他返回的php版本
然后直接上传后门,抓包后缀修改为php,在下面body写上./upload/a.php%00,然后把%00进行convert selection ——> url ——> url decode,需要把%00进行url解码才能成功截断,和浏览器的解析有关系

url上面的那个%00浏览器会自动解码一次

但是在post下面的%00需要手动解码一次才能识别



9、黑名单-过滤不严
php3

上传1.phP即可绕过,window不区分大小写,linux区分大小写,需要特别注意
可以使用fuzz里面的字典后缀去跑,看看哪个能绕过

通过文件后缀判断文件后缀



10、逻辑不严-条件竞争
访问即创建(访问就会触发代码,新建一个文件写后门)
‘);?>

上传不断发包
使用burp的intruder,然后使用null payload模式,continue infinitely

请求不断发包
也是使用burp的intruder,然后使用null payload模式,continue infinitely

错误逻辑:先上传,后判断
正确逻辑:先判断,后上传



11、二次渲染
先搞个正常图片,上传导出渲染后的图片
对比保留部分,在保留部分添加后门代码
最后利用提示的文件包含执行图片后门代码



12、函数缺陷
move_uploaded_file 函数漏洞

1.php/.

保存为1.php/.即可绕过



13、代码审计-数组绕过
—————————–174283082921961
Content-Disposition: form-data; name=”save_name[0]”

http://2.php/
—————————–174283082921961
Content-Disposition: form-data; name=”save_name[2]”

gif

其他文章
请输入关键词进行搜索