• 百家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
    
    • 1

    在这里插入图片描述
    2. 通过抓包查看传递参数:
    在这里插入图片描述
    可以看到这里主要传递了前端输入的smanewebsite,这两个字段我们外部可控,接着在代码中寻找:

    	$data=array('sname'=>$_GP['sname'],'is_system'=>0,
    	'isclose'=>intval($_GP['isclose']));
       $data['website']=$_GP['website'];   // 接受前段传递过来的website参数
    
    • 1
    • 2
    • 3

    最后通过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
    
    • 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. 可以看到,我们输入的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) #
  • 相关阅读:
    VTN4系列多通道振弦模拟信号采集仪模拟通道值和振弦传感器温度通道值修正
    [附源码]Python计算机毕业设计Django失物招领微信小程序论文
    记录裁员后第一周的面试记录
    算法笔记-第十章-图的遍历(未处理完-11.22日)
    网络安全(黑客)自学
    当Java遇上泛型:类型安全的魔法之旅
    【无标题】
    Postman 如何进行参数化
    软件测试(功能、接口、性能、自动化)详解
    一款基于.Net开发、开源、支持多平台云存储文件管理器
  • 原文地址:https://blog.csdn.net/qq_42383069/article/details/127351080