Skip to content

文件解析相关的问题

文件解析其实是一个比较大的问题,包含很多的问题,在这里我们所说的文件解析包含常见服务器的解析漏洞和htaccess 以及截断的利用

Apache解析漏洞

全称是

使用module模式与php结合的所有版本apache存在未知扩展名解析漏洞

这个特性存在的原因和apache解析的方法有关系 Apache的解析方法:其从后面到前面反向解析文件格式,如果遇到不认识的后缀就直接跳过 例子: a.php.xx.aa 会被apache服务器解析为a.php 那他认识那些后缀名呢?我们可以在/conf/mime.types 文件当中进行查看 20211026231410 这个文件夹当中表明了apache能够识别的文件的类型
如果我们的给的后缀不在这个文件当中的话,就会存在解析的方法之类的问题

htaccess文件

如果识别列表当中不存在文件,但是htaccess文件指明了如何解析会怎么办?
一切还是htaccess文件在首先的位置
出现的情况
1.按照text/plain进行解析
2.出现500错误

结论

AddType application/x-httpd-php .php5 .jpg .png
SetHandler application/x-httpd-php
这两个命令是不一样的,第一个命令在本机上没有任何改变依旧是500的服务器错误
第二个命令在本机上是变成了 text/plain 并没有php进行解析

如何让上传的文件以php文件的形式进行解析

在Linux文件当中设置php的关联性
20211026231425 这样之后就会从raw文本变化为php文件了

测试 如果没有设置关联性直接上传了jpg文件和htaccess也是不行的

0x00截断问题

2020/2/7 11:29
利用的前提

php版本要小于5.3.4,5.3.4及以上已经修复该问题
magic_quotes_gpc需要为OFF状态

基础知识
url编码当中 %00 对应的是 口(不可见字符)
口(不可见字符) 对应的16进制编码就是0x00 背后的原理
在ascii字符表示当中,0x00代表的意思是截断,在相应的环境当中如果读取到ascii的00的话就意味着文件读取的截断,我们上传数据的时候是给的%00,这个字符会解析成0x00,从而造成截断

一些例子 当以get方式进行传输文件名的时候

<?php
$file_name = $_GET['file_name'];  
echo $file_name;
?>  

以这种方式进行提交数据是不可能会成功的,因为echo这个函数不存在0x00这个问题
存在这个问题的函数是
move_uploaded_file 函数和ereg函数
并且经过打印发现不存在问题,但是实际上是已经成功了
20211026231512

接下来会进入后面的逻辑当中就会出现文件0x00截断的问题
ereg函数
```

``` 20211026231529 可见就是因为在url编码当中使用%00,解码之后变为了0x00,0x00进入php之后就可以了
下面模拟这个过程,我们可以使用16进制编辑器对文件进行编辑最后结果当然是成功了
20211026231538

refer

http://www.91ri.org/7789.html
https://jochen-z.com/articles/1/php-operation-mode

https://www.smi1e.top/%E6%96%87%E4%BB%B6%E8%A7%A3%E6%9E%90%E6%BC%8F%E6%B4%9E%E6%80%BB%E7%BB%93/

Back to top