🗒️01-bluecms
2023-10-28
| 2023-12-29
字数 2257阅读时长 6 分钟
type
status
date
slug
summary
tags
category
icon
password
😀
初学代码审计: 工具:seay源代码审计,phpstorm,phpstudy 环境:bluecms1.6 php5.4 需要创建数据库
搭建的话google找就可以了。
 
打开seay源代码审计系统,新建项目到bluecms的路径下,直接开始自动审计
以漏洞描述,文件路径排序就可以开始了
notion image

sql部分

ad_js.php

通过seay定位到$ad_id后查看此变量定义,发现在sql查询语句和定义时都未被顾虑,经过getone函数处理后,赋值给ad变量,最后ad变量的content值输出在了注释中。
notion image
定位getone函数,仅仅执行查询并返回结果。所以此处可能存在sql注入漏洞
notion image
直接用sqlmap测试了
python sqlmap.py -u "http://bluecms.com:8800/ad_js.php?ad_id=1" --current-db --batch
notion image

comment.php

seay规则好像没审出来,google看见的
这个insert语句中,前面的参数大多都经过intvalhtmlspecialchars俩个函数的过滤,$timestamp变量直接赋值time(),这局查询语句紧跟着就是执行sql,echo是我调试加的,直接跟进getip()
notion image
此函数允许我们伪造ip,并且对伪造的ip未做任何限制,在结尾通过return $ip直接返回,所以我们可以构造payload进行测试。
notion image
这里直接用网上的payload进行测试,构造payload记得将结尾的变量is_check赋值。
payload:8' and if(ascii(substr(database(),1,1)=98),sleep(5),1),'1')#
notion image

guest_book.php

这里调用的getip()方法与comment.php中提到的一样,利用方法也一样,不再记录。
notion image
相同的问题还出现在publish.php中。

user.php

宽字节注入

功能点:注册页面的ajax客户端校验账户是否存在的请求
此处user_name没有进行过滤,直接进行check检验,跟进这个方法
notion image
在user表和admin表中检索用户名,若有则返回true。此函数也没有防护。
notion image
此漏洞的功能点在注册页面,我们输入haha,右边自动弹出该用户已存在。
直接看请求包,参数为?user_name=haha&timestamp=1698462026487&act=check_user_name
ajax请求包是客户端的功能,burp抓不到包,在客户端拿到包去burp测试。
notion image
直接注入出现问题,看网上的博客寻找原因,文件开头引入了以下文件
require_once dirname(__FILE__) . '/include/common.inc.php';
其中有一串过滤代码,对传入的参数都进行deep_addslashes函数处理,
notion image
跟进此函数发现,它会首先判断传入的是不是数组,如果是数组就取值,不是数组就将它进行addslasher特殊字符转义,递归转义所有传入的内容。由于默认是gbk编码,可以尝试宽字节注入。
notion image
此处是宽字节注入,直接用sqlmap跑
GET /user.php?user_name=ha%df&timestamp=1698462026487&act=check_user_name HTTP/1.1要记得将user_name=haha%df,不加%df跑不出来的。
notion image
网上的payload: 1%df' and (select 1 from(select case when(ascii(substr(database(),1,1))=98) then sleep(5) else (1) end)x) -- -
select 1 from(select case when(ascii(substr(database(),1,1))=98) then sleep(5) else (1) end)x:这是一个嵌套的SQL查询。它首先从数据库名称的第一个字符开始,取出ASCII值,然后与98进行比较。如果相等,那么它会执行sleep(5),使数据库进入休眠状态5秒钟。否则,它会返回1。

insert注入

功能点:注册账户请求提交时
源码审计:
根据请求包定位代码
notion image
代码中对于参数的定义都没有过滤sql相关的字符,不过email参数在插入前没有经过任何校验,我们可以向其中插入多段数据,一次注册多个号。
payload: %df',1,1),(12,123456,md5(123456),(select+database()),1,1)#
前面的%df闭合后端的email,后面的六个字段值写在另一个()中,且第二个括号注意不出现单引号,子查询全部用括号包裹。效果图如下:
notion image
notion image

XSS

ad_js.php反射型

原理:文件开头require_once dirname(__FILE__) . '/include/common.inc.php';引入了common.inc.php文件,而这个文件定义了error_reporting(E_ERROR);意为仅报告严重错误,不报告警告或者通知。也就是说此处的sql语句报错会有回显
notion image
最后页面显示出:Error:Query error:SELECT * FROM blue_ad WHERE ad_id =
弹窗语句源码可见

publish.php反射型

原理与上一个类似,会回显sql报错。
可构造sql错误的在伪造ip处,此处online_ip的定义就是getip()函数,可以用x-forwared-for等伪造ip,且没有过滤。
notion image
不演示了,这个环境实在找不到正常的功能点在哪。

user.php存储型xss

功能点:user.php?act=add_news
user.php下————本地新闻————发布新闻
观察数据包中有个do_add_news像是后台写死的固定值,直接去代码定位它
观察一下,title,color,cid,author,source都被过滤,content被一个函数filter_data过滤,看一下它的定义,新闻内容肯定会展示的了,不需要看是否有输出的代码了
只过滤了以<开头的部分标签,img,input都没有过滤,on事件也没有过滤。
修改请求包的content为<img src=x onerror=alert(1)>试试
notion image

任意文件删除漏洞

publish.php

此处使用了unlink函数,拼接的参数id未经过过滤,跟进BLUE_ROOT后发现它有多个定义,define('BLUE_ROOT',str_replace("\\","/",substr(dirname(__FILE__),0,-7)));大概都只是替换双斜杠,没有任何过滤方式,仅代表当前路径
条件为:文件路径存在则删除文件
notion image
notion image
在根目录新建一个test/1.txt,然后访问
publish.php?act=del_pic&id=test/1.txt发现test目录下的1.txt文件已被删除

user.php

以下这俩个都比较奇怪,网上说是有,我只是看了看源码
seay审的,源码如下:
未对参数id进行过滤
以为这个与上一个一样,但是不太行,可以输出反射型xss。
user.php?act=del_pic&id=<script>alert(1)</script>
离谱,这个表我在数据库都没见
 
seay审的另一个
notion image
看一下这个触发的条件(代码疯狂上翻):
elseif($act == 'do_info_edit')
 
构造请求:user.php?act=do_info_edit&lit_pic=test/1.txt
请求不成功,do_info_edit是编辑信息的,去网页找功能点了。应该是在页面这里,但是这里源码功能有问题,点不出来这个表单接口,所以直接上网上的payload(我可没成功,数据库和源码太奇怪)post_id=1&link_man=aaa&link_phone=13888&link_email=123@123&link_qq=1234&link_address=cccc&lit_pic=./1.txt&title=aaa
 
notion image

任意文件包含漏洞

user.php

seay审的,这个pay参数看上去得闭合后注释
直接去页面支付找功能点了
notion image
插入知识点:
windows文件路径长度限制:259
linux文件路径长度限制:4096
由此,payload:
pay=..%2F..%2Frobots.txt....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
也可以在这里通过图片马+文件包含达到getshell
  • 代码审计
  • DC系列02-熊海cms
    Loading...