50 代码审计-PHP无框架项目SQL注入挖掘技巧
目录
- 演示案例:
- 简易SQL注入代码段分析挖掘思路
- QQ业务图标点亮系统挖掘-数据库监控追踪
- 74CMS人才招聘系统挖掘-2次注入应用功能(自带转义)
- 苹果CMS影视建站系统挖掘-数据库监控追踪(自带过滤)
- 技巧分析:
- 总结:

demo段指的是代码段,先简要的分析一下漏洞的产生原理
完整源码,完整的一套程序
框架源码,指的是框架上面的问题,有框架和没框架的两个源码结构是完全不同的
每个漏洞挖掘的方法有少许的差异,主要是由于漏洞的原理和产生决定
程序有什么漏洞,我们就挖什么漏洞,针对性的找漏洞,找上传、找注入
我们手里有很多源码,一个一个源码分析是很麻烦的,我们可以借助工具,帮我们自动扫描探针,我们推荐使用Fortify、Seay系统

它会自动对源码进行分析,然后生成简要的报告,这些是它发现可能存在的安全问题,这个工具支持各种语言


选择一个源码,对文件进行编译,然后给出一个相应的测试报告

我们一般挖的话,思路就是不可能直接拿到源代码就上去看了,一个源代码拿到手上,我们要先去分析,所以我们先去用工具去批量测试一下,爆出一些可能存在的安全问题,在它的基础上再去看,这样子能节省一些时间
#代码审计教学计划:
审计项目漏洞Demo->审计思路->完整源码框架->验证并利用漏洞
看漏洞产生的报告、代码段,分析一下关于这个漏洞,我们如何挖掘它会好一点,然后再用完整的代码、框架、源码段在进行完整体系验证和利用这个漏洞的挖掘思路
#代码审计教学内容:
PHP,JAVA网站应用,引入框架类开发源码,相关审计工具及插件使用
#代码审计必备知识点:
环境安装搭建使用,相关工具插件安装使用,掌握前期各种漏洞原理及利用
在PHP里面会涉及到断点调式,就是分析代码的时候要看一下当前页面和代码在那个地方执行,下一步在干嘛干嘛,这些东西全部需要配置
#代码审计开始前准备:
审计目标的程序名,版本,当前环境 (系统,中间件,脚本语言等信息),各种插件等
程序的语言版本、语言的类型和你的环境,可能造成有些漏洞在利用或验证的时候有些问题
SQL注入里面有魔术引号,这个可以在PHP配置里面开启和关闭得到,假设这个网站自身没有启用魔术引号过滤的,那我自己搭的环境有这个过滤,即使它有漏洞你在测试验证的时候,可能会出现误报,但是这个误报并不是代码之间的过滤,而是环境自己的配置导致的过滤,所以我们需要知道目标网站的信息
#代码审计挖掘漏洞根本:
可控变量及特定函数,不存在过滤或过滤不严谨,存在绕过导致的安全漏洞
漏洞在利用的时候都需要可控变量,函数的作用将决定是什么漏洞,如果是输出性的函数,输出代码用的、输出变量用的,将会导致跨站漏洞,因为跨站漏洞原理和输出性函数是有关系的
可控变量有了之后,还要看它有没有过滤,过滤的比较安全,那就是没有漏洞,如果说没有过滤、过滤不严谨,也会导致安全漏洞,所以基本上我们在做漏洞分析的时候,大部分都是看它的过滤
过滤不严谨是它没有想到一些多种攻击方式的一些关键字符和一些恶意字符,也可能是函数在使用的时候,函数使用的不好,像CTF比赛经常考到的,两个等于号,三个等于号就是判断这个值是否相等的时候,是有区别的,所以验证判断的时候存在饶过
演示案例:
简易SQL注入代码段分析挖掘思路
分析一下sqlilabs靶场的sql注入代码

要包含数据库配置文件,才能对数据库进行操作,我们要进行数据库操作,首先要建立连接,就要包含数据库配置文件,后面就是操作数据库的
mysql query()数据库执行函数,没有这个函数就没有sql注入漏洞,因为注入漏洞要对数据库进行操作

这段代码同时存在xss和SQL注入漏洞,可控变量和特定函数导致的安全问题

