[代码审计]XYCMS留言板V1.7

代码审计方面小东还不算很深入,所以去站长之家找了一个低版本号的XYCMS留言板程序来审计一下,往往这种低版本的适合入门(适合我)

0x00 XYCMS留言板简介

程序下载地址:

http://down.chinaz.com/soft/37797.htm

简介:

XYCMS留言板是以php+MySQL进行开发的php留言板源码,软件为普通的留言板可广泛应用于企业网站等需要留言板的网站中进行使用。

环境要求:

方便验证码显示,开启GD库,在php.ini中找到extension=php_gd2.dll,把前面分号去掉,然后重启apache就好了

XYCMS留言板定位:

普通留言板,也有人可能会吐槽,功能太简单了,但作为留言板,这个功能已经足够用了,市场上很多留言板带用户自行管理删除,头上传像或者其他什么功能的,我只能说那程序定位就不是留言板了,是BBS了,但是又不是BBS,为了追求,大可安装论坛程序,但是与留言板区别就大了。

更新:

新增加参数过滤规则,防SQL注入


0x01 开始安装

DYBOY20180614152038.png


0x02 开始代码审计

简单浏览安装完成后的界面后,本身程序是留言板功能,大致估计会有XSS和sql注入,从这两个大头入手。接下来就直接以漏洞类型来分类讲述。


0x03 XSS

由于程序对于用户名等字段输出没有做过滤,那么存在存储性XSS是必然的。
位于 index.php
源代码

验证:
A. 用户留言

B. 管理员审核

会执行三次alert();

说明在后台也是没有过滤输出的

C. 前台展示


此外程序中的在add_book.php中注意到用户的IP参数是直接输出的,同时找到程序中Lib/Function/fun.php获取ip的代码段

发现程序也是直接获取并没有做过滤,那么这个ip也可以伪造XFF,形成XSS

如果ip有写入数据库,那么还有SQL注入的风险,简单看看。


0x04 信息泄漏

程序不存在重装漏洞,但是在/install/目录下存在如下预制文件,且没有提醒用户删除,文件中包含了部分预先数据,以及数据表字段等信息


0x05 SQL注入

简单看了有关数据写入的代码,发现基本没有过滤…

那么存在SQL注入,就找找可以在游客权限下可利用的
首先看看管理员后台登陆的验证文件
/system/loginpass.php

<?php
//loginpass.php
session_start();
require 'include/globle.inc.php';
//登录验证
if(strtolower($_POST["checkcode"])==strtolower($_SESSION["randval"])){
  unset($_SESSION["randval"]);//释放session中的变量
}else{
  unset($_SESSION["randval"]);
  ok_info('index.php','验证码输入有误');
  exit();
}
if(isset($_POST["admin"]) && isset($_POST["password"]) && isset($_POST["checkcode"])){
  $m_name=xy_rep(trim($_POST["admin"]));
  $m_pwd=md5(md5($_POST["password"]));
  $login_ip=getIp();
  $sql="select * from admin_user where u_name='".$m_name."' and u_pwd='".$m_pwd."'";
  $result=$db->query($sql);
  if(!mysql_num_rows($result)==0){
    $_SESSION["m_name"] = $m_name;
    $db->query("UPDATE admin_user SET login_nums=login_nums+1 where u_name='".$m_name."'");
    $login_info=array(
       'u_name'=>$m_name,
       'login_date'=>strtotime(date('Y-m-d')),
       'login_ip'=>$login_ip
    );
    $db->insert("admin_login_log",$login_info);
    $db->close();
    ok_info('xycms.php','恭喜您,登陆成功!');
  }else{
    ok_info('index.php','帐号或者密码有误');
    exit();
  }
}
?>

好家伙,可以看到对验证码及时做了销毁,所以不存在暴力破解漏洞

可以看到密码u_pwd是做了MD5()加密,所以此字段无法注入(提示:当md5(,true)时,可以有ffifdyop),trim()函数用于去掉参数两边的空格,可不考虑,$m_name有一个xy_rep()函数,去看看

//位于/Libs/Function/fun.php
function xy_rep($str){ 
return str_replace(array('#', '@', '\'','or'),'', $str);
}

其只是做了简单的替换,这样我们尝试绕过,替换单引号之后根本无法注入,cnm

再看看session.php

<?php header("Content-type:text/html;charset=utf-8");  ?>
<?php
error_reporting(E_ERROR | E_WARNING | E_PARSE);
session_start();
if($_SESSION['m_name']=="")
{
echo "<script language='javascript'>"; 
echo "alert('操作延时或者无权限操作,请先登陆后继续操作!');";
echo "location='index.php';"; 
echo "</script>";
exit;
}
?>

必须要登陆才行,因此有这个文件引入的都先不考虑

小东翻看了一下啊,狗日的都做了权限控制,所以如果你是管理员的话,那么就可以注入了,比如上面的IP就没做过滤,可直接注入,没有错误回显,可在登陆记录中可查看IP地址,二次注入就可以了。


0x06 文件上传

程序中有一个编辑器,kindeditor,不存在文件上传漏洞,反而存在一个post数据型的反射性XSS,漏洞页面:

http://www.test.com/system/xyeditor/php/demo.php

利用该编辑器还可以利用作为我们自己的图床,美滋滋!

写一个form.html,这样我们就可以上传任意图片等文件,用于做我们的远程云盘!
form.html代码如下

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>
    <form method="POST" action="http://www.test.com/system/xyeditor/php/upload_json.php" enctype="multipart/form-data">
        <input type="file" name="imgFile" id="file">
        <input type="submit" name="submit" value="提交">
    </form>
</body>
</html>

即可上传图片,压缩包等文件


0x07 目录遍历

由于程序如上自带的编辑器

http://www.test.com/system/xyeditor/php/file_manager_json.php?path=Server/

直接访问会爆出网站绝对路径,有如下的文件目录遍历漏洞可利用

0x08 总结

这个程序的漏洞挺多的,适合初学者学习!有任何问题,请联系我QQ:1099718640

发表评论 / Comment

用心评论~

金玉良言 / Appraise
刺猬LV 1
2019-12-26 16:36
<script>alert(1)</script>测试

Warning: Cannot modify header information - headers already sent by (output started at /www/wwwroot/blog.dyboy.cn/content/templates/dyblog/footer.php:56) in /www/wwwroot/blog.dyboy.cn/include/lib/view.php on line 23