- IIS 6.0
- 后缀解析 /xx.asp;.jpg
- 服务器默认不解析;号及其后面的内容,相当于截断
- 目录解析 /xx.asp/xx.jpg(xx.asp目录下任意解析)
- 默认解析xx.asa xx.cer xx.cdx
- IIS 7.0-7.5 /Nginx<=0.8.37
- 在Fast-CGI开启状态下,在文件路径后加上/xx.php,即xx.jpg/xx.php 会被解析为php文件
- PUT漏洞
- 开启webDAV
- 拥有来宾用户,且来宾用户拥有上传权限
- 可任意文件上传
- windows特性
- windows不允许空格和点以及一些特殊字符作为结尾,创建这样的文件会自动重命名,所以可以使用xx.php[空格], 、xx.php. 、xx.php/ 、xx.php::$DATA上传文件
- winAPI与通配符的那些事
- 在windows环境下使用php时,php中的部分函数会调用2个底层windoowsAPI函数FindFirstExW(),FindFirstFile(),这两个函数对< > “ 三个字符做了特别的对待和处理
- 大于号 >等价于 通配符 ? 0次或者1次
- 小于号 <等价于 通配符 * 0次或者多次
- 双引号 “ 等价于通配符 . 匹配除换行符(\n,\r)之外的任意单个字符
- 以上得出,我们在windows下的php某些函数中,我们可以使用< > “ 来匹配一些文件名/目录名
- 这里的部分函数包括但不限于:
a. include()
b. Include_once()
c. Require()
d. Require_once()
e. Fopen()
f. Copy()
g. File_get_contents()
- IIS短文件名的那些事
- dos下存在这样的文件命名规则
a. 主文件名不能超过8个字符,拓展名不能超过3个字符
b. 所以也叫做8.3格式 - windows为了兼容MS-DOS,文件名超过8位,拓展名超过3位的文件都会对应的创建一个8.3格式的文件名,也称为短文件名
- 短文件名有以下2个特征:
a. 文件名只显示前6个字符,后续字符用~1代替。当存在多个文件名类似的文件时(文件名前6位相同,且后缀名前三位相同),数字1会进行递增。
b. 后缀只显示前三个字符 - 当我们访问某个存在的短文件名时,会返回404,而当我们访问某个不存在的短文件名时,会返回400,依据返回结果的不同,就可以进行逐位猜测
- Windows+apache+php文件/目录猜测
- dos下存在这样的文件命名规则
- Apache
- 后缀解析
a. Test.php.x1.x2.x3(x1,x2,x3为没有在mime.types文件中定义的文件类型)
b. Apache将从右往左开始判断后缀,若x3为非可识别后缀,则判断x2,直到找到可识别后缀为止,然后对可识别后缀进行解析
- 后缀解析
- Nginx
- Fast-CGI
a. 在fast-cgi关闭的情况下,nginx任然存在解析漏洞:在文件路径(xx.jpg)后面加上%00.php,即xx.jpg%00.php会被当做php文件来解析
- Fast-CGI