Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >通读审计之AACMS

通读审计之AACMS

作者头像
FB客服
发布于 2020-03-25 13:54:20
发布于 2020-03-25 13:54:20
68900
代码可运行
举报
文章被收录于专栏:FreeBufFreeBuf
运行总次数:0
代码可运行

0x00 前言

其实没什么好说的,该cms不是主流的cms,但是感觉该cms是一篇很好的MVC框架的例子,故记录下来。给大家分享一下自己代码审计的经验。

Cms下载地址:http://www.mycodes.net/45/4324.htm

0x01 MVC框架的了解

首先我们需要对该cms进行通读代码,来具体了解一下该网站的结构,如何访问到某个模块,某个分支。否则就算我们挖到漏洞,也找不到利用点。

老样子,我们从 index.php 来进行代码审计。

上来 require 一个文件,我们打开该文件看看里面是怎么玩儿的。

OK,可以看到定义了五个类。我们回到index.php继续往下读取。

调用 core 类的 instance 静态方法。随后调用init成员方法。我们看一下 instance 方法到底干了一些什么事情。

该方法返回实例化了自己本身的对象,从开发的角度来讲,这种叫做:单例模式。

随后我们看一下 init 成员方法。

等等…,我们没记得PHP给我们提供$_G这个全局变量啊,这个变量从哪而来的?真的是莫名其妙。。。

不卖关子了,其实这里我们忽略一个问题,当我们new对象时,会进入到构造方法。来进行初始化操作。构造方法在php中有两种格式。1. __construct 魔术方法 2. 将成员方法定义为类名。

好,init方法我们先放到这里不谈,先把构造方法的流程搞清楚早说。Mmp。一步一步来,不然裤裆可能会扯掉。。。

找不到__construct,那么构造方法就是 core 成员方法了。

33-36行都做了初始化操作,我们依次来看一下。

可以看到第64行又进行了包含操作。我们这里打开该文件看一下代码到底是怎么玩儿的。

定义了好多个函数。OK,我们回来继续往下审计,我们把目光放在83行的赋值操作。

因为看方法名凭自己感觉就是。XFF头。。。

被preg_match正则表达式所限制,有点可惜。

_init_env方法大致了解了我们继续往下读取看一下_init_config方法

注意第122行,将包含进来的$_config赋值给$_G[‘config’]了。

OK,我们继续往下通读_init_input方法。

我们跟进 daddslashes 方法来看一下。

只是将php中的addslashes封装起来了。

回头我们继续看_init_output方法

定义ob缓冲机制等。

转回大头来,,我们最开始是想要通读init方法,现在已经千里之外了,当然我们要回去继续通读init方法了。。

附张图吧,别忘了 =.=

好,跟着逻辑继续往下走。

我们看到182行$this->db = DB::object(‘db_mysql’),调用DB类的object静态方法。

我们看一下该方法做了一些什么。

OK,$this->db这个成员变量,是实例化db_mysql类的对象。随后调用 do_mysql 对象的set_config与connect方法:

我们跟进这两个方法做了什么处理

293行图中注释,调用了 _dbconnect 方法,跟进它。

下面我们继续去通读

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$this->_init_memory();     $this->_init_session();     $this->_init_setting();     $this->_init_misc();

这四句代码

OK,我们继续读取最后一行代码,include template(‘index’);

成功显示出主页信息。

0x02 代码运行后的观察

我们发现我们读完这个框架之后,依旧是没看懂什么玩意啊?就一个Hello World。

其实入口点不止index.php这一个文件。还有admin.php与article.php啊

这两个入口点是我观察php运行后的结果之后观察出来的。我们打开主页到处随便点点就可以发现其他入口点。

将鼠标指到“以a标签解释出来的 文章”,可以看到浏览器底部有跳转到article.php文件

我们打开 article.php 来看一下代码是怎么写的。

如图:

我们看一下 view 文件中的代码是怎么玩儿的。

只是简单的查询一下article表中的信息。

我这里通过表结构自己搭建一个SQL语句进行测试。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
INSERT INTO pre_article(catid,title,username,`from`) VALUES(2,'Heihu577代码审计记录','Heihu577','T00ls');

运行结果:

再来看看 admin.php 文件中代码的流程。

可以看到20行多包含了./source/function/function_admincp.php文件,我们打开看看是怎么玩儿的。

