文件名截断漏洞原理分析
来源:互联网 发布:淘宝直通车删除计划 编辑:程序博客网 时间:2024/04/29 11:29
文件名截断漏洞原理分析
By HelloWeb 2017-3-7
如下的PHP程序中(例子1),存在文件名被操控的漏洞,其代码如下:<?php $name=$_GET['name']; $filename=$name.'.php'; include $filename;?>例子1:文件名被操控的PHP程序
例子1的基本程序逻辑就是通过用户输入的文件名还包含对应文件后缀为PHP的文件,如果在文件当前目录下包含一个PHP文件为a.php,代码如下:
<?php print("OK! The right file.<br>");?>
同时,在该目录下还包含一个文件名为secret.txt文件,其中包含的信息如下:This is a secret file.
根据例子1的程序逻辑,如果输入URL:http://127.0.0.1/test/t1.php?name=a,则输出结果为:OK!The right file.
对于攻击者而言,当前想通过该漏洞来读取secret.txt中的信息,但是该文件不是PHP程序,要想达到目标,就要利用文件名字截断漏洞了。
第一种方式:%00
%00表示字符串结尾,如果变量$name的最后是%00,那么变量$filename中的”.php”将被截断。
如果输入URL:127.0.0.1/test/t1.php?name=secret.txt%00,则输入结果为:Thisis a secret file.显然,文件内容读出来了。攻击者控制了所有输入的文件,不再受到后缀”.php”的影响了。
当然,%00截断方式只能在PHP5.3以前,并且GPC关闭的情况下才能够成功。本例在PHP5.2.17版本上测试通过。
第二种方式:英文句号和反斜杠截断
在windows7系统下,长于226个英文句号会出现截断效果,测试代码如下:<?php$name=$_GET['name'];$str='';for($i=0;$i<=226;$i++){ $str.='.';}$name=$name.$str;$filename=$name.'.php';include $filename;?>
同样可以测试句号加斜杠的情况,在Windows7环境下句号加斜杠组合为113组。
注意:这种方式在PHP5.3以后的版本中都已经得到了修复。本用例在PHP5.2.17版本上测试通过。
第三中方式:问号截断(?)
问号截断漏洞是针对远程文件包含的情况。在PHP的配置文件中,打开远程文件包含许可,即“allow_url_include = On”。
测试代码如下:<?php$name=$_GET['name'];$filename=$name.'.php';include $filename;?>
当输入的文件名包含URL时,问号截断则会发生,并且这个利用方式不受PHP版本限制,原因是Web服务其会将问号看成一个请求参数。
测试POC:http://127.0.0.1/test/t1.php?name=http://127.0.0.1/test/secret.txt?,则会打开secret.txt中的文件内容。本测试用例在PHP5.5.38版本上测试通过。- 文件名截断漏洞原理分析
- 00截断,上传漏洞。
- ereg() 截断漏洞
- Ms-05039漏洞原理分析
- 常见WEB漏洞原理分析
- 文件包含漏洞原理分析
- JAVA /00文件路径截断漏洞与分析for windows并对.NET比较
- JAVA /00文件路径截断漏洞与分析for windows并对.NET比较
- MS09-002 IE7 漏洞原理分析
- Heartbleed心脏出血漏洞原理分析
- IIS短文件名漏洞
- IIS短文件名泄露漏洞
- IIS短文件名漏洞简介
- IIS短文件名漏洞修复
- IE7 0Day 漏洞分析及防御原理(图)
- PHP文件包含漏洞原理分析和利用方法
- PHP文件包含漏洞原理分析和利用方法
- PHP文件包含漏洞原理分析和利用方法
- c++ 结构体的嵌套使用
- uva 12661 funny car racing dijkstra变形
- poj 2886 二分+树状数组
- tomcat启动超时以及启动之后打开网页报404错误的解决方法
- 新手怎样学ACM
- 文件名截断漏洞原理分析
- 剑指Offer(14)______链表中倒数第k个结点
- 效果演示
- oracle 常用日期函数 (sysdata、日期格式)
- 自己的sublime配置
- 剑指Offer(15)______反转链表
- java自定义注解实例
- BZOJ P1211:[HNOI2004]树的计数
- SQL SERVER重置自动编号列(标识列)