PHP特定攻击.ppt
- 文档编号:1401953
- 上传时间:2022-10-22
- 格式:PPT
- 页数:99
- 大小:3.87MB
PHP特定攻击.ppt
《PHP特定攻击.ppt》由会员分享,可在线阅读,更多相关《PHP特定攻击.ppt(99页珍藏版)》请在冰豆网上搜索。
PHP特定攻击,王朋涛,深信服北京安全团队,整体框架文件包含代码执行变量覆盖总结,培训提纲,整体框架,PHP特定攻击主要包括文件包含、代码执行、变量覆盖三大部分:
文件包含:
服务器端利用PHP语句包含一个新的文件,但应用程序对用户输入过滤不当,从而导致该文件作为PHP代码执行;代码执行:
服务端PHP程序某些可执行代码的危险函数接受用户传递的参数,而服务端对用户输入过滤不当,导致可传递恶意代码并在服务器端执行;变量覆盖:
用户通过控制输入的变量名及变量值来对服务器端代码中的同名变量进行覆盖,服务器根据用户输入的参数而执行恶意代码。
整体框架,整体框架,文件包含,简介,本地文件包含:
服务器端通过用户体检的参数包含本地文件,但服务器端对用户提交的参数过滤不当,导致用户可以包含非正常PHP脚本文件;远程文件包含:
与本地文件包含类似,区别在于包含文件所在的位置不同,本地文件包含涉及的文件在用户访问的服务器端本地,而远程文件包含涉及的文件在另一台远程服务器。
文件包含本地,攻击原理流程图解实验解析寻找漏洞判断open_basedir是否设置探测利用漏洞防御测试工具,文件包含本地,原理服务器端脚本可以打开并包含用户可控的本地文件,但没有对用户提交的参数做过滤或者过滤不当,用户可以提交精心构造的参数,致使服务端程序打开或包含任意指定的文件,以此获服务器端敏感信息。
本地文件包含漏洞的形成,需要满足以下两个条件:
include等函数通过动态变量的方式引入需要包含的文件;用户能够控制该动态变量。
文件包含本地,流程图解:
文件包含本地,实例解析:
服务器端:
存在本地文件包含漏洞文件lfi.php代码如下(本节以此为例,除非做特殊说明):
其中include()语句包含并运行指定文件,但当遇到错误的时候include函数只会产生警告,脚本将继续。
客户端:
类似输入:
http:
/IP/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()等包含文件函数加载后将会执行。
利用局限性被测试网站必须存在有上传页面且该页面具有上传功能,诸如上传图片、文档页面。
必须获知上传文件在服务器端的路径(该限制在上传文档详细研究,本实验假设指定上传文件在服务器端的路径)。
文件包含本地,漏洞利用包含用户上传文件利用步骤首先,准备一个包含PHP的txt文件,本例为fortest.txt文件,如下其次,上传准备的txt文档即本例中fortest.txt文件,本实验假如事先直到上传文件在服务器端的绝对路径,如下图红框处,文件包含本地,漏洞利用包含用户上传文件利用步骤接着,包含fortest.txt文档并执行文件中的PHP代码,本例输入:
file=upload/fortest.txt,可以得出服务器执行了fortest.txt中的PHP代码,因此以探知存在本地文件包含漏洞,具体返回如下:
文件包含本地,漏洞利用包含用户上传文件利用步骤最后,接下来可以修改fortest.txt文档的代码,构造自己想要的攻击(比如构造Webshell)。
文件包含本地,漏洞利用包含伪协议原理包含伪协议即通过伪协议包含一些恶意代码,从而在服务器端执行。
伪协议不同于真实存在的协议如http:
/,https:
/,ftp:
/,而是为关联应用程序而使用的,常见的伪协议包括data、php等利用局限性服务器端支持对应的伪协议php.ini中allow_url_include设置为on,文件包含本地,漏洞利用包含伪协议利用步骤首先,Data协议用于访问数据,使用格式为:
data:
;base64,例如本例输入:
file=data:
text/plain,%00,从返回页面可以探知存在本地文件包含漏洞,具体如下:
文件包含本地,漏洞利用包含伪协议利用步骤其次,接下来可以修改file=data:
text/plain,%00中的代码,构造需要的攻击,具体详见webshell部分。
文件包含本地,漏洞利用包含日志文件原理包含日志文件即通过向日志文件导入恶意代码,接着服务器端应用程序在包含此日志文件,最终导致恶意代码执行。
利用局限性如果网站的访问量大的话,日志文件很可能很大,当包含一个这么大的文件的时候,PHP进程可能会僵死,但websever往往会滚动日志或每天生成一个新的日志文件,因此在凌晨时包含日志文件,将提高攻击成功性,因为此时的日志文件可能会非常小,同时由于默认的error.log记录信息不全,无法包含植入的恶意代码,因此选择包含access.log。
文件包含本地,漏洞利用包含日志文件利用步骤首先,读取http.conf文件,找到日志文件所在的目录。
http.conf一般会存在apache的安装目录下,在readhat系列里默认安装的可能为/etc/httpd、conf/httpd.conf;在windows系统下默认安装在conf/httpd.conf,例如输入:
输入:
file=./conf/httpd.conf,可以得知本实验error.log和access.log分别在logs/access.log、logs/error.log,具体如下红框处:
文件包含本地,漏洞利用包含日志文件利用步骤其次,把恶意代码植入access.log日志,直接通过url把恶意代码植入access.log日志时候,日志中显示的一些诸如空格、单引号等字符会被编码,这样的话包含日志文件不会执行,通过查询相关资料获知在一般情况下,就是借助代理工具,在发送的http请求中确保不包含connection头,那么请求原封不动的写入web日志,不会进行http编码。
因此使用burpsuite工具截获请求,并把恶意代码植入请求中,如下图红框处:
文件包含本地,漏洞利用包含日志文件利用步骤再次,查看服务器端access.log日志,可以得出access.log日志文件包含了植入的恶意代码,如下图红框处,文件包含本地,漏洞利用包含日志文件利用步骤最后,包含植入的恶意代码,输入:
s=phpinfo();&file=./logs/access.log,从返回结果可以探知存在漏洞,具体如下可以修改植入日志的代码,构造自己想要的代码进行进一步攻击,具体详见webshell部分,文件包含本地,包含/proc/self/environ文件包含/proc/self/environ文件的限制条件是必须有/proc/self/environ的访问权限,系统默认情况下是不允许对environ文件进行访问的,因此该方法不大实用,ubantu下该文件截图如下:
文件包含本地,包含上传临时文件PHP创建的上传临时文件,往往处于PHP允许访问的目录范围内,该临时文件的文件名是随机的,攻击者必须准确猜测出该文件名才能够成功利用该漏洞,因此文件名必须借助暴力破解,但临时文件具有时效性,过一段时间会自动销毁,因此实用性也不大。
文件包含本地,包含session文件包含session文件的条件比较苛刻,它需要攻击者能够控制部分session文件的内容,一般情况下远程用户是无法修改服务器端session文件的,因此该方法仅仅是理论具有可行性,实用性不强。
文件包含本地,包含其它应用创建的文件包含其它应用创建的文件比如数据库文件、缓存文件、应用日志等,需要具体情况具体分析。
文件包含本地,利用截断以上例子不使用截断技术,其实现实情况该技术经常遇到,本实验服务器端代码为:
,常见截断技术如下利用%00截断,同时php.ini中magic_quotes_gpc必须为off且受PHP版本限制(PHP5.4之后修改)。
利用操作系统对目录最大长度限制截断,目录字符串,在Windows下最大为256个字节、Linux下最大为4096个字节,超过最大值后的字符会被丢弃。
Linux下使用./、/,例如输入:
file=upload/fortest.txt./././././././././././././././,Windows下使用.、./、/,例如输入:
file=upload/fortest.txt.。
文件包含本地,利用截断利用%00截断首先,输入:
file=upload/fortest.txt,服务器端实际被包含文件实际是fortest.txt.php,因此不能执行,具体如下图红框处,文件包含本地,利用截断利用%00截断接着,输入:
file=upload/fortest.txt%00,从返回结果易知%00截断了后面的.php,具体如下图,文件包含本地,利用截断利用操作系统对目录最大长度限制截断这里以Windows为例,首先输入:
file=upload/fortest.txt,从返回页面可以得出结论,当输入的参数fortest.txt,被包含文件实际是fortest.txt.php,具体如下图红框处:
文件包含本地,利用截断利用操作系统对目录最大长度限制截断接着输入:
http:
/192.168.41.68/simple/lfi.php?
file=upload/fortest.txt/:
,返回结果易知截断了.php,具体如下图,文件包含本地,防御部署防火墙安全编程,文件包含本地,测试工具本地文件包含测试工具包括:
Fimaplfimap,文件包含本地,测试工具fimap使用命令格式如:
pythonfimap.py-u目标网站,例如输入:
pythonfimap.pyuhttp:
/192.168.41.68/simpl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- PHP 特定 攻击