fnmatch函数绕过
DVWA安全等级高
代码解读
防御源码中最关键的一行
if(!fnmatch("file*",$file)&&$file!="include.php")
当文件既不是"include.php"(包含include.php文件)也不是"file*"(文件名file开头)时才抛出错误,反之意思,如果文件名符合其中一个条件既可以。
思路
第一个条件很难满足,所以我们的目光转移到达成第二个漏洞
page=file:///C:/xampp/htdocs/dvwa/php.ini
刚好满足"file*"(文件名file开头)
操作
构造url
http://192.168.0.103/dvwa/vulnerabilities/fi/page=file:///C:/xampp/htdocs/dvwa/php.ini
成功读取了服务器的配置文件
利用php的file协议
注意
在最新的DWVA新加了一个impossibol难度(没有漏洞)
让我们看看他是怎么写的
写法
if(!="include.php"&&$ file ! "file1.php" &&"file2.php")
白名单写法真的是屡试不爽啊
PHP内置协议
PHP带有很多内置URL风格的封装协议,可用于类似fopen()、copy()、file_exists()和filesize()的文件系统函数。
File:// 访问本地文件系统 htt[p:// 访问HTTP(s)网址 ftp:// 访问FTP(s)URLS
php:// 访问各个输入/输出流(I/o streams) zlib:// 压缩流
data:// 数据(RFC2397) ssh2:// Secure Shell 2 expect:// 处理交互式的流
glob:// 查找匹配的文件路径模式 有时候对方程序员对协议进行限制我们可以多尝试尝另外的
具体协议请参照http://www.php.net/manual/zh/wrappers.php
练习
从网上下载copyright 2007-2011 易酷CMS Some Rights Reserved 版本到本地测试。
漏洞利用过程:
http://www.anquan.us/static/bugs/wooyun-2014-061639.html