最近隔离闲的无聊,实在没什么事情就开始想练练审计
想了想因为一直都非常好奇 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
即可