挖掘思路在特定关键字,搜索特定关键字尝试寻找特定漏洞,因为漏洞产生必定会有关键字,因为关键字没有,这个漏洞就不存在
如:搜索echo print 尝试挖掘的就是xss漏洞;搜索$_GET $_POST 尝试挖掘的就是安全漏洞;搜索数据库的操作性函数,就能尝试挖掘它的注入
如:特定关键字 select insert update sql执行语句 == sql注入漏洞
定点挖掘功能点:
如:我要挖掘文件上传,通过网站的浏览,人工肉眼的判断,找到特定的地方,会员中心存在文件上传的操作地址,抓包分析找到源码中的特定文件代码段,进行文件上传代码分析挖掘
拓展:视漏洞而定
sql注入 数据库监控-监控到当前页面和数据库的交互过程 (SQL执行语句)
发现sql语句里面那些变量可以伪造,那些执行语句里面的值可以进行修改和测试,然后你在找到指定代码段看一下,修改测试的时候,这个代码段有没有进行过滤,发现有没有注入
断点调试: 访问页面对应代码进行断点调试 (执行过程前后顺序,调用文件列表等)
便于你完整了解过程中代码一整个执行下来,你就可以分析到它其中有没有过滤了,其实就是追踪过程
QQ业务图标点亮系统挖掘-数据库监控追踪
加载源码

利用关键字进行全局搜索,就是所有代码都载进去,搜索关键字,因为有select,才能说明有语句的查询
关键字会被封装,其实select被写成一种函数,自定义的类里面去了,直接调用就完事了

在搜索的时候,要把正则和不区分大小写给勾起来
在找的时候,那个有变量就看那个文件,没有变量这个语句就写死了,因为外面要控制变量实现sql语句的自定义

如果出现乱码,换一下GBK,然后重新打开

选中函数名,点击全局搜索,在那个代码中有调用这个函数
全文追踪在代码中搜索它在那个地方



判断值等于几,然后给出相应的提示

在调用语句的时候,把它调式输出一下,能够更加快捷的看到当前执行的SQL语句

对应调用的文件在v144.php里面,外面访问一下对应的文件
说明没有进入代码段是有个验证的


得到网站的地址

获取来路地址,由于我是直接访问的没有来路地址,所以url为空,最终domain为空

有跟没有对比,显然不存在,外面要让它相等,才能进行刚才注入的判断

我们访问的时候让它有来源,点击有跳转功能的地方,F12修改器href,然后点击跳转

现在就不提示了,因为它的来源是自身来源

传递id=1,还是按照刚才的方式来


查找一下 “请输入完整”

我们还需要继续满足条件,api=ok&u=1&p=1

id改成2之后

看一下yw有几个列

看一下语句能不能代入进去并且执行,用#号屏蔽掉

重新操作一下

这个时候语句就执行了,说明存在注入点

语句被执行了,延迟了3秒,因为被调用了3次,所以延迟了9秒

我们先搜索select,然后找到变量,我们在看函数被谁调用,发现有值传进来控制变量id,访问v144.php,受到了文件名的两个过滤,第一个是检测来源的过滤,第二个是满足这个条件

条件满足之后,变量成功接受,调用这个函数,函数直接拼接语句,没有过滤,这代码属于无过滤的注入点

74CMS人才招聘系统挖掘-2次注入应用功能(自带转义)
74CMS这个源码是有自带过滤的,这个自带过滤是很多优秀、有一定规模的CMS自带的过滤机制,就是在代码中没有看到有过滤的写法,但是他的配置文件里面已经写进去了,然后他调用一些函数就可以去分析一下你输入的代码中有没有这个代码

一把看他的过滤机制写法是看他的全局配置文件,配置文件的目录结构一般会在网站目录下面,像include这种关键字里面

这个就是典型的过滤转移,等同于魔术引号

common.inc.php这里面的代码基本上是全局享用的,文件基本上都调用这个代码,都被执行了一遍

addslashes_deep重新写的定义函数,先看一下你的开关开没开,没有开就利用东西来过滤

我们可以采用宽字节注入、二次注入绕过魔术引号的机制

招聘网站会有招聘中心,会员中心,我们可以对会员中心这个地方进行设置,因为会员中心里面会涉及到用户的信息和更改这个操作,所以我们代码测试的功能点要放在这个上面

我们点击创建新简历,信息随便写

我们利用数据库监控插件,直接下断、更新

我们找到对应文件,然后搜索传递的变量

我们看一下数据库执行语句,输入的时候,后面有update更新,二次注入涉及到先插在更新,但是我们这里更新的信息跟我们加载的不相关,所以这个地方不满足,我们就要继续找

