[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>&lt;script&gt;alert(1)&lt;/script&gt;</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

 

posted @ 2020-04-30 21:51  beiwo  阅读(1244)  评论(0编辑  收藏  举报