Day105:代码审计-PHP原生开发篇SQL注入数据库监控正则搜索文件定位静态分析

news/2024/5/18 20:43:25/文章来源:https://blog.csdn.net/qq_61553520/article/details/137198218

目录

代码审计-学前须知

Bluecms-CNVD-1Day-常规注入审计分析

emlog-CNVD-1Day-常规注入审计分析

emlog-CNVD-1Day-2次注入审计分析


知识点:

1、PHP审计-原生态开发-SQL注入&语句监控

2、PHP审计-原生态开发-SQL注入&正则搜索

3、PHP审计-原生态开发-SQL注入&功能追踪

原生态开发的项目一般不安全,经常会爆出常见的漏洞,如:SQL注入,文件上传等

代码审计-学前须知

挖 0day 需要技术积淀+运气,但挖 1Day 则是单纯的学技术。

  1. 代码审计必备知识点:环境搭建使用,工具插件安装使用,掌握各种漏洞原理及利用,代码开发类知识点。
  2. 代码审计开始前准备:审计目标的程序名,版本,当前环境(系统,中间件,脚本语言等信息),各种插件等。
  3. 代码审计挖掘漏洞根本:可控变量及特定函数,不存在过滤或过滤不严谨存在绕过导致的安全漏洞。
  4. 代码审计教学计划:审计项目漏洞原理->审计思路->完整源码->应用框架->验证并利用漏洞。
  5. 代码审计教学内容:PHP,Java,NET,JS,Python等网站应用,引入框架类源码,相关审计工具插件使用。

审计思路

审计出发点

1、正则搜索函数名或者敏感词

2、通过网站功能点确定访问文件,审计功能点的代码

挖掘技巧

  1. 语句监控-数据库SQL监控排查可利用语句定向分析
  2. 功能追踪-功能点文件SQL执行代码函数调用链追踪
  3. 正则搜索-(update|select|insert|delete|).*?where.*=

如何快速的在多个文件代码里面找脆弱点

  1. 看文件路径
  2. 看代码里面的变量(可控)
  3. 看变量前后的过滤
     

Bluecms-CNVD-1Day-常规注入审计分析

审计流程:(update|select|insert|delete|).*?where.*=\

正则-ad_js.php->getone()->无过滤->有输出payload注入

Poc:

ad_js.php?ad_id=1 union select 1,2,3,4,5,6,database()

搭建参考:https://wiki.bafangwy.com/doc/379/

项目环境搭建,PHPStudy 搭建,使用 Apache + MySQL 搭建环境

PHPStorm 打开项目源代码,使用正则表达式搜索代码

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

这个正则表达式可以匹配包含特定数据库操作和where子句的字符串。具体解释如下:

  • (update|select|insert|delete|):这是一个捕获组,使用|表示“或”的关系。它匹配update、select、insert、delete中的任何一个词。这个捕获组是用来匹配数据库操作的关键字。
  • .*?:这部分使用了非贪婪模式(由?指定),匹配任意数量的任意字符(由.指定),但尽可能少地匹配字符。这意味着正则表达式会寻找最短的满足整个表达式的匹配。
  • where:这部分直接匹配字符串"where"。
  • .*=:这部分匹配任意数量的任意字符(由.指定),直到遇到等号=。这意味着它会匹配where之后的任何内容,直到出现一个等号。

综合以上部分,这个正则表达式可以匹配以update、select、insert、delete之一开始,之后是任意字符(但尽量少),接着是where关键字,最后是任意字符直到等号的字符串。这种模式经常用于匹配包含特定数据库操作和where子句的语句,例如SQL查询语句中的条件部分。

在正则表达式中,.*是一个常见的模式,表示匹配任意数量的任意字符(除了换行符)。具体解释如下:

  • .表示匹配任意一个字符(除了换行符)。
  • *表示匹配前面的元素零次或多次,也就是指定前面的元素可以出现任意次数(包括零次)。

