[php代码审计]熊海cms v1.0
一、环境搭建
- 熊海cms v1.0源码
- windows 7
- phpstudy2016(php 5.4.45)
- seay源代码审计系统
注意搭建环境时将路径中的中文改成英文
二、漏洞列表
seay 报出 34 个可能的漏洞,不是很多可以再结合容易出漏洞的功能点逐一看一下
2.1文件包含
先检查第一个可疑漏洞,打开 /index.php 文件,明显的文件包含漏洞,$_GET['r'] 未经过滤直接被 include 包含,但是添加了 php 后缀
一般文件包含漏洞都会结合图片马一起利用,登录到后台发现资料设置处可以上传头像,看一下处理上传图片的代码 /admin/files/manageinfo.php 没有什么过滤,但是包含了 /inc/up.class.php,上传功能仅对文件后缀进行了判断,白名单:jpg|jpeg|gif|bmp|png,刚好可以上传图片马
上传图片马,后台直接显示出路径,接下来包含图片马后还需要截断 php 后缀,具体操作和限制条件可以参考我这篇 https://www.cnblogs.com/wkzb/p/12732078.html 博客的 2.7 小节
/admin/index.php 也存在同样的文件包含漏洞,这里就不详细分析了
2.2报错注入
审计一下后台登录的代码 /admin/files/login.php,首先程序用POST方式接收参数,然后未经任何过滤进行了用户名校验,如果用户名存在继续进行密码校验。这里计算传递的 password 变量的 md5,然后拿 md5 值与数据库里面的密码进行核对
可以通过报错注入利用这个漏洞,顺便写一下 updatexml 报错注入原理。MySQL 5.1.5 版本中添加了对XML文档进行查询和修改的两个函数:extractvalue、updatexml
UPDATEXML (XML_document, XPath_string, new_value);
- 第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
- 第二个参数:XPath_string (Xpath格式的字符串)
- 第三个参数:new_value,String格式,替换查找到的符合条件的数据
因此需要在第二个参数中插入不属于Xpath格式的内容,即可引发报错
payload 如下
1' and updatexml(1,concat(0x7e,(SELECT database()),0x7e),1)#爆库 1' and updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=database() limit 6,1),0x7e),1)#爆表 1' and updatexml(1,concat(0x7e,(select column_name from information_schema.columns where table_name='manage' limit 3,1),0x7e),1)#爆字段 1' or updatexml(1,concat((select concat(0x7e,password,0x7e) from manage)),1) #爆密码
但是由于 updatexml 最大长度是 32 位,所以要进行两次报错注入拼接密码 md5 值
1' or updatexml(1,concat((select concat(0x7e,password) from manage)),0) # 1' or updatexml(1,concat((select concat(password,0x7e) from manage)),0) #
/admin/files/newlink.php 也有程序用POST方式接收参数,然后未经任何过滤插入数据库的问题,用刚刚的 payload 可以得到结果,这里不详细分析了
2.3垂直越权
/inc/checklogin.php 是一个判断管理员的程序,如果COOKIE中 user 参数为空,那么就跳转到登陆窗,很容易利用这个漏洞,抓包添加user字段即直接进入后台管理
2.4CSRF
后台管理员存在文件删除的功能,/inc/checklogin.php 验证是否是管理员,GET传递的 delete 参数直接插入数据库删除对应的文件
利用一下这个漏洞,登录管理员账号后,点击如下链接,成功删除文章
http://192.168.25.130/isea_v1.0/admin/?r=wzlist&delete=8
2.5存储型XSS
留言功能很容易出现存储型XSS,/files/contact.php 页面有留言功能,留言后 /files/submit.php 页面 insert 插入数据表
补充一下 textarea 标签里的内容在浏览器里会自动编码成实体字符,例如
<textarea><script>alert(1)</script></textarea>
利用时需要先跳出 textarea 标签(这里不适用,因为在 /files/submit.php 中还会过滤 content 内容)
</textarea><script>alert(1);</script>
利用一下漏洞,由于这里有一些代码中相对地址的不同,把源代码直接放在根目录跳转时不会发生错误(原来源码是放在 /isea_v1.0/ 下进行测试),虽然这里的 content 进行了严格的过滤,但是 name、mail、url 都没有进行过滤,可以直接提交 js 代码上去,但是要注意利用时注意闭合标签,以昵称为例,构造一个 payload,后台管理员处可以成功弹窗
<script>alert(1);</script>','1','1','1','1','1','1','1','1'),('1','1','1','1
2.6反射型XSS
还是在 /files/contact.php 页面,显示页码的 page 参数没有任何过滤,产生反射型XSS漏洞,但是利用起来很鸡肋
三、总结
这次 cms 的审计难度较 bluecms 简单一点,对新手友好,锻炼思路还是很好的。Seay 误报还是挺多的,要自己多留意容易出漏洞的功能点。
参考:
http://pines404.online/2019/10/20/%E4%BB%A3%E7%A0%81%E5%AE%A1%E8%AE%A1/%E7%86%8A%E6%B5%B7CMS/
https://www.cnblogs.com/richardlee97/p/10600103.html