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

目录

代码审计-学前须知

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.mzph.cn/news/797207.shtml

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

相关文章

Java文件流操作

一、文件创建和删除 public static void main(String[] args) throws IOException {File file new File("..\\hello-world.txt");//..表示在上机目录下创建hello-world.txtSystem.out.println(file.getPath());//返回当前相对路径System.out.println(file.getCanoni…

vue项目 设置浏览器地址栏图标及名称

在vue项目中&#xff0c;怎样设置浏览器tab图标及名称呢&#xff1f; 方案一 1.静态配置vue项目ico 1.1将需要展示的ico放到项目文件中 1.2在项目根目录public文件中的index.html添加如下代码 <link rel"icon" href"<% BASE_URL %>favicon.ico"…

Java 组合模式

Java设计模式 - 组合模式 组合模式是结构型模式&#xff0c;因为它创建了一组对象的树结构。 组合模式将一组对象视为单个对象。 组合模式使用一个类来表示树结构。 在组合模式中&#xff0c;我们创建一个包含自己对象的类的组。 例子 以下代码使用Employee类来演示组合模…

(学习日记)2024.04.03:UCOSIII第三十一节:信号量函数接口讲解

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

c++的学习之路:13、vector(2)

本章主要是模拟实现vector&#xff0c;文章末附上代码&#xff0c;和源码。 目录 一、STL源码 二、构造与析构 三、迭代器与【】、size、capacity、empty 四、reserve与resize 五、push_back与pop_back 六、insert与erase 七、测试 1 八、代码 九、思维导图 一、STL源…

FJSP:蜣螂优化算法( Dung beetle optimizer, DBO)求解柔性作业车间调度问题(FJSP),提供MATLAB代码

一、柔性作业车间调度问题 柔性作业车间调度问题&#xff08;Flexible Job Shop Scheduling Problem&#xff0c;FJSP&#xff09;&#xff0c;是一种经典的组合优化问题。在FJSP问题中&#xff0c;有多个作业需要在多个机器上进行加工&#xff0c;每个作业由一系列工序组成&a…

2024.4.3-day08-CSS 盒子模型(溢出显示、伪元素)

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; 文章目录 作业 2024.4.3-学习笔记css溢出显示单行文本溢出显示省略号多行文本溢出显示省…

多态.Java

&#xff08;1&#xff09;什么是多态&#xff1f; 同类型的对象&#xff0c;表现出不同的形态。前者指父类&#xff0c;后者指不同的子类 说简单点&#xff0c;就是父类的同一种方法&#xff0c;可以在不同子类中表现出不同的状态&#xff0c;或者说在不同子类中可以实现不同…

10.java openCV4.x 入门-特殊的Mat类汇总(二)

专栏简介 &#x1f492;个人主页 &#x1f4f0;专栏目录 点击上方查看更多内容 &#x1f4d6;心灵鸡汤&#x1f4d6;我们唯一拥有的就是今天&#xff0c;唯一能把握的也是今天建议把本文当作笔记来看&#xff0c;据说专栏目录里面有相应视频&#x1f92b; &#x1f9ed;文…

Linux 常用指令及其理论知识

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a;http://t.csdnimg.cn/Tvyou 欢迎各位指教&#xff01;&#xff01;&#xff01; 目录 一、理论知识 二、基础指令 1、ls指令&#xff08;列出该目录下的所有子目录和文件&#xff09; 语法&#xff1a; …

论文阅读——Sat2Vid

Sat2Vid: Street-view Panoramic Video Synthesis from a Single Satellite Image 提出了一种新颖的方法&#xff0c;用于从单个卫星图像和摄像机轨迹合成时间和几何一致的街景全景视频。 即根据单个卫星图像和给定的观看位置尽可能真实地、尽可能一致地合成街景全景视频序列。…

Docker中Mysql报 mbind: Operation not permitted

问题 我们在docker中安装的mysql运行时报 mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted mbind: Operation not permitted原因 这是Docker的Seccomp安全限…

[leetcode] 25. K 个一组翻转链表

给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值…

最好用的安卓按钮(3)

属性解释 按钮文字 app:text“床前明月光” 按钮文字颜色 app:textColor“color/color_white” 按钮文字大小 app:textSize“22sp” 按钮背景颜色 app:color_normal“color/color_accent” 0x2 单独设置每个圆角 效果 代码 <top.androidman.SuperButton android:layo…

替换空格(替换特定字符)

&#x1f600;前言 在字符串处理中&#xff0c;经常会遇到需要替换特定字符的情况。本文将介绍一道经典的字符串替换问题&#xff1a;将字符串中的空格替换成 “%20”。我们将探讨一种高效的解决方法&#xff0c;通过倒序遍历字符串来实现原地替换&#xff0c;避免额外空间的开…

基于单片机分舱式电开水炉位控制系统

**单片机设计介绍&#xff0c;基于单片机分舱式电开水炉位控制系统 文章目录 一 概要二、功能设计三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机分舱式电开水炉位控制系统概要主要涉及通过单片机对电开水炉的各个舱位进行精确控制&#xff0c;实现水位、温度…

【热门话题】Stable Diffusion:本地部署教程

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 Stable Diffusion&#xff1a;本地部署教程一、引言二、环境准备1. 硬件配置2. …

springboot项目框架讲解

文章目录 1.项目文件结构2.数据库连接信息3.其他配置信息4.java代码文件目录介绍5.entity层代码6.controller&#xff0c;service&#xff0c;dao&#xff0c;entity层之间的关系7.controller层代码8.登陆拦截功能实现9.文件上传功能 1.项目文件结构 2.数据库连接信息 3.其他配…

ETL中如何自定义规则

一、ETL中的规则 在使用规则之前我们先来了解一下什么是规则&#xff0c;ETL中规则在很多组件中都能看见&#xff0c;可以理解为按照事前约定好的逻辑去执行&#xff0c;规则可以使得数据更加的规范统一&#xff0c;同时也不需要去纵向的修改底层代码&#xff0c;只需要动态编…

【Frida】【Android】 工具篇:查壳工具大赏

&#x1f6eb; 系列文章导航 【Frida】【Android】01_手把手教你环境搭建 https://blog.csdn.net/kinghzking/article/details/136986950【Frida】【Android】02_JAVA层HOOK https://blog.csdn.net/kinghzking/article/details/137008446【Frida】【Android】03_RPC https://bl…