zoukankan      html  css  js  c++  java
  • xdcms_3.0.1 | 代码审计

    这周的审计任务,这次审计 xdcms 。

    下面就开始审计之旅。

                                                                                环境搭建

    审计CMS,首先环境搭建。

    1,虚拟机/本机win7 32/64位,用wamserver或者phpstudy搭建环境。

    2,xdcms_3.0.1 源码(已分享链接)放到WWW目录下面

    3,安装,访问(  127.0.0.1/xdcms_3.0.1_utf8/xdcms_3.0.1_utf8/install  )。一路选择下一步,直到设置页面,创建数据库......安装完成。

    点击同意,开始安装。

    输入数据库账号密码(可以选择新建个数据库 xdcms ,不新建也可以,输入数据库的名称即可),点击进行下一步进行网站简单的设置

    可以看到安装成功,请牢记您的管理员账户:xdcms , 密码 xdcms,进入后台管理。

                                                                                代码审计

    首先可以拿出来 代码审计工具--Seay源代码审计系统进行自动审计,先看一下哪里容易出问题,从而可以不那么盲目。

    发现 xdcms 的目录很简单,包括后台 admin ,cache , data , 系统system ,上传uploadfile。

    自动扫描出了171个可疑漏洞。

    SQL注入漏洞

    现在先熟悉一下流程,可以看到能够进行注册登录。

    那就注册一个账号orange,密码orange。

     

     上面看到密码是进行了两次md5加密,接下来看 一下代码

    /system/modules/member/index.php

    上面的代码很容易读懂,函数是register_save(),注册保存。首先POST接收传过来的参数,判断是不是为空。

    66行密码进行两次md5加密,可以看到并没有进行明显的过滤,但是在50行和72行看到了过滤函数safe_html(),下面就开始追踪一下这个函数,

     

    function safe_html($str){
        if(empty($str)){return;}
        $str=preg_replace('/select|insert | update | and | in | on | left | joins | delete |\%|=|/*|*|../|./| union | from | where | group | into |load_file
    |outfile/','',$str);
        return htmlspecialchars($str);
    }

    分析一下这个过滤函数,只是简单的把上面看到的 select ,insert,update 等等替换成了空 。

    在 safe_html 处虽然过了个SQL注入的敏感词,还过滤了=和*,但是没有考虑SQL注入敏感词的大小写,这里只过滤了小写,那么我们用大写绕过,这里过滤的=和*,我们可以使用不带*和=的常规保存SQL注入语句

    这里利用报错注入来进行测试,bestorange' or updatexml(1,concat(0x7e,(selEct concat(username,0x23,password) frOm c_admin),0x7e),1) #&password=bestorange

    payload:username=bestorange' or updatexml(1,concat(0x7e,(selEct concat(username,0x23,password) frOm c_admin),0x7e),1) #&password=bestorange&password2=bestorange&fields%5Btruename%5D=bestorange&fields%5Bemail%5D=bestorange&submit=+%E6%B3%A8+%E5%86%8C+

    可以看到上面注入出来了管理员的账号密码,然后就可以进行登录。

    因为这个CMS过滤的时候基本上是用到的是 safe_html() 函数,所以这个CMS的其他地方注入的利用方式都是一样的,利用方法像上面一样,问题都是出在 safe_html() 函数。

    再看下登录处的SQL注入

    路径:/system/modules/member/index.php

    95行--127行

    上面的程序也不是很难读,可以看到POST接收过来登录的账号密码,然后通过 safe_html() 函数 进行过滤,判断是否为空,进而在103行直接带入数据库查询。

    这里仅仅通过 safe_html() 函数进行了过滤,所以很显然是存在注入的。

    payload:username=bestorange'or updatexml(1,concat(0x7e,(selEct concat(username,0x23,password) frOm c_admin),0x7e),1) #&password=bestorange&submit=+%E7%99%BB+%E5%BD%95+

    getshell

    通过上面注入得到的管理员的账号密码登录后台,成功进入后台管理系统,在  系统设置-->网站配置-->上传设置-->文件/图片上传格式限制。

    添加php文件类型,然后进行上传即可。

    XSS漏洞?

    这里看一下xss漏洞,链接(http://127.0.0.1/index.php?m=form&c=lists&formid=7)(http://127.0.0.1/index.php?m=form&c=lists&formid=8)

    这里是可以进行留言的,常规老套路,首先进行黑盒测试,输入:"><script>alert(a)</script><",可以看到是没有任何反应的,接下来去数据库看一下,表-->c_message,看到都被转义了

    同样,上传简历的地方也是被转义了,简历的表-->c_resume,现在这里是找不出xss漏洞的,直接去分析下代码。

    /system/modules/form/lists.php

    留言的模块,就不详细解释了,直接看73--83即可。

    输入的值遍历输出,重点在82.83行,看到了过滤函数:safe_replace(safe_html($value)),safe_html()这个函数上面讲过,追踪safe_replace()函数,

    /system/function/fun.inc.php

    33--46行可以看到,过滤和转义了%20,%27,%2527,*,",',;,<,>,{,},\。

    可以看到过滤以及转义的全面,基本上构造不出来这样的payload,因此我个人认为这里的xss漏洞是不存在的,如果你有好的payload,欢迎交流。

    再看一下会员中心存在xss漏洞吗?

    注册个账号orange用户,进行登录。

    -->修改会员资料<--

    输入:"/><script>alert("orange")</script><",是没有任何反应的,这个时候查看一下源代码。可以看到是被转义了。因为整个cms调用的是safe_replace()函数,因此这个xdcms是不存在xss漏洞的。

    源码链接(链接: https://pan.baidu.com/s/1pKApFWv 密码: vx74)

    本文链接(http://www.cnblogs.com/Oran9e/p/7944859.html),转载请注明。

    任重而道远!

  • 相关阅读:
    Object: Date对象——时间的设置和返回
    CSS基础知识-常用属性(updating)
    图像
    一些基础名词及含义(更新中)
    HTML常用元素合集(更新中)
    HTML小贴士-tips1
    HTML&CSS基础(一):基本格式(更新中)
    vue 轮播图显示三张图片,图片居中显示
    移动端 rem自适应布局 (750的设计稿)
    vue axios 在ios 中不执行回调(vconsole中status为0)
  • 原文地址:https://www.cnblogs.com/Oran9e/p/7944859.html
Copyright © 2011-2022 走看看