任意文件下载 ,原理其实还是和上一次任意命令执行差不多的
原理:
下面贴一段代码,这是在一个存在任意文件下载的网站上边下载下来的真实环境的代码
If ($_GET["file"]){
# Get the filename to be downloaded
#----------------------------------
$file = $_GET["file"]; // 获取文件名字
$file = stripslashes($file); //反转义
$file = htmlspecialchars($file); //实体化html字符
$mainpath = "$path$file"; //到这里就没有继续过滤了,过于相信传进来的参数,就在这里
$filename = "./file_info/descriptions/$file.0"; //传值的时候传入自己想查看的文件的名字,比如 /etc/passwd
$newfile = fopen($filename,"r"); //于是就产生了,任意文件下载的漏洞
$content = fread($newfile, filesize($filename));
fclose($newfile);
$fileinfo = explode ("|",$content);
$fileinfo[0] ++;
# Save the new file count
#------------------------
$content = implode("|", $fileinfo);
$newfile = fopen($filename,"w");
fwrite($newfile, $content);
fclose($newfile);
# Translate file name properly for Internet Explorer
#---------------------------------------------------
if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")){
$file = preg_replace('/\./', '%2e', $file, substr_count($file, '.') - 1);
}
演示:
首先还是先Google一下 ,inurl:(download.php?down=)
一如既往,一搜一大把
一个一个的测试,更改参数,换成/etc/passwd 那个网站提示下载这个文件,那个网站就存在任意文件下载
好麻烦啊,又得一个一个的试试,但是,干这个又不得不耐着性子找下去,当然,有自动化工具....
但是,你想当一个脚本小子么?! 我不太想当 .... 当然,我不会完全决绝脚本的使用 ...
因为脚本是辅助,我们才是ADC!!!
不要让脚本当成ADC ,你是辅助!!!
然后正题,找到后,先下载下网站的index.php 看看,万一有数据库的账号密码呢
当然,需要一个一个目录试一试,/index.php ../index.php ../../index.php
找到了!
下载下来打开看看
就十几行的代码,没有用户名和密码,然后就是这几个文件啦 ,第一个测试后没用,根本打不开,换下目录还是不行,测试
第二个目录,
直接贴过来当参数 ,不对 , 然后../includes/defines.php 成功,下载下来可以看到里边包含一个cinfiguration.php
一般都是配置文件,里边看看有没有敏感信息
打开查看内容
然后呢,简单的判断下,都是本地登录 ,并不能远程访问,找后台后麻烦 ,还不一定能找到 ,我去干点别的事情
不再这上边浪费时间了