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),转载请注明。
任重而道远!
xdcms_3.0.1 | 代码审计的更多相关文章
- auxblogcms1.0.6|代码审计
这周的审计任务,两天前的任务呀~拖延症呀~ 这次审计一个博客----auxblogcms1.0.6,网上也有所记载,我下面会做个总结. axublog是一款php个人博客系统,小巧强大的PHP+MyS ...
- axublogcms1.0.6|代码审计
这周的审计任务,两天前的任务呀~拖延症呀~ 这次审计一个博客----auxblogcms1.0.6,网上也有所记载,我下面会做个总结. axublog是一款php个人博客系统,小巧强大的PHP+MyS ...
- 熊海cms v1.0 完全代码审计
很久以前写的,写这个东西更多的是为了说明我自己的一个思路,即按照程序功能点进行代码审计, 这样经过一段时间训练,熟悉了某种功能的正确和错误实现方法,遇到类似的代码就可以很快看出是否有问题了 --- 0 ...
- 米酷CMS 7.0.4代码审计
工具:seay源代码审计系统 源代码:网上很好找,这里就懒得贴上了,找不到的话可以给我留言 后面一段时间会深入学习安全开发,代码审计,内网渗透和免杀,快快成长. 审这个系统是因为在先知上看到一篇审它老 ...
- ref:web security最新学习资料收集
ref:https://chybeta.github.io/2017/08/19/Web-Security-Learning/ ref:https://github.com/CHYbeta/Web-S ...
- Web-Security-Learning
Web Security sql注入 MySql MySQL False 注入及技巧总结 MySQL 注入攻击与防御 sql注入学习总结 SQL注入防御与绕过的几种姿势 MySQL偏门技巧 mysql ...
- 机器学习算法之K近邻算法
0x00 概述 K近邻算法是机器学习中非常重要的分类算法.可利用K近邻基于不同的特征提取方式来检测异常操作,比如使用K近邻检测Rootkit,使用K近邻检测webshell等. 0x01 原理 ...
- ZAM 3D 制作简单的3D字幕 流程(二)
原地址:http://www.cnblogs.com/yk250/p/5663907.html 文中表述仅为本人理解,若有偏差和错误请指正! 接着 ZAM 3D 制作简单的3D字幕 流程(一) .本篇 ...
- ZAM 3D 制作3D动画字幕 用于Xaml导出
原地址-> http://www.cnblogs.com/yk250/p/5662788.html 介绍:对经常使用Blend做动画的人来说,ZAM 3D 也很好上手,专业制作3D素材的XAML ...
随机推荐
- Terraform 自定义provider 开发
内容来自官方文档,主要是进行学习自定义provider 开发的流程 开发说明 我们需要开发的有provider 以及resource 对于resource 我们需要进行crud 的处理,同时还需要进行 ...
- oracle-sql模式匹配
下面是条件 like与regexp_like条件 下面是函数 regexp_instr regexp_replace regexp_substr select * from tis_ft_user_i ...
- 设置 sideload Outlook Add-ins
上期,我们讲到了用前端技术去建立一个outlook add-ins 我们今天来讲解一下怎样测试一个sideload outlook add-ins. 1. 我们需要登录Outlook在Office 3 ...
- Hi3518EV200音频相关
1.sample程序可以录音,音频格式为G711A.G711U.G726.ADPCM: 2.ADPCM找不到音频播放器 3.G711格式海思添加了4字节头0x00 0x01 0x0a 0x00,普通播 ...
- day8 大纲
01 昨日内容回顾 文件操作 文件操作的流程: 1,打开文件创建文件句柄. 2,对文件句柄进行操作. 3,关闭文件句柄. 读, r r+ rb r+b read() 全部读取 read(n) 读取一部 ...
- mysql之 Percona XtraDB Cluster集群线程模型
Percona XtraDB集群创建一组线程来为其操作提供服务,这些线程与现有的MySQL线程无关.有三个主要线程组: 一.Applier线程 Applier线程应用从其他节点接收的写入集.写消息直接 ...
- dependencies、devDependencies、webpack打包 的区别与联系
为什么要在dependencies.devDependencies中声明依赖? 答:保证任何人在(或者你自己在其他设备上)对这个项目进行修改(开发)时,通过npm install就能获取同样的开发环境 ...
- Spring Cloud(Dalston.SR5)--Hystrix 断路器-合并请求
在 Spring Cloud 中可以使用注解的方式来支持 Hystrix 的合并请求,缓存与合并请求功能需要先初始化请求上下文才能实现,因此,必须实现 javax.servlet.Filter 用于创 ...
- WyBox使用shell脚本检测io口是否正常
1. 修改mt7620a.dts文件,把gpio管脚复用全都定义为通用gpio /dts-v1/; /include/ "mt7620a.dtsi" / { compatible ...
- 5V与3.3V电平互转
参考: http://blog.sina.com.cn/s/blog_7880f98301014fmj.html