因此,.*表示匹配任意长度的任意字符序列,包括空序列。它是一个非常灵活的模式,可以用来匹配任意文本内容。在正则表达式中,.*通常用于表示不关心具体字符内容的部分,只关心匹配的长度和位置。

需要注意的是,.*使用贪婪模式,即它会尽可能多地匹配字符。如果需要非贪婪匹配,可以使用.*?来指定非贪婪模式,尽可能少地匹配字符。

正则的结果:

脆弱性验证

思路:快速找到最脆弱的位置

  1. 看文件路径
  2. 看代码里面的变量(可控)
  3. 看变量前后的过滤

1、结合代码所在文件夹/文件名判断

要知道常见的目录的作用,通过代码所在的目录大致会知道代码所扮演的角色。一段SQL语句在HTML里怎么可能会有漏洞。

代码所在文件是在后台的界面里

2、要有基本的开发知识辅助判断

.intval() 转为数字类型,就不会产生漏洞

3、看变量(用户可控的)是否有过滤

这里有对变量进行绕过

但也可以尝试绕过

找到脆弱点进行分析

红框部分是:(1):验证是否有值   (2):过滤空格

getone() 函数应该是开发者自定义,看看它的实现,声明。

声明:函数的定义的定法,函数的逻辑;实现:函数在哪里被使用

可能函数的实现位置有多个,可以结合包含的文件进行判断

getone()函数逻辑:

  1. 调用query()函数,应该是开发者自定义的
  2. 接下来是原生的代码

进入到query()函数进行分析

可以看到没有过滤,可以判断存在SQL注入漏洞

还要再看看有没有数据输出:没有输出的话,就只能盲注了

开始测试漏洞

可以输出SQL语句辅助分析

构造Payload

emlog-CNVD-1Day-常规注入审计分析

https://www.cnvd.org.cn/flaw/show/CNVD-2018-26200

审计流程:

comment.php->delCommentByIp($ip)->无过滤->构造触发

Poc:

/admin/comment.php?action=delbyip&ip=127.0.0.1%27and(extractvalue(1,concat(0x7e,(select%20user()),0x7e)))%20--+&token=11f3f9cb7e78e3f88e39ea5678939b7d

环境搭建

初步判断漏洞在这个文件里

未对参数 ip 进行过滤

首先对cookie进行验证

然后会通过Cookie里的值验证是否是 admin 用户

通过 Get 方式接收参数 ip 值

然后查询数据并删除数据,最后重定向网页

总的来说,就是 admin 用户后台存在SQL注入漏洞,没有回显,需要盲注

构造payload并测试

网页重定向

盲注

emlog-CNVD-1Day-2次注入审计分析

https://www.cnvd.org.cn/flaw/show/CNVD-2023-65138

审计流程:

数据库监控->user.php无可控->nickname->添加不可控->data.php可控->导出修改导入->触发二次注入

/admin/data.php

导入文件时执行SQL文件中语句,带入Payload

INSERT INTO emlog_user VALUES('110','','$P$BnTaZnToynOoAVP6T/MiTsZc9ZAQNg.',(select version()),'writer','n','','123@qq.com ' , '','','0','1687261845','1687261845');

/admin/user.php

select查询nickname条件数据,访问触发二次注入

搭建环境

数据库监控,文件放到网站的根目录

访问地址

输入数据库账号密码并连接

这个工具的意义在于可以监控数据库执行的SQL语句,从中分析SQL注入漏洞

通过CNVD的漏洞提示,登录 admin 账户,SQL注入漏洞是在后台中

访问对应的话后天页面,对比数据库执行监控

使用正则表达式在项目中搜索

经验:一般情况下,"emlog_" 往往是拼接的方式,需要重新构造正则表达式

通过数据库监控的可能存在漏洞SQL语句,匹配到

这个SQL语句中,user 是登录的账号,带入数据进行查询。思路:二次注入,如果可以把SQL语句写入到 user 中,那么就可以SQL注入漏洞执行

对这个函数转到->声明或实例

定位有漏洞的文件 

filter_var 是过滤器,可能用来过滤一些脏字等