点击保存跳到下一步
但是插入的数据,我们无法指定,它用了编号代替,因为这些数据是我们选择的,不是我们填写的,所以这个数据我们不能指定

我们继续下一步

这里是直接更新,没有插入数据,我们之所以使用到二次注入是因为他能够解决转移,就是你变量接收过去直接更新

我们加个单引号

这边自动加个反斜杆,我们就注入不了,我们需要同时找到操作里面有insert同样有update的两种情况,而且变量还要可控还行,要满足这三个条件

你插入的时候即使转义了,但是他在插进去的时候,斜杆被自动删除了,这个过滤到数据库里面就没有了,所以你在update把数据取出来之后,这个斜杆没有,我们才能注入,因为有会干扰sql语句的正常执行,会注入不了
我们在保存一下

这个就满足了

我们写上payload

上面有被过滤,下面没有,这就是二次注入,转移绕过的经典例子

这就是刚才查询user的东西

苹果CMS影视建站系统挖掘-数据库监控追踪(自带过滤)
我们看一下网站,我可以通过抓包来分析一下搜索框

推荐另外一个数据库监控软件
这个是监控mysql

这个是监控oracle,各种数据库都有;使用方法按照上面介绍的就可以

这个是监控mysql的数据库语句的

我们搜索一下xiaodi11,整改过程监控的语句就出来了,我们在这里就可以搜索相关资料了

这个是网页版的,前面是插件版的,我们想用那一种都可以
我们打开项目

寻找文件地址

m给完之后,进行判断,给到ac,然后在包含这个文件

这边还进行分割

调用search,trim去空格

be很明显是自定义的函数,转义过滤

chkSql自定义函数,进行url的编码,是关键字过滤

正则式匹配,有没有匹配到关键字

这边是两种过滤,转义和关键字过滤

htmlEncode这里是强制性编码转义,接触到数据库还会转义

