主页 > 网络知识 > MetInfo5.3.19代码审计思路(2)

MetInfo5.3.19代码审计思路(2)

 

MetInfo5.3.19代码审计思路

 

跟踪进去后发现通过get_one(‘sql语句’)进行数据库操作

跟进get_one()函数进入include/mysql_class.php,发现这是定义数据库操作方法的文件,增删改查都在这里

 

MetInfo5.3.19代码审计思路

 

get_one()函数构造好sql语句后,就调用$this->query($sql,$type)方法

 

MetInfo5.3.19代码审计思路

 

通过调试跟进可以看到$func=‘mysql_query’,然后执行了$query = $func($sql, $this->link),进行数据库操作

增删改也是跟查一样,构造好sql语句赋值给$sql,然后调用$this->query()方法进行数据库操作

 

MetInfo5.3.19代码审计思路

 

0×03 漏洞分析

了解了cms的传参过程和数据库操作过程后,就可以着手分析哪有漏洞了,首先是看一些明显的用户交互处(比如留言板,登录框)对应的代码段,然后用Seay源码审计系统的自动审计,验证漏洞。由于从前面了解了传参的过滤方式,所以基本可以确定留言板和登录框是没有注入和xss的,而前台只有留言板这一个交互点,所以就把目光放到后台上。

0×04 管理员密码重置

后台登录界面有个‘忘记密码’,对应的文件是admin/admin/getpassword.php

直接找update语句,找到了两处更新管理员表的地方,并且都是在$action=‘next4’后

第一处

 

MetInfo5.3.19代码审计思路

 

$abt_type的值可以通过post传参得到,所以很容易满足

从后往前推,update语句where的条件是admin_id=$cndes[2],而要执行update语句,要让

if($password=='')okinfo('javascript:history.back();',$lang_dataerror); 

if($passwordsr!=$password)okinfo('javascript:history.back();',$lang_js6);

这两个if语句为假,即要传入不为空的$password和与$password相等的$passwordsr,这两通过post传入也很容易满足

然后就是if($codeok)成立,

$codeok = $db->get_one("SELECT * FROM $met_otherinfo WHERE authpass='$cnde' and lang='met_cnde'");

$codeok的值要通过查询met_otherinfo表,而条件为authpass=$cnde,但是看到met_otherinfo表发现authpass字段没有数据

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!