定义了好多方法。

经过25-28行的处理,没有登录的情况下强制性把我们定义到member模块下,而member所对应的文件是admin\admin_member.php 如图:

进入改文件可以再次看到,之前所强制定义的$_REQUEST[‘operation’]是在这里进行判断走分支的。如图:

不同的$_REQUEST[‘operation’]所对应不同的代码。

我们当前在没有登录的情况之下,我们会进入到$operation=login分支

用来进行登录验证的。我们可以打开admin.php文件看一下默认是否是登录框框。

OK,逻辑没有问题,当我们登录成功之后传入 ?action=member&operation=edit则会进入到另一个管理页面,我们可以看一下。

OK,admin.php入口文件的代码处理逻辑我们也搞清楚了,接下来我们开始挖掘漏洞。

0x03 宽字节注入漏洞

当我们安装该CMS时,我们可以注意到数据库字符集默认是GBK。而GBK可以导致宽字节注入漏洞,进行逃逸单引号的保护。

因为该cms模块比较少,我这里就只审计admin.php入口文件所对应的模块了。

在路径为 \admin\admin_member.php 的 php文件中。

虽然$_POST已经被daddslashes函数进行过滤引号,但是当前处于GBK编码,我们可以用POST提交Payload:进行报错注入出user()函数返回信息。

漏洞验证结果:

0x04 后台万能密码登录漏洞

我们虽然可以通过该注入点拿到管理员的账号密码,但是我们可以看一下它的密码规则。

可以说是非常强悍了!虽然我们可以注入出来管理员密码,但是解密也是非常的繁琐。既然我们有管理员登录处的注入点,那就构造出一个万能密码出来吧。

通过程序代码我们组织成中国汉字来理解。

首先查询数据库中有没有该username字段,如果有,则继续往下判断。

这里我们可以提交 POST:username=heihu%df ‘ or 1=1 # 来查询到管理员的记录。但是后面又进行验证password字段,而password字段是查询到的username那条记录的值,我们无法获取。其次md5加密后又拼接上了盐再次进行md5加密,盐是salt字段,也是数据库中所获取的。所以我们只好使用UNION注入来查询出自己构造的表单。

以POST方式发送构造Payload:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
formhash=eba3baf7&admin_username=heihu%df' UNION SELECT 1,2,0x6433356536363866373765653433326661646534396637643763666436616434,4,1,6,7,8,9,10,11,12,13 -- &admin_password=3&loginsubmit=%26%23160%3B%C8%B7%B6%A8%26%23160%3B

漏洞验证结果:

SQL原理解析:

(从1看到4对应着看,一部分是php代码执行过程,一部分是sql语句构造过程)

0x05 urldecode导致的注入漏洞

漏洞文件在:\admin\admin_misc.php,如图代码执行逻辑:

$title受到urldecode函数处理,我们知道单引号之前是被转义过的。如果我们这样使urldecode函数进行处理“urldecode(‘%27 ‘)”,则函数会返回一个单引号。这个单引号是函数返回的,并不是外来的,所以不会被daddslashes影响。当我们在浏览器上直接提交?title=%27时,浏览器会自动给我们urldecode一下再发送出正常的请求,那么我们提交的值就是:’(一个名副其实的单引号),就会被daddslashes函数影响。所以我们提交url编码的百分号+27(%2527),就会成功让函数达到“urldecode(‘%27 ‘)”的效果。从而逃逸daddslashes函数的影响。

废话不多说了,构造Payload:

http://127.0.0.1/Hacking/aacms/admin.php?action=misc&operation=custommenu_add&title=a%2527%20or%20updatexml(1,concat(1,user(),1),1)—%20&url=b,1),1)—%20&url=b)

漏洞验证结果:

成功得到user()函数返回值。

0x06 二次注入漏洞

还是0x03的注入点,如果站点没有开启报错,那么我们就需要另找途径了。

代码审计一定要亮起自己的钛合金狗眼,否则可能忽略一些小细节,一下子看到一个二次注入。。。

我们再来看一下这个代码处理逻辑。

所以我们把构造的单引号放到$url上,不能放在$title上,否则代码运行到select之后我们的引号打乱了sql语句的结构,代码就不能往下走了。

构造Payload:

http://127.0.0.1/Hacking/aacms/admin.php?action=misc&operation=custommenu_add&title=12&url=1%2527,1),(user(),1,1)%20—%20,(user(),1,1)%20—%20)