我们可以使用双重编码绕过转义
技巧分析:
数据库监控脚本类,关键字搜索,业务应用分析等
总结:
代码审计不是一定要有编程知识
相关文章:
50 代码审计-PHP无框架项目SQL注入挖掘技巧
目录 演示案例:简易SQL注入代码段分析挖掘思路QQ业务图标点亮系统挖掘-数据库监控追踪74CMS人才招聘系统挖掘-2次注入应用功能(自带转义)苹果CMS影视建站系统挖掘-数据库监控追踪(自带过滤) 技巧分析:总结: demo段指的是代码段,先…...
基于Spring、SpringMVC、MyBatis的企业博客网站
文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于Spring、SpringMVC、MyBatis的企业博…...
spring日志输出到elasticsearch
1.maven <!--日志elasticsearch--><dependency><groupId>com.agido</groupId><artifactId>logback-elasticsearch-appender</artifactId><version>3.0.8</version></dependency><dependency><groupId>net.l…...
谷歌 Gemini 模型发布计划推迟:无法可靠处理部分非英语沟通
本心、输入输出、结果 文章目录 谷歌 Gemini 模型发布计划推迟:无法可靠处理部分非英语沟通前言由谷歌 CEO 桑达尔・皮查伊做出决策从一开始,Gemini 的目标就是多模态、高效集成工具、API花有重开日,人无再少年实践是检验真理的唯一标准 谷歌…...
Ubuntu显卡及内核更新问题
显卡安装(2023.12.04) # 查看显卡型号 lspci | grep -i nvidia # 卸载原nvidia 显卡驱动 sudo apt-get --purge remove nvidia*# 禁用nouveau(nouveau是ubuntu自带显卡驱动) sudo gedit /etc/modprobe.d/blacklist.conf # 新增2行…...
SpringBoot错误处理机制解析
SpringBoot错误处理----源码解析 文章目录 1、默认机制2、使用ExceptionHandler标识一个方法,处理用Controller标注的该类发生的指定错误1).局部错误处理部分源码2).测试 3、 创建一个全局错误处理类集中处理错误,使用Controller…...
牛客剑指offer刷题模拟篇
文章目录 顺时针打印矩阵题目思路代码实现 扑克牌顺子题目思路代码实现 把字符串转换成整数题目思路代码实现 表示数值的字符串题目思路代码实现 顺时针打印矩阵 题目 描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如…...
Locust单机多核压测,以及主从节点的数据通信处理!
一、背景 这还是2个月前做的一次接口性能测试,关于locust脚本的单机多核运行,以及主从节点之间的数据通信。 先简单交代下背景,在APP上线之前,需要对登录接口进行性能测试。经过评估,我还是优先选择了locust来进行脚…...
ERROR: [pool www] please specify user and group other than root
根据提供的日志信息,PHP-FPM 服务未能启动的原因是配置文件中的一个错误。错误消息明确指出了问题所在: [29-Nov-2023 14:28:26] ERROR: [pool www] please specify user and group other than root [29-Nov-2023 14:28:26] ERROR: FPM initialization …...
京东商品详情接口在电商行业中的重要性及实时数据获取实现
一、引言 随着电子商务的快速发展,商品信息的准确性和实时性对于电商行业的运营至关重要。京东作为中国最大的电商平台之一,其商品详情接口在电商行业中扮演着重要的角色。本文将深入探讨京东商品详情接口的重要性,并介绍如何通过API实现实时…...
WT2003H MP3语音芯片方案:强大、灵活且易于集成的音频解决方案
在当今的数字化时代,音频技术的普遍性已不容忽视。从简单的音乐播放,到复杂的语音交互,音频技术的身影无处不在。在这个背景下,WT2003H MP3语音芯片方案应运而生,它提供了一种强大、灵活且易于集成的音频解决方案。 1…...
机器学习深度学学习分类模型中常用的评价指标总结记录与代码实现说明
在机器学习深度学习算法模型大开发过程中,免不了要对算法模型进行对应的评测分析,这里主要是总结记录分类任务中经常使用到的一些评价指标,并针对性地给出对应的代码实现,方便读者直接移植到自己的项目中。 【混淆矩阵】 混淆矩阵…...
fastapi 后端项目目录结构 mysql fastapi 数据库操作
原文:fastapi 后端项目目录结构 mysql fastapi 数据库操作_mob6454cc786d85的技术博客_51CTO博客 一、安装sqlalchemy、pymysql模块 pip install sqlalchemy -i https://pypi.tuna.tsinghua.edu.cn/simple pip install pymysql -i https://pypi.tuna.tsinghua.edu.…...
研习代码 day47 | 动态规划——子序列问题3
一、判断子序列 1.1 题目 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde&…...
L1-017:到底有多二
题目描述 一个整数“犯二的程度”定义为该数字中包含2的个数与其位数的比值。如果这个数是负数,则程度增加0.5倍;如果还是个偶数,则再增加1倍。例如数字-13142223336是个11位数,其中有3个2,并且是负数,也是…...
Python多线程使用(二)
使用多个线程的时候容易遇到一个场景:多个线程处理一份数据 使用多线程的时候同时处理一份数据,在threading中提供了一个方法:线程锁 Demo:下订单 现在有多笔订单下单,库存减少 from threading import Thread from t…...
记录一次docker搭建tomcat容器的网页不能访问的问题
tomcat Tomcat是Apache软件基金会的Jakarta项目中的一个重要子项目,是一个Web服务器,也是Java应用服务器,是开源免费的软件。它是一个兼容Java Servlet和JavaServer Pages(JSP)的Web服务器,可以作为独立的W…...
GPT3年终总结
User You 程序员年度绩效总结 ChatGPT ChatGPT 程序员年度绩效总结通常包括以下几个方面: 目标达成情况: 回顾年初设定的目标,评估在项目完成、技能提升等方面的达成情况。 工作贡献: 强调在项目中的个人贡献,包括…...
Kafka生产者发送消息的流程
Kafka 生产者发送消息的流程涉及多个步骤,从消息的创建到成功存储在 Kafka 集群中。以下是 Kafka 生产者发送消息的主要步骤: 1. 创建消息 生产者首先创建一个消息,消息通常包含一个键(可选)和一个值,以及…...
基于SSM的数学竞赛网站设计与实现
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:Vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)
笔记整理:刘治强,浙江大学硕士生,研究方向为知识图谱表示学习,大语言模型 论文链接:http://arxiv.org/abs/2407.16127 发表会议:ISWC 2024 1. 动机 传统的知识图谱补全(KGC)模型通过…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...
在 Spring Boot 项目里,MYSQL中json类型字段使用
前言: 因为程序特殊需求导致,需要mysql数据库存储json类型数据,因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...
未授权访问事件频发,我们应当如何应对?
在当下,数据已成为企业和组织的核心资产,是推动业务发展、决策制定以及创新的关键驱动力。然而,未授权访问这一隐匿的安全威胁,正如同高悬的达摩克利斯之剑,时刻威胁着数据的安全,一旦触发,便可…...
