0x01 源码架构

屏幕快照 2019-11-03 下午4.56.56.png
采用单入口, protected中包含主要代码, 从目录上看,采用了MVC架构。

流程

单入口, 从index.php加载protected/core.php。常规思路,一堆目录define后run()起来。 接下来配置加载, 进入路由功能, 这里开始处理传入的参数了, 看看有没有全局过滤。
屏幕快照 2019-11-03 下午5.18.52.png
第57行有一个htmlspecialchars做html实体编码防xss
在看全局过滤设计在protected/include/lib/common.function.php下的in函数:
屏幕快照 2019-11-03 下午5.21.59.png
看上去也没什么问题, 这里貌似和另一个放过滤函数挺想…
对就是hdwiki里的:https://www.freebuf.com/vuls/170337.html这个洞, gpc在PHP 5.4之后是弃用的, 在5.4之前默认开启gpc, gpc就是说不过滤头, 产生头注入。 漏洞利用条件比较苛刻,但是这套cms的1.2.1貌似用php7以上也运行不起来。但是这个地方是来复现师傅们的漏洞的。
当当~

0x02 Cookie注入

这是ph牛这个系列的第一个漏洞,思想是把cookie中的yx_auth解密,既然是源码审计就有加密解密函数。这个地方用到了cookie, 所以说在代码审计中要看会话控制模块用到的是cookie或者session,要是cookie就有的玩了,我们可以找到加解密函数,就等于明文了,在看他从中怎么利用这些信息,构成cookie注入。
那么cookie在哪里呢?

会话控制始于登录, 用登录模块在: /yxcms/protected/apps/member/controller/indexController.php OK, 根据这个,找到了common.function.php中的set_cookie方法:

屏幕快照 2019-11-03 下午5.48.14.png

看到了加密方法cp_encode, 有了加密cp_encode和解密cp_decode我们就能够翻译cookie字段。
再来看cookie字段,yx_auth结构,这里其实就是登录模块中的这一句:

屏幕快照 2019-11-04 上午11.05.05.png

这里第152行的$cookie_auth, 这里可以看到,通过set_cookie,调用了cp_encode, 采用了默认的$key, yx。

因此$cookie_auth 可控, 可控之后,就是输出点:

我搜索了一下:屏幕快照 2019-11-03 下午6.00.19.png

有三个source点,原文中使用了第一个字段,也就是shopcarController中的方法:

屏幕快照 2019-11-03 下午6.03.26.png
大概是一个根据cookie查用户信息的, 27行有一个model->find操作, 应该就是mvc中model层的查询数据库了。

2\t2\tuser2\tuser2\t127.0.0.1, 再回到那个注入处find("id={$group_id}"), 占字符处,这里很明显也是一个整型注入。不过是套了一个壳。注入后边会说。

0x03 XSS

盲测一下有很多的XSS, 如留言本
屏幕快照 2019-11-06 下午5.12.38.png

在前台输入数据库时,我们存入的内容是进行了html转码的。
屏幕快照 2019-11-06 下午5.20.25.png
但是在读的时候可以发现转码了。再看后台代码。
根据url将该功能定位到了admin模块下extendfieldController控制器下的meslist方法。
屏幕快照 2019-11-06 下午5.26.40.png
屏幕快照 2019-11-06 下午5.26.40.png
**[11-6] yxcms1.2审计 - 图12 Model层拿回数据,在View层渲染时,解了html。
屏幕快照 2019-11-06 下午5.38.39.png