记一次久草CMS审计


最近隔离闲的无聊,实在没什么事情就开始想练练审计

想了想因为一直都非常好奇h站的运行模式,于是目标就锁定在了h站的程序上。

这种视频站的源码能教出名字的其实一共也没几个,之前还有苹果和海洋,现在好像这两个已经因为国内打击盗版而死亡(转入地下)了。所以我其实也就只知道剩下的久草了。

说实话以前我以为久草也是视频站程序,只不过被巧妙的利用罢了。然而当我第一次打开他的官网论坛的时候就被震惊了。

光明正大的ghs

(本图为官方提供模板)

不管了,把源码下下来开始审计

这里下了最新的版本


│─adminx //后台目录
│─assets //后台样式表
│─class //后台栏目
│─Jccms_json //存储数据
│─JCSQL //视频数据
│─lib //数据模块
│─static //播放器文件
│─template //模板
│─index.php //入库文件

(官方提供的结构说明)

拿到源码,放到phpstudy里,首先去安装,然而没有找到常见的install目录。看了看说明发现根本就不用安装,这个时候就疑惑了。不用安装,那它的数据是存在哪里的呢?

直访问首页,发现视频什么的都有了,猜测是直接向远程获取的(这也解决了视频存储问题,我就说那些小电影站不可能把文件全放本地)

开始干

首先用Seay审计打开

先自动审计一下,按照预置规则来,应该不会漏下什么

首先要找漏洞,我们就要找“大”的。所以理所当然的找前台漏洞,想了想这网站的性质来说也不会有什么交互,直接找注入吧。找了一会发现整个程序根本就是无SQL化。SQL注入扑街~~

不过在找到时候发现了它用户认证的方式

/JCSQL/Admin/Security/AdminUser.php

这个文件里存放了用户账号密码,充当了数据库的作用。以文本形式保存不会出现SQL注入的风险,以PHP的形式存在,又能避免被下载。妙啊~

然后看看你第三行,顾名思义是IP过滤。

后台里还真就有这个功能

那么问题来了,当我们修改信息的时候其实就是读写了文本。而文本又是以php存在的。那么,如果我们插入适当的payload,其实就可以直接形成任意文件读写。好了,我们再来看一看。IPPASS的传值

好的,直接字符串写入了。并没有其他的安全函数进行过滤。这个程序本身存在一个过滤函数。

经典防护

(好像还有一个什么函数,结果写文章时找不到了)

那么我们来利用这个任意文件读写漏洞。我们的目标是AdminUser.php文件,首先通过浏览器访问,看看是否403之类的。访问后出现空白,说明可以任意用户访问,但是无显示内容(代码就三行,也真没显示的东西)

回到后台,在白名单处填写我们的payload

结合代码原来的样子,我们应该闭合第一个单引号,然后插入我们的代码,再闭合后面的单引号和括号之类的。

大致来说就是这么个格式‘);payload; //‘127.0.0.1

加入我们想写入一个文件:

‘);$myfile = fopen(“1.txt”, “w”) ;$txt = “奥里给”;fwrite($myfile, $txt); //‘127.0.0.1

写入完成后再访问一下AdminUser.php,让代码执行。然后访问同目录下的1.txt即可看到奥力给

到这里基本就完了,因为这个cms太小了,结构简单并且巧妙,没什么好玩的了。

最后再来一个反射xss

自动审计搜索出三个XSS可疑点

我们点进去第一个看一看

可以看到再script的src里直接输出了GET参数Play

那么同样的直接构造即可,姿势太多了

访问这个文件的时候只要加上参数XXXX.PHP?Paly=payload

即可