调用 getUser() 函数时,参数 condition 不可控,其值是 and nickname like '%%' 是一个空的模式字符串,表示匹配任意长度的任意字符序列。会匹配所有的用户名,即登录的账号

调用 getUserNum() 函数时,参数 condition 不可控

思路:二次注入,如果可以把SQL语句写入到 user 中,那么就可以SQL注入漏洞执行

注意到

导入备份,执行SQL语句,建立一个新的用户,用户名是SQL语句

再次查询

备份的数据,SQL文件会被数据执行写入,在访问用户管理界面就会被显示出来。恶意的SQL语句被执行写入到数据库,再被查出来。

另外:报错,时间盲注都不行,因为备份操作时没有数据包回显的,无法判断。

而且直接创建用户也是不可以的,因为直接创建的用户名是随机的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_1045469.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

接口自动化测试(python+pytest+requests)

一、选取自动化测试用例 优先级高:先实现业务流程用例、后实现单接口用例功能较稳定的接口优先开展测试用例脚本的实现二、搭建自动化测试环境 核心技术:编程语言:python;测试框架:pytest;接口请求:requests安装/验证requests:命令行终端分别输入 pip install requests / p…

无线游戏手柄的测试(Windows11系统手柄调试方法)

实物 1、把游戏手柄的无线接收器插入到电脑usb接口中 2、【控制面板】----【查看设备和打印机】 3、【蓝牙和其它设备】--【更多设备和打印机设置】 4、鼠标右键【游戏控制器设置】 5、【属性】 </

Python程序设计 列表

教学案例八 列表 1. 计算并显示斐波那契数列 输入n,计算并显示斐波那契数列前n项.一行打印5项&#xff0c;每项显示宽度为6 什么是斐波那契数列 斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列、 因数学家莱昂纳多斐波那契&#xff…

机器学习的15个概念

机器学习 有监督学习 有监督学习是利用训练数据集进行预测的机器学习任务。有监督学习可以分为分类和回归。回归用于预测“价格”“温度”或“距离”等连续值&#xff0c;而分类用于预测“是”或“否”、“垃圾邮件”或“非垃圾邮件”、“恶性”或“良性”等类别。 分类包含…

番外篇 | YOLOv8改进之引入YOLOv9的ADown模块 | 替换YOLOv8卷积

前言:Hello大家好,我是小哥谈。YOLOv9是一种目标检测算法,而ADown模块是YOLOv9中的一个重要组成部分。ADown模块主要用于特征提取和下采样操作,以便在后续的检测任务中更好地捕捉目标的特征。具体来说,ADown模块是YOLOv9中的一个卷积块,由一系列卷积层和池化层组成。它的…

基于SSM+Jsp+Mysql的超市管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

c++的学习之路:22、多态(1)

摘要 本章主要是说一些多态的开头。 目录 摘要 一、多态的概念 二、多态的定义及实现 2.1、多态的构成条件 2.2、虚函数 2.3、虚函数的重写 2.4、C11 override 和 final 2.5、重载、覆盖(重写)、隐藏(重定义)的对比 三、思维导图 一、多态的概念 多态的概念&#…

Harmony鸿蒙南向驱动开发-DAC

DAC&#xff08;Digital to Analog Converter&#xff09;是一种通过电流、电压或电荷的形式将数字信号转换为模拟信号的设备。 DAC模块支持数模转换的开发。它主要用于&#xff1a; 作为过程控制计算机系统的输出通道&#xff0c;与执行器相连&#xff0c;实现对生产过程的自…

牛客 2024春招冲刺题单 ONT98 牛牛猜节点【中等 斐波那契数列 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/6a3dfb5be4544381908529dc678ca6dd 思路 斐波那契数列参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规…

redis集群搭建过程遇到的坑

在上一篇博文中搭建好了redis集群&#xff0c;但是仍然存在很多问题 上一篇&#xff1a;k8s下搭建redis集群 1、springboot服务连接 集群配置好了&#xff0c;spring服务应该怎么连接呢&#xff1f;单点和集群的连接配置写法是不一样的 单点 spring:redis:host: ${BTC_RED…