二次注入查询地址:

http://127.0.0.1/Hacking/aacms/admin.php?action=misc&operation=custommenu

漏洞验证结果:

1、进行发送Payload请求。

2、进行二次注入

0x07 XSS漏洞

还是 0x03 的注入点,我们知道它有过一个插入请求,并且我们成功的挖掘到了二次注入漏洞,但是我们很清楚的知道,我们的$_GET、$_POST、$_FILES等只经过addslashes函数过滤,并不会过滤HTML标签。

我们可以看到文件的41-55行。

将查询出来的信息直接显示给前端。

虽然说插入点在input标签的value值中,PHP做了addslashes函数处理,但是这是在前台,(’)就算被转移成(\’),HTML也不会忽略他,还是把他当成实打实的引号解析。

构造Payload:

http://127.0.0.1/Hacking/aacms/admin.php?action=misc&operation=custommenu_add&title=%22%20onclick=%27alert(1)%27%3E&url=%22%20onclick=%27alert(1)%27%3E

漏洞验证结果:

1、发送Payload

2、查看是否成功xss

0x08 结束语

虽然审计出来的漏洞多在后台,但是以学习为主,先不管怎么样自我感觉这套CMS比较适合初学者白帽子往MVC框架方面的延伸。其次挖掘漏洞的一些过程我也能把我表达能力最强的一部分给大家表达出来,记录了一些非常经典的漏洞合集,让大家能够读懂。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
记一次审计 xiaocms 的过程
周末在家刚吃完晚饭,基友 DM 叫我一起来审计 xiaocms 系统,也不知道他是受到啥刺激了。正好,除了 Code Review 公司项目代码及框架代码,未审计过其他系统,就当拿来练手了。
信安之路
2018/08/08
3K0
记一次审计 xiaocms 的过程
实战技巧 | 知其代码方可审计
终于来到了代码审计篇章。希望看了朋友有所收获,我们通常把代码审计分为黑盒和白盒,我们一般结合起来用。
辞令
2020/09/17
1.7K0
实战技巧 | 知其代码方可审计
通读审计之DOYOCMS
首先大家看到我文章的标题,我这里所谓的“通读审计”就是把整个代码审计过程一字不差的记录下来。因为审计过很多CMS,也看过很多代码审计文章,大多数都是把漏洞点提一下然后文章结束,对于不懂MVC的审计者来说,看其他人代码审计文章,很多细节问题搞不明白(因为我自己也是从那里过来的),所以读起来不是太舒畅,自己学习起来也有点吃力,尤其到MVC框架一块。然后这把就是给大家分享一下我个人的整个代码审计过程,以及如何发现漏洞,如何自己构造语句等等。这次审计的cms是DOYOCMS建站系统,因为我们学校使用的该系统,就随便拿一套过来记录吧。也是给自己做个记录,给大家分享个人经验。
FB客服
2020/04/14
1K0
通读审计之DOYOCMS
代码审计(二)——SQL注入代码
当访问动态网页时,以MVC框架为例,浏览器提交查询到控制器(①),如是动态请求,控制器将对应sql查询送到对应模型(②),由模型和数据库交互得到查询结果返回给控制器(③),最后返回给浏览器(④)。
黑伞安全
2022/01/26
7K0
代码审计(二)——SQL注入代码
记一次对wuzhicms的审计
文章首发于奇安信社区:https://forum.butian.net/share/1126
亿人安全
2022/06/30
5920
记一次对wuzhicms的审计
代码审计:BlueCMS v1.6
发现公众号上好像没什么代码审计的文章,于是便把之前自己的笔记拿过来给大家分享一下,这个cms基本已经被玩烂了,但是还是有一些学习意义的。
鸿鹄实验室
2021/04/01
1.9K0
代码审计:BlueCMS v1.6
小白的代码审计初始之路
代码审计是在一个编程中对源代码旨在发现错误、安全漏洞或违反编程约定的项目。 说人话就是找它这些代码中可能存在问题的地方,然后看它是否真的存在漏洞。(博主小白,可能存在问题,请见谅)
用户9691112
2023/05/18
7020
小白的代码审计初始之路
代码审计| 从今天起,做一个精致的多米咖!
0x00 背景 在看CNVD漏洞库的时候发现有师傅发了某cms前台SQL注入漏洞,通过查阅漏洞描述可知道存在问题的参数是cardpwd,便开始尝试对该版本的cms进行审计。 源码下载地址:https
漏斗社区
2018/03/28
1.4K1
代码审计| 从今天起,做一个精致的多米咖!
基于ThinkPHP的CMS审计思路
yxtcmf6.1是一个基于thinkphp3.2.3的cms,19年3月份发布,用来练习代码审计是个不错的选择。
FB客服
2020/07/15
2.2K1
基于ThinkPHP的CMS审计思路
海洋 CMS 代码审计过程分析
最近在学代码审计,但总是学了忘,所以把思路步骤全写下来,便于后期整理。这次审计的是 seacmsV10.1,但是审完返现 V11 也有同样的漏洞。先放 payload:
信安之路
2020/09/28
2K0
海洋 CMS 代码审计过程分析
一次CMS源码审计与漏洞发现
最近一直在学习《[红日安全]代码审计》系列中关于php代码中存在的问题,从中受益匪浅。从中选取了一个DM企业建站的cms用作练习,在还原了练习中的漏洞后尝试对其进行代码审计,运用近期学习到的php审计知识点对该cms进行了审计,并很幸运的发现了一枚远程代码执行漏洞。接下来详细记录了漏洞发现的过程与大家交流学习。
FB客服
2019/07/14
1K0
近期关于代码审计的学习总结
这一小段时间对一些 CMS 进行代码审计,和一些 CVE 分析复现。总结一下几个案例的问题产生原因和利用思路。由于能力有限,挖掘到的都并非高危漏洞,旨在总结一下思路。仅是个人的一些理解,有些表述不当的地方,还请各位斧正。
信安之路
2019/06/24
1K0
看代码学渗透 Day5 - escapeshellarg与escapeshellcmd使用不当
-----------------------------------------------------------------------------------------
用户1631416
2018/09/14
2K0
看代码学渗透 Day5 - escapeshellarg与escapeshellcmd使用不当
SeaCMS v10.1代码审计实战
seacms是一个代码审计入门级的cms,比较适合我这种小白玩家来学习,如果有什么错误欢迎指出。
FB客服
2020/07/15
1.4K0
SeaCMS v10.1代码审计实战
PHP代码审计-zzcms
通过全局搜索,发现 xml_unserialize() 对 parse() 函数进行了调用
亿人安全
2023/10/24
5480
PHP代码审计-zzcms
蝉知 CMS5.6 反射型 XSS 审计复现过程分享
最近在深入学习反射 XSS 时遇到蝉知 CMS5.6 反射型 XSS 这个案列,乍一看网上的漏洞介绍少之又少,也没有详细的审计复现流程。虽然是 17 年的漏洞了,不巧本人正是一个喜欢钻研的人。这个 CMS 引起我极大的兴趣。在基本没有开发经验的前提下,目前只对 MVC 有一点很浅显的了解后我打算啃下这块硬骨头,并且这也是我第一个较完整的审计复现的一个 CMS,前前后后用了接近 3 天的时间才差不多搞懂触发的流程,对我来说可以说是非常艰难了,幸运的是我还是啃了下来。
信安之路
2019/09/25
1.3K0
蝉知 CMS5.6 反射型 XSS 审计复现过程分享
审计思路学习笔记
比如有函数名 move_uploaded_file() ,接着看调用这个函数的代码是否存在为限制上传格式或者可以绕过
红客突击队
2022/09/28
1.3K0
审计思路学习笔记
代码审计之YXCMS
本次教程来自YanXia,转载请注明作者信息,博客地址http://www.535yx.cn,感谢
YanXia
2023/04/07
1.4K0
代码审计之YXCMS
XDCTF2015代码审计全解
WEB2是一个大题,一共4个flag,分别代表:获取源码、拿下前台管理、拿下后台、getshell。
phith0n
2020/10/15
1.6K0
【代码审计】iZhanCMS_v2.1 漏洞分析
爱站CMS是一款开源免费的CMS内容管理系统,具有开放灵活,安全高效,简洁美观!本次针对iZhanCMS_v2.1版本进行代码审计,发现代码中存在的安全漏洞。
Bypass
2019/07/08
7100
【代码审计】iZhanCMS_v2.1 漏洞分析
相关推荐
记一次审计 xiaocms 的过程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验