第三处 后台sql注入
从前面两个分析 我发现的注入的地方就存在两个函数中get_list get_one
然后直接全局搜索这两个函数 看看什么地方调用
可以看到 在copyfrom.php中listing函数下调用了这个函数
然后我们网上分析 看看什么是可控的
主要传进去的就一个$where 和 $page
可以看到page会被intval()函数 转化为整数 所以我们不考虑它
我们看看where 在if内部 想要进入if 就需要通过GLOBALS获取到keywords
相当于就要传参嘛
然后在看里面 就没有过滤这些 直接拼接
这里也可以看出 闭合方式是百分号单引号 %’
我们在来到mysql文件中定义的这个函数 也可以看到 是对where没有过滤处理的
那么 有了前面的基础 直接来构造
payload:http://192.168.1.7/wuzhicms/index.php?m=core&f=copyfrom&v=listing&_su=wuzhicms&keywords=%27
报错了 直接插入报错注入的
payload:http://192.168.1.7/wuzhicms/index.php?m=core&f=copyfrom&v=listing&_su=wuzhicms&keywords=1%%27%20or%20extractvalue(1,concat(0x7e,(select%20database())))%23
第四处 后台任意文件删除
通过全局搜索unlink函数 来找文件删除
在这个文件下找到一个删除文件的函数 然后我们继续找哪里调用了这个函数
还是在这个文件 找到了一个del函数 里面调用了删除文件的函数
然后来分析调用的过程 调用删除的时候通过把$path和ATTACHMENT_ROOT 拼接
而ATTACHMENT_ROOT是前面定义的一个默认路径
path则是前面的$url 来的
在看前面的if 如果path有值则进入到if里面 然后经过的数据库的get_one查询操作 应该这里是要查出一个东西
但是因为我数据库是空的 则进入的是第一个if里面 哪怕是查出1条 也是可以的
这里也没有其他过滤
然后网上看url的来源
GLOBALS 那就可以直接通过传参的 前面也介绍了 id为空的话 也就进入到了else里面
到这里也就可以构造payload了
先在根目录下创建一个文件
然后构造
http://192.168.1.7/wuzhicms/index.php?m=attachment&f=index&v=del&_su=wuzhicms&url=../1.txt
这里我把最终删除的路径 打印了出来
文件也是成功删除
第五处 后台任意文件上传
直接搜索file_put_contents函数
在set_cache函数下发现写入文件的函数 $data并且没有过滤是直接通过参数传过来的
然后全局搜索 在哪里调用了这个函数
这个set函数下调用了这个函数
并且写入文件的内容是可控的
通过打印 知道了 写入的路径 文件名
并且这里也没有过滤
直接构造payload
然后访问文件
后面又发现一个函数调用的set_cache
过程是一样的 基本上 就没有演示了
这里还要注意一点 这里是写入的缓存文件 不是一直存在的 我重启之后 写入的内容就还原了
应该是还有的 就没有继续找这个了
第六处 信息泄露
最后在后台页面发现一出phpinfo
一个垃圾的信息泄露
最后
肯定还有审漏的
经过这个cms的审计过后 对MVC这种框架的也有了基本的认识了 以后遇到也不至于这样的无厘头 不知道怎么搞路由 怎么调用的
有了一个新的开始
如果此文有什么不对点 师傅们指出 学习学习 这也是继前面几篇之后新的一次尝试把 但回过头来看这个cms 也就因为mvc 所以调用的时候不同 其他的点 漏洞的地方还是规规矩矩 大差不差的和以前的比较的话