Web渗透测试系列_X_PHP特定攻击1.整体框架2.文件包含3.代码执行4.变量覆盖5.总结培训提纲整体框架概述•php特定攻击主要包括:文件包含、代码执行、变量覆盖三大部分:–文件包含:即服务器端利用php语句包含一个新的文件时且应用程序对用户输入过滤不当,从而导致该文件作为php代码执行的一种漏洞。–代码执行:即用户端通过向服务器某些可执行代码的危险函数传恶意递代码且应用程序对用户输入过滤不当,从而导致传入的代码在服务器端执行的一种漏洞。–变量覆盖:即用户通过控制输入的变量名及变量值来对服务器端代码中的同名变量进行覆盖,从而导致服务器根据用户输入执行的一种漏洞。Php特定攻击框架图文件包含简介•本地文件包含:即服务器端包含用户可控的本地文件且服务器端对用户提交的参数过滤不当,以此来获服务器端敏感信息。•远程文件包含:与本地文件包含类似,区别在于包含文件所在位置的不同,本地文件包含包含的文件在用户访问的服务器端本地,而远程文件包含包含文件重定向到另一个服务器。本地文件包含•攻击原理•流程图解•实验例子•寻找漏洞•判断open_basedir是否设置•探测利用漏洞•防御•测试工具攻击原理•即打开并包含用户可控的本地文件且服务器端没有对用户提交的参数做过滤或者过滤不当,以此方法来获服务器端敏感信息或者服务器端脚本的源代码的一种技术。•利用文件包含漏洞,需要满足以下两个条件:–Included等函数通过动态变量的方式引入需要包含的文件;–用户能够控制该动态变量。流程图解实验例子•服务器端:–存在本地文件包含漏洞文件lfi.php代码如下(本节以此为例除非做特殊说明):,其中include()语句包含并运行指定文件,但当遇到错误的时候include只会产生警告,脚本将继续。•客户端:–类似输入:http://192.168.41.68/simple/lfi.php?file=fortest.txt。寻找漏洞•寻找漏洞主要从url中的.php文件名(如本例文件lfi.php)、参数名(如本例file参数)、参数值后缀(如本例参数值后缀.txt)三方面寻找:–.php文件名也有一定的含义(比如文件查看等),诸如folderview.php、authldap.php、application.php、index.php等。–参数的名称一般有一定的含义(比如文件、路径等),诸如templatefolder、file、path、controller、errPagePath、includePath、base_path、folder、language、dir等。–参数值后缀一般为.txt、.doc、.php等文件后缀。判断open_basedir是否设置•判断open_basedir是否设置分两种情况:–服务器返回错误信息,即php.ini中开启display_errors开关,客户端请求服务器端产生错误时,服务器端能够回显错误信息。–服务器不返回错误信息,即php.ini中关闭display_errors开关,错误信息就不再回显。判断open_basedir是否设置•服务器返回错误信息:–通过在url后面的参数值前不断添加../,直到跨越了open_basedir限定的目录即返回错误信息中出现“open_basedirrestrictionineffect”为止,否则可以断定没有设置open_basedir,本例中输入:file=../fortest.txt,页面返回如下判断open_basedir是否设置•服务器返回错误信息:–从上图红框中信息可以看出文件包含失败,原因是文件不存在,继续输入:file=../../fortest.txt,页面返回如下图所示:–从上图红框中信息可以看出文件包含失败,原因是open_basedir的限制,因此可以断定设置了open_basedir。判断open_basedir是否设置•服务器不返回错误信息:–此种情况只能假设open_basedir没有设置进行以下步骤,漏洞利用成功则open_basedir没有设置,否则设置了的可能性比较大。利用漏洞•包含用户上传文件•包含伪协议•包含日志文件•包含/proc/self/environ文件•包含上传的临时文件•包含session文件•包含其它应用创建的文件•利用截断包含用户上传文件•原理–包含用户上传的文件最好理解,这也是最简单的一种方法,用户上传的文件内容中如果包含了php代码,如果服务器没有过滤或者过滤不全那么这些代码被include()等包含文件函数加载后将会执行。•利用局限性–被测试网站必须存在有上传页面且该页面具有上传功能,诸如上传图片、文档页面。–必...