水牛社软件:让网络小白少花冤枉钱,赚取第一桶金

大家好&#xff0c;我是木薯&#xff0c;水牛社赚钱软件的设计者&#xff0c;很感谢你的关注。我掘金互联网行业21年&#xff0c;操作了过去十余年来网上几乎所有的主流赚钱项目。我相信这个软件可以给你带来至少百倍的回报。 今年是软件上线第十个年头&#xff0c;去年底刚刚…

Tesseract 安装与配置及验证码识别

Tesseract 安装与配置 Tesseract 的使用&#xff0c;需要环境的支持&#xff0c;以实现简单的转换和训练。 1.环境 python版本&#xff1a;3.8.3 &#xff08;python2.7或3以上&#xff09; 操作系统&#xff1a;windows系统 2.Python安装 详见&#xff1a;Miniconda的…

创建型模式--4.抽象工厂模式【弗兰奇一家】

1. 奔向大海 在海贼世界中&#xff0c;位于水之都的弗兰奇一家是由铁人弗兰奇所领导的以拆船为职业的家族&#xff0c;当然了他们的逆向工程做的也很好&#xff0c;会拆船必然会造船。船是海贼们出海所必备的海上交通工具&#xff0c;它由很多的零件组成&#xff0c;从宏观上看…

Leetcode算法训练日记 | day19

一、最大二叉树 1.题目 Leetcode&#xff1a;第 654 题 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点&#xff0c;其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的…

每日Bug汇总--Day01

Bug汇总—Day01 一、项目运行出错 1、问题&#xff1a;运行苍穹外卖后端项目sky-take-out时&#xff0c;maven在install时报错 Maven resources compiler: Failed to copy D:\sky-take-out\sky-server\.....报错原因&#xff1a; 文件或者上级文件夹设置了只读用户没有修改…

【论文精读】| Geometric Multimodal Contrastive Representation Learning

本文并非逐句翻译&#xff0c;添加个人理解与疑惑&#xff0c;如有需要&#xff0c;请自行阅读原文。 Geometric Multimodal Contrastive Representation Learning 几何多模态对比表征学习 发表在 2022 ICML 数据集&#xff1a; 代码地址&#xff1a;GitHub - miguelsvasco/gmc…

ClickHouse 介绍

前言 一个通用系统意味着更广泛的适用性&#xff0c;但通用的另一种解释是平庸&#xff0c;因为它无法在所有场景内都做到极致。 ClickHouse 在没有像三驾马车这样的指导性论文的背景下&#xff0c;通过针对特定场景的极致优化&#xff0c;获得闪电般的查询性能。 ClickHous…

MySQL复制拓扑1

文章目录 主要内容一.安装MySQL服务器1.MySQL 安装程序和其它文件保存在下发的 mysql8-files.iso 镜像文件中&#xff0c;可以使用虚拟光驱来提取到 Linux 文件系统。代码如下&#xff08;示例&#xff09;: 2.将 MySQL8.0 程序解压到 /opt 目录&#xff0c;再创建到 MySQL 默认…

基于Java+SpringBoot+Vue文学名著分享系统(源码+文档+部署+讲解)

一.系统概述 随着世界经济信息化、全球化的到来和互联网的飞速发展&#xff0c;推动了各行业的改革。若想达到安全&#xff0c;快捷的目的&#xff0c;就需要拥有信息化的组织和管理模式&#xff0c;建立一套合理、动态的、交互友好的、高效的文学名著分享系统。当前的信息管理…

Spring Boot 切面的一种的测试方法,java中级开发面试

void afterReturnName() { Assertions.assertEquals(studentController.getNameById(123L).getName(), "测试姓名Yz");} } 但往往切面中的逻辑并非这么简单&#xff0c;在实际的测试中其实我们也完成没有必要关心在切面中到底发生了什么&#xff08;发生了什么应该在…