0
漏洞发现者:xY7[B.C.T]
漏洞组织:Bug.Center.Team-漏洞预警中心小组
程序名称:Yemao Studio系列产品
程序版本:ymGuestBook Version 2.x ,ymArticleFree Version 2.1.x , ymCMS v3.0.1 Free
程序厂商:http://www.yemao.net/
漏洞危害:中高
一,夜猫留言薄漏洞详情:
1,跨站漏洞:
漏洞页面:post.php,用户提交留言处存在跨站攻击安全隐患,漏洞代码入下:
<?
if ($_POST[’username’] == "" || $_POST[’pagetext’] == ""):
echo "<a href=javascript:history.back(1)>昵称和留言内容不能为空, 点击这里返回.</a>\n";
else:
post($_POST[’iconid’],$_POST[’username’],$_POST[’touser’],$_POST[’sex’],$_POST[’comefrom’],$_POST[’email’],$_POST[’qq’],$_POST[’homepage’],$_POST[’pagetext’],$_SERVER[’HTTP_USER_AGENT’],$_SERVER[’REMOTE_ADDR’]);
endif;?>
程序先判断用户名和留言内容是否为空,如不为空则通过post()函数进行提交,这里我们看到程序没有对我们提交的变量做任何过滤就直接引用了,那post()函数是怎么写的呢,看代码function.php:
function post($iconid,$username,$touser,$sex,$comefrom,$email,$qq,$homepage,$pagetext,$useros,$ipaddress){
global $dbname,$ymcity_gb_table,$ymcity_icon_table;
$dateline = time();
if ($iconid > "0"):
$iconsql = "SELECT iconpath FROM $ymcity_icon_table WHERE iconid=’$iconid’";
$iconresult = mysql_db_query($dbname, $iconsql);
$iconrow = mysql_fetch_array($iconresult);
$icon = $iconrow[’iconpath’];
else:
$icon = "";
endif;
$sql = "INSERT INTO $ymcity_gb_table (icon,username,touser,sex,comefrom,email,qq,homepage,dateline,pagetext,useros,ipaddress) VALUES (’$icon’,’$username’,’$touser’,’$sex’,’$comefrom’,’$email’,’$qq’,’$homepage’,’$dateline’,’$pagetext’,’$useros’,’$ipaddress’)";
mysql_db_query($dbname,$sql) or die ("留言发表失败!");
原来post()函数并没有过滤字符而是直接接受我们提交的变量,然后就通过定义的SQL语句插入到数据库里了,这样当从数据库里读出留言内容的时候我们的代码就可以被浏览器解析到,漏洞由此产生了!
漏洞利用:直接在留言处提交<script>alert(‘Test by xY7[BCT]’)</script>,主页即可弹出提示框。
2注入安全隐患
漏洞代码:reply.php
if ($_POST[’gbid’] == "" || $_POST[’password’] == ""):
echo "<a href=javascript:history.back(1)>密码不能为空, 点击这里返回.</a>\n";
else:
reply($_POST[’gbid’],$_POST[’password’],$_POST[’replyiconid’],$_POST[’replyname’],$_POST[’pagetext’]);
endif;?>
首先判断要回复的留言编号和密码是否为空,二者缺一不可,然后就用reply()函数进行提交,这里没有过滤$gbid这个变量.
利用条件:magic_quotes_gpc=OFF 时,提交http://xxx.con/ymguestbook/reply.php?gbid=1' and 1=1 or 2 /* 类似URL进行测试。
当magic_quotes_gpc=ON时,改变$gbid值类型,提交:http://xxx.con/ymguestbook/reply.php?gbid=a 类似URL,在服务器disliay_errors=ON时,有时可暴出网站绝对路径。
二,夜猫文章系统漏洞详情:
1,跨站漏洞:
漏洞页面:register.php
漏洞代码:
<?register($setting[user_reg_usergroupid],$_POST[username],$_POST[password],$_POST[email],$_POST[sex],$_POST[birthday],$_POST[homepage],$_POST[icq],$_POST[oicq],$_POST[race],$_POST[signature],$_POST[ipaddress],$_POST[realname],$_POST[realname1],$_POST[organization],$_POST[organization1],$_POST[country],$_POST[country1],$_POST[province],$_POST[province1],$_POST[city],$_POST[city1],$_POST[address],$_POST[address1],$_POST[zip],$_POST[phone],$_POST[fax],$_POST[idnumber],$_POST[referrerid]);
?>用一个专门的函数register()来进行提交,那我们就看看这个注册函数怎么定义的,打开function.php看到如下代码(代码太长这里只给出关键的语句):$sql = "INSERT INTO $ymcity_user_table (usergroupid,username,password,email,sex,birthday,homepage,icq,oicq,race,experience,money,signature,joindate,ipaddress,realname,realname1,organization,organization1,country,country1,province,province1,city,city1,address,address1,zip,phone,fax,idnumber,referrerid) VALUES (’$usergroupid’,’$username’,’$password’,’$email’,’$sex’,’$birthday’,’$homepage’,’$icq’,’$oicq’,’$race’,’$experience’,’$money’,’$signature’,’$timenow’,’$ipaddress’,’$realname’,’$realname1’,’$organization’,’$organization1’,’$country’,’$country1’,’$province’,’$province1’,’$city’,’$city1’,’$address’,’$address1’,’$zip’,’$phone’,’$fax’,’$idnumber’,’$referrerid’)";
mysql_db_query($dbname,$sql);
漏洞利用:在个人网站里输入:<script>alert(document.cookie)</script>即可弹出当前用户cookie。
2注入漏洞:原理跟留言薄相似,代码也相似,当magic_quotes_gpc=OFF ,可以通过闭合单引号后加注释符进行测试。
三,ymCMS跨站漏洞:
由于该CMS加密了全部的后台文件以及全部的函数文件,所以不能有效的发掘更多的安全漏洞,但是注册页面register.php还是存在跨站漏洞
漏洞代码:
<?if(isset($_POST[’action’]) && $_POST[’action’] == "adduser"){
$birthday = $_POST[’b_year’]."-".$_POST[’b_month’]."-".$_POST[’b_day’];
$success = register($setting[’user_reg_usergroupid’], $_POST[’username’], $_POST[’password’], $_POST[’email’], $_POST[’question’], $_POST[’answer’], $_POST[’sex’], $birthday, $_POST[’homepage’], $_POST[’icq’], $_POST[’oicq’], $_POST[’race’], $_POST[’signature’], ’0’, $_POST[’style’], $_POST[’ipaddress’], $_POST[’realname’], $_POST[’realname1’], $_POST[’organization’], $_POST[’organization1’], $_POST[’country’], $_POST[’country1’], $_POST[’province’], $_POST[’province1’], $_POST[’city’], $_POST[’city1’], $_POST[’address’], $_POST[’address1’], $_POST[’zip’], $_POST[’phone’], $_POST[’fax’], $_POST[’idnumber’], $_POST[’referrerid’]);?>通过函数register()进行提交,这里没有过滤用户输入的信息。
漏洞利用:在注册页面邮箱地址栏输入:test@163.com<script>alert(document.cookie)</script>,当浏览该注册资料时,即可谈出当前用户cookies。
漏洞修补:
1,用htmlspecialchars()函数来过滤用户输入的文本例如夜猫留言薄这样过滤htmlspecialchars($pagetext)
2,用类似代码将各类数字型变量强制整形化防止注入及暴路径:
<?if(!is_number($id))
$id=intval($id);
?>
3,用addslashes()函数过滤字符型变量。
个人建议,夜猫系列是一组没有安全防护意识的程序,在没有完全开源的情况下出现如此多的安全隐患,如果以后开源,将会给使用者带来更大的损失,建议不使用此类程序。
[1] |