# 检测绕过

# 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

参考

  1. 什么是.user.ini 文件?
    答:.user.ini 文件相当于一个用户可以自定义的 php.ini 文件,但是有一点限制就是不能定义 PHP_INI_SYSTEM 模式,而在执行 php 代码之前,系统会对.user.ini 先做一个执行,然后才执行其他的 php 文件。
  2. 怎么利用.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

# PNG 二次渲染

# JPEG 二次渲染

更新于 阅读次数