这周的审计任务,这次审计 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),转载请注明。

任重而道远!

xdcms_3.0.1 | 代码审计的更多相关文章

  1. auxblogcms1.0.6|代码审计

    这周的审计任务,两天前的任务呀~拖延症呀~ 这次审计一个博客----auxblogcms1.0.6,网上也有所记载,我下面会做个总结. axublog是一款php个人博客系统,小巧强大的PHP+MyS ...

  2. axublogcms1.0.6|代码审计

    这周的审计任务,两天前的任务呀~拖延症呀~ 这次审计一个博客----auxblogcms1.0.6,网上也有所记载,我下面会做个总结. axublog是一款php个人博客系统,小巧强大的PHP+MyS ...

  3. 熊海cms v1.0 完全代码审计

    很久以前写的,写这个东西更多的是为了说明我自己的一个思路,即按照程序功能点进行代码审计, 这样经过一段时间训练,熟悉了某种功能的正确和错误实现方法,遇到类似的代码就可以很快看出是否有问题了 --- 0 ...

  4. 米酷CMS 7.0.4代码审计

    工具:seay源代码审计系统 源代码:网上很好找,这里就懒得贴上了,找不到的话可以给我留言 后面一段时间会深入学习安全开发,代码审计,内网渗透和免杀,快快成长. 审这个系统是因为在先知上看到一篇审它老 ...

  5. ref:web security最新学习资料收集

    ref:https://chybeta.github.io/2017/08/19/Web-Security-Learning/ ref:https://github.com/CHYbeta/Web-S ...

  6. Web-Security-Learning

    Web Security sql注入 MySql MySQL False 注入及技巧总结 MySQL 注入攻击与防御 sql注入学习总结 SQL注入防御与绕过的几种姿势 MySQL偏门技巧 mysql ...

  7. 机器学习算法之K近邻算法

    0x00 概述   K近邻算法是机器学习中非常重要的分类算法.可利用K近邻基于不同的特征提取方式来检测异常操作,比如使用K近邻检测Rootkit,使用K近邻检测webshell等. 0x01 原理   ...

  8. ZAM 3D 制作简单的3D字幕 流程(二)

    原地址:http://www.cnblogs.com/yk250/p/5663907.html 文中表述仅为本人理解,若有偏差和错误请指正! 接着 ZAM 3D 制作简单的3D字幕 流程(一) .本篇 ...

  9. ZAM 3D 制作3D动画字幕 用于Xaml导出

    原地址-> http://www.cnblogs.com/yk250/p/5662788.html 介绍:对经常使用Blend做动画的人来说,ZAM 3D 也很好上手,专业制作3D素材的XAML ...

随机推荐

  1. msyql开启慢查询以及分析慢查询

    慢查询的用途是用来发现执行时间长的查询语句,以便对这些语句进行优化 [mysqld] #在这里面增加,其它地方无效 #server-id=1 #log-bin=master-bin slow_quer ...

  2. <---------------线程修改名字、得到名字及开启------------------>

    ThreadDemo: public class ThreadDemo extends Thread { public void run(){ System.out.println(getName() ...

  3. C# to IL 1 Introduction to Microsoft’s IL(MSIL 介绍)

    The code that we write in a programming language like C#, ASP+ or in any other .NETcompatible langua ...

  4. C#使用Xamarin开发Android应用程序 -- 系列文章

    Xamarin开发Android应用程序 利用Xamaria构建Android应用-公交发车信息屏 Xamarin版的C# SVG路径解析器 C#使用Xamarin开发可移植移动应用(1.入门与Xam ...

  5. Python_getter和setter方法

    当给属性赋值的时候,使用实例.属性=属性值的方式显然把属性暴露出来了,并且也无法对属性值进行限制检查,java中提供了setter和getter方法,那么python是如何做的呢?更多内容请参考:Py ...

  6. Git上传空文件夹的方法

    之前发现很多项目文件夹下又.gitkeep文件,不知道它的用处. 直到前段时间遇到一个问题,Git如何上传空文件夹? 默认情况下,Git不会上传本地空文件夹,如果有些特殊场合需要的话,一个简单的方法是 ...

  7. TypeScript 之 泛型

    https://m.runoob.com/manual/gitbook/TypeScript/_book/doc/handbook/Generics.html 泛型:可以支持多种类型的数据 泛型函数的 ...

  8. ThinkPHP5与JQuery实现图片上传和预览效果

    内容正文 这篇文章主要为大家详细介绍了thinkphp上传图片功能,和jquery预览图片效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 先上效果图: html和js代码如下: <!DO ...

  9. ELK入门以及常见指令

    ES的资源: https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.htmlhttps://w ...

  10. ASP.NET AJAX入门系列(5):使用UpdatePanel控件(二) UpdatePanel

    UpdatePanel可以用来创建丰富的局部更新Web应用程序,它是ASP.NET 2.0 AJAX Extensions中很重要的一个控件,其强大之处在于不用编写任何客户端脚本,只要在一个页面上添加 ...