记一次奇妙的Oracle注入绕WAF之旅
0x01 一个登陆框
上班时遇到了一个登陆框
看着这个复古的界面,于是上手除了admin123456之外顺手点了个'
于是弹出了一条有意思的报错
这就有意思了,毕竟已经很久没在登陆框遇到sql注入了,当我想当然的认为万能密码可以秒时,事情出现了一丢丢的不对劲
试了一下几个常见的万能密码发现进不去,这就有意思了,于是准备跑一下sqlmap。
0x02 准备工作
首先抓包后进行简单分析。
发现请求包中存在一个参数sessionID,这个参数不能复用,每次发包需要从服务器重新获取,而且有效期特别短
有点麻烦,可以在本地起个代理,帮我请求并替换数据包里的sessionID
这一步操作可以用mitmproxy来实现
mitmproxy 是一个控制台工具,可以实时拦截、修改 HTTP/HTTPS 请求和响应,并且支持用 Python 脚本对 HTTP 通信进行修改
这里我们直接拜托GPT菩萨帮我写一个简单的脚本
from mitmproxy import http
import requests
import jsonAUTH_URL = "http://target.com/"
TARGET_VALUE = "__daisukidayo__"def fetch_sid():"""获取 sid"""try:response = requests.post(AUTH_URL, data={"authType": "md5"}, headers={"Content-Type": "application/x-www-form-urlencoded"})if response.status_code == 200:data = json.loads(response.text)sid = data.get("sessionID", "default_sid")print(f"[*] Retrieved SID: {sid}")return sidexcept Exception as e:print(f"[!] Error fetching SID: {e}")return "default_sid"def request(flow: http.HTTPFlow):"""拦截 HTTP 请求并修改"""sid = fetch_sid()if flow.request.method == "POST":content_type = flow.request.headers.get("Content-Type", "")if "application/x-www-form-urlencoded" in content_type:body = flow.request.textmodified_body = body.replace(TARGET_VALUE, sid)flow.request.text = modified_bodyprint(f"Modified POST Data: {body} -> {modified_body}")
把请求包里的sessionID改为脚本中指定的TARGET_VALUE,随后启动代理
mitmdump -s proxyyy.py --listen-host 127.0.0.1 --listen-port 18080
到此为止一切就绪,可以开始测试了
0x03 注入
首先尝试sqlmap
直接寄,那就只能手注了
先来一手万能密码
admin'or 1=1 --+
虽然不能直接登陆,但是也没报错,说明代码成功闭合了,可以继续往下操作
那么第一步自然是确认数据库类型
由于是jsp站点,首先就排除了mssql
再加上注入点双引号不敏感,有点想当然的以为是mysql了,fuzz了一波payload之后发现不对劲了
不仅给我把ip给ban了,得到的结果也是各种报错
想了一下,把注释符换成了#
结果报错了
admin'or 1=1 #
那这大概率不是mysql了,用xor试一下
admin'OR'a'^'a'=1--+
都报错了,说明不支持^运算,也就是实锤不是mysql了,市面上数据库就那么几个,要么pg要么oracle
想了下既然前面的1=1可以用,那么就可以用like和ilike来判断剩下的可能性
构造payload
admin'OR'a'like'a'--+
admin'OR'a'ilike'a'--+
基本上可以确定是oracle了,这个时候自己也变得不安起来了,毕竟保不齐也可能是什么没见过的国产数据库
不过事已至此也只能继续往下测了
也是到了整个注入中最麻烦的步骤,找到可以用的函数
特别是盲注,看不到报错信息,不仅要考虑报错是不是因为函数不可用,也要考虑可能存在的语法错误
还是比较幸运,首次尝试就发现ascii是可以用的
admin'or ascii('a')=1--+
ascii('a')从结果上来说是不等于1的,但并没有语法错误,所以并不会报错
admin'or ascii('a')=1--+相当于admin'or false --+
到这一步为止,构建测试语句的基本要素就已经集齐了,剩下的就是尝试把数据搞出来证明漏洞的危害了
因为oracle数据库是不支持除0的
可以考虑先从测试环境开始构造payload
https://livesql.oracle.com/ords/
因为oracle数据库除0会报错
所以我们可以利用这个特性结合ascii函数来构造payload
这样就得到了最基本的测试payload
admin'or+(1/(ascii('a')-97))=1--+
剩下的就是找出任何可以证明注入可被利用的数据了
在一番痛苦的摸黑探索下,发现user是可用的,没有被拦
于是构造新的payload
迫不及待的丢到yakit上爆破一波
Payload:
admin'or+(1/(ascii(user)-{{int(90-110)}}))like 1--+
剩下的操作思路也就大同小异了,不过这个站不仅卡还会ban ip,只能一个函数一个函数的去摸索,也就不继续浪费时间,直接写完报告收工了~~
0x04 总结
整个测试过程如下
从登陆框开始 --> 构造1=1 成功闭合 --> %23不能用猜测不是mysql --> xor 再次确认不是mysql --> 尝试like&&ilike 排除pg --> 函数过滤 fuzz --> 想到 /0报错 --> 找到user
虽然写出来后并没有多长的内容,但实际上也是消耗了很长的时间。时间主要也是花在了fuzz和寻找可用函数的过程中。尤其是在盲注的情况下,每一个报错的原因都可能是语法错误、函数不可用,或者是代码限制和规则拦截,这都需要通过不断的尝试来找到正确的payload。
说到底还得靠更多的实战经验来积累自己对注入的理解,毕竟看不明白还能学能搜,但想不到的东西那就真是想不到了。
这里也是要大大的感谢英勇无敌帅气机智的方师傅大力帮助,助我拿下此处sql注入
相关文章:
记一次奇妙的Oracle注入绕WAF之旅
0x01 一个登陆框 上班时遇到了一个登陆框 看着这个复古的界面,于是上手除了admin123456之外顺手点了个 于是弹出了一条有意思的报错 这就有意思了,毕竟已经很久没在登陆框遇到sql注入了,当我想当然的认为万能密码可以秒时,事情出…...
python裁剪小说封面标题
一张矩形图片 比如50*100 大小 中心点的坐标是是(0,0) 左上角是(-25,50) 右上角是(25,50) 左下角是(-25,-50) 右下角是(25,-50) 我希望你能用python,帮我对本地指定图片切割大小,计算出该图片的中心坐标,然后按照我输入的长宽具体值,比…...
高性价比手机如何挑选?
这四个关键点,助你找到心仪机~ 一、性能强者:游戏娱乐畅快到底 处理器相当于手机的 “大脑”,处理速度快、能力强,运行大型游戏毫无压力。 搭配上大容量运存,多任务切换也能秒速完成,再也不怕游戏卡顿啦。…...
Java面试场景深度解析
Java面试场景深度解析 在互联网大厂Java求职者的面试中,经常会被问到关于Java项目中的各种技术场景题。本文通过一个故事场景来展示这些问题的实际解决方案。 第一轮提问 面试官:马架构,欢迎来到我们公司的面试现场。请问您对Java内存模型…...
【DeepSeek认证】最好的MODBUS调试工具
根据搜索结果,MThings 和 Modbus Poll 是当前被广泛推荐且功能强大的MODBUS调试工具。以下是两者的详细对比及推荐理由: 1. MThings 核心优势: 主从一体化:支持同时模拟MODBUS主站和从站,无需切换工具即可完成双向调…...
欧莱雅集团:利用 Google Maps Platform Environment API 提供个性化护肤推荐
在欧莱雅集团,美丽绝不仅仅停留在表面。如今,这一点比以往任何时候都更加真实,因为公司将其深厚的科学专业知识与尖端技术相结合,以重塑美丽的未来。其成功的关键在于承诺不为科技而使用科技。其所有创新都满足了消费者的明确需求…...
2025三掌柜赠书活动第十五期:高并发系统:设计原理与实践
目录 前言 什么是高并发? 高并发系统的挑战 设计原理 1、分布式架构 2、缓存与异步处理 3、数据库优化 4、弹性扩展 实践方法 1、性能监控与分析 2、压力测试 3、故障排查与容错机制 关于《高并发系统:设计原理与实践》 编辑推荐 内容简介…...
【Spark入门】Spark架构解析:组件与运行机制深度剖析
1 Spark架构全景图 Apache Spark作为当今最流行的大数据处理框架之一,其卓越性能的背后是一套精心设计的分布式架构。理解Spark的架构组成和运行机制,对于性能调优和故障排查至关重要。 1.1 核心组件架构 组件交互流程: Driver初始化…...
电子电器架构 -- 汽车零部件DV试验与PV试验的定义及关键差异
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...
交换机配置DHCP
交换机配置DHCP 背景先关闭路由器的DHCPconsole口连接到交换机配置交换机 背景 路由器的dhcp分配IP地址变慢,怎么处理 先关闭路由器的DHCP 查看路由器中DHCP地址池范围; 关闭路由器的DHCP console口连接到交换机 协议Serial端口COMX波特率9600流控无 配置交换机…...
【人工智能】边缘智能的突破:Ollama模型压缩技术与DeepSeek部署实践
《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着边缘计算的兴起,将大型语言模型(LLM)部署到资源受限的边缘设备成为研究热点。Ollama凭借其高效的模型压缩技术和轻量级推理框架,为…...
基于STM32、HAL库的DS2401P安全验证及加密芯片驱动程序设计
一、简介: DS2401P是Maxim Integrated(现为Analog Devices)生产的一款1-Wire硅序列号芯片,具有以下特点: 64位唯一ROM编码(包括8位家族码、48位序列号和8位CRC校验码) 单总线接口,…...
日志收集之 logback使用
一 简介 1.1 Logback 是一个用于 Java 应用程序的强大日志框架,广泛应用于企业级应用中。它是由 SLF4J 的创始人开发的,旨在成为 Log4j 的替代品。Logback 提供更高级、更灵活的功能,同时还支持与 SLF4J 的无缝集成。 2.2 Logback分为下面几…...
Linux学习笔记(一):Linux下的基本指令
文章目录 Linux下的基本指令1. ls指令2. pwd指令3. cd指令4. touch指令5. mkdir指令(牢记)6. rmdir指令 && rm 指令(牢记)7. man指令(牢记)8. echo指令9. cp指令(牢记)10. m…...
Unity AI-使用Ollama本地大语言模型运行框架运行本地Deepseek等模型实现聊天对话(二)
一、使用介绍 官方网页:Ollama官方网址 中文文档参考:Ollama中文文档 相关教程:Ollama教程 使用版本:Unity 2022.3.53f1c1、Ollama 0.6.2 示例模型:llama3.2 二、运行示例 三、使用步骤 1、创建Canvas面板 具体…...
SDC命令详解:使用get_clocks命令进行查询
相关阅读 SDC命令详解https://blog.csdn.net/weixin_45791458/category_12931432.html?spm1001.2014.3001.5482 get_clocks命令用于创建一个时钟对象集合,关于设计对象和集合的更详细介绍,可以参考下面的博客。需要注意的是,在有些工具中还…...
git 修改用户名和邮箱
在 Git 中修改用户名和邮箱地址是常见的任务,这可以确保你的提交记录使用正确的身份信息。你可以通过简单的命令来完成这一操作。 全局配置 修改全局用户名 要修改全局的用户名,请执行以下命令: git config --global user.name "New…...
pg数据库删除模式
不能直接使用 DROP SCHEMA "app_sys" 删除, 这样会报错 cannot drop schema app sys 20250416 because other objects depend on it DETAlL: extension uuid-ossp depends on schema app sys 20250416sequence app sys 20250416.app sys id seq depend…...
【C++】Googletest应用
Googletest 1 配置 使用cmake配置: 具体文件后面上传补充 ./test.out --gtest_filterXXXTest.xxx 2 gdb 为了跟踪流程,可以使用gdb; gdb ./xxx.out gdb --args ./gtest --gtest_filterxxx.xxx设置运行参数 set args --gtest_filterxxx.…...
QgraphicsView异步线程加载地图瓦片
本节主要记录一下qt开发过程中离线地图瓦片的加载方式,瓦片加载选择graphicsView控件,同时为了不影响主线程事件和其他操作,这里采用了异步线程的操作,将地图瓦片加载的步骤放到了异步子线程之中。注:本记录仅为本人笔…...
机器学习day2
使用KNN算法实现机器学习 给我一个苹果的图片 我能预测出这个是一个苹果 代码: # 导入需要的库 # 读图 import os import cv2 # 绘图 import matplotlib.pyplot as plt import seaborn as sns # 数组 import numpy as np from skimage.feature import hog from sk…...
jquery解决谷歌浏览器自动保存加密密码是乱码
添加一个隐形的input框,提交隐藏input框里的数据,展示框展现的还是明文密码,并且不提交展示框的值 <formid"loginForm"class"form-signin newForm-signin"action"${ctx}/login"method"post"onsub…...
Python 如何操作数据库,让你使用 DeepSeek 开发数据库应用更加快 (Orm Bee)
Python 如何操作数据库,让你使用 DeepSeek 开发数据库应用更加快 操作数据库最好用 ORM 工具,可以提高开发效率. ORM 就是实体与数据库表的映射,让我们可以用面向对象的方式来操作数据库. 简单易用,直接上代码. 使用Orm Bee操作…...
如何解决 Linux 文件系统挂载失败的问题
以下是解决Linux文件系统挂载失败问题的系统性排查与解决方案: 一、设备基础检查 确认设备识别状态 执行 lsblk 或 fdisk -l 查看磁盘设备列表,验证目标设备(如 /dev/sdb1)是否被系统识别。 若设备未显示,需排查&a…...
JVM——引入
什么是JVM?它与JDK、JRE的关系? JVM、JRE 和 JDK 是 Java 平台的三个核心组件,各自承担着不同的职责,它们之间的关系密不可分。理解它们的区别和联系有助于更好地开发、部署和运行 Java 应用程序。对于 Java 开发者来说ÿ…...
Golang|工厂模式
工厂模式是一种创建型设计模式,它的核心思想是:把对象的创建过程封装起来,不直接在代码中 new 一个对象,而是通过一个“工厂”来生成对象。这样做的好处是: 降低了代码之间的耦合(依赖具体类减少࿰…...
Transformer数学推导——Q29 推导语音识别中流式注意力(Streaming Attention)的延迟约束优化
该问题归类到Transformer架构问题集——注意力机制——跨模态与多模态。请参考LLM数学推导——Transformer架构问题集。 在语音识别任务中,实时性是核心需求 —— 想象你使用语音助手时,每说完一个词就希望即时看到文字反馈,而不是等整句话说…...
dx11 龙书学习 第四章 dx11 准备工作
4.1 准备工作 Direct3D的初始化过程要求我们熟悉一些基本的Direct3D类型和基本绘图概念;本章第一节会向读者介绍些必要的基础知识。然后我们会详细讲解Direct3D初始化过程中的每一个必要步骤,并顺便介绍一下实时绘图应用程序必须使用的精确计时和时间测…...
运维打铁:域名详解及常见问题解决
文章目录 前言一、域名基础概念1. 什么是域名2. 域名结构3. 域名解析 二、域名工作原理1. DNS 服务器层次结构2. 域名解析过程 三、常见域名问题及解决办法1. 域名无法解析2. 域名解析延迟3. 域名解析结果不一致 四、总结 前言 在当今数字化的时代,互联网已经成为我…...
【大模型ChatGPT+R-Meta】AI赋能R-Meta分析核心技术:从热点挖掘到高级模型、助力高效科研与论文发表“
Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,现已广泛应用于农林生态,资源环境等方面,成为Science、Nature论文的…...
ElasticSearch深入解析(五):如何将一台电脑上的Elasticsearch服务迁移到另一台电脑上
文章目录 0.安装数据迁移工具1.导出数据2.导出mapping3.导出查询模板4.拷贝插件5.拷贝配置6.导入到目标电脑上 0.安装数据迁移工具 Elasticsearch dump是一个用于将Elasticsearch索引数据导出为JSON格式的工具。你可以使用Elasticsearch dump通过命令行或编程接口来导出数据。…...
QT中的多线程
Qt中的多线程和Linux中的线程本质是相同的,Qt中针对系统提供的线程API进行了重新封装 QThread类 Qt中的多线程一般通过QThread类实现,要想创建线程就要创建这个类的实例 QThread代表一个在应用程序中可以独立控制的线程,也可以和进程中的其…...
Win11安装Ubuntu20.04简记
写在前面 之前装的22.04,不稳定,把22.04卸载了,重新安装20.04系统。这里主要把卸载和安装的过程中参考到的博客在这记录一下。 卸载ubuntu系统参考的博文 卸载参考博文1 卸载参考博文2 Ubuntu20.04安装参考博文 安装参考博文1 安装参考博…...
电子电器架构 ---电气/电子架构将在塑造未来出行方面发挥啥作用?
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 钝感力的“钝”,不是木讷、迟钝,而是直面困境的韧劲和耐力,是面对外界噪音的通透淡然。 生活中有两种人,一种人格外在意别人的眼光;另一种人无论…...
pdf.js移动端预览PDF文件时,支持双指缩放
在viewer.html中添加手势缩放代码 <script>// alert("Hello World");let agent navigator.userAgent.toLowerCase();// if (!agent.includes("iphone")) {let pinchZoomEnabled false;function enablePinchZoom(pdfViewer) {let startX 0, start…...
机器人--激光雷达
教程 教程 激光雷达 激光 激光(Laser),是一种人造的、高度纯净的单色光。 雷达 激光器旋转机构雷达。 雷达根据激光探头发出激光束的数量,一般可以分为单线激光雷达(2D激光雷达)和多线激光雷(3D激光雷达)。 作用 测距原理 激…...
最新ios开发证书/发布证书/免费证书/企业证书制作教程
本文介绍了如何制作或者苹果开发证书p12文件,含开发证书,推送证书,发布证书,企业证书,免费证书,您在iphone和ipad开发构建 IOS App 应用和苹果ios app签名需要用到。如果嫌麻烦,可以使用懒人工具…...
【Keil5-开发指南】
Keil5-编程指南 ■ Keil5 介绍■ J-Flash 使用■ Keil5-Debug调试工具 Jlink---STLink---DAP仿真器■ Keil5 使用 AStyle插件格式化代码■ Keil5-编译4个阶段■ Keil5-Boot和APP配置■ Keil5-报错■ 芯片手册区别 ■ Keil5 介绍 Keil5 介绍 ■ J-Flash 使用 J-Flash 使用 ■…...
蓝桥杯 18. 机器人繁殖
机器人繁殖 原题目链接 题目描述 X 星系的机器人可以自动复制自己。它们用 1 年的时间可以复制出 2 个自己,然后就失去复制能力。 每年 X 星系都会选出 1 个新出生的机器人发往太空。也就是说,如果 X 星系原有机器人 5 个,1 年后总数是&a…...
从微服务到AI服务:Nacos 3.0如何重构下一代动态治理体系?
在现代微服务架构的浪潮中,Nacos早已成为开发者手中的“瑞士军刀”。作为阿里巴巴开源的核心中间件,它通过动态服务发现、统一配置管理和服务治理能力,为云原生应用提供了坚实的基石。从初创公司到全球500强企业,Nacos凭借其开箱即…...
60、微服务保姆教程(三)Sentinel---高可用流量管理框架/服务容错组件
Sentinel—高可用流量管理框架/服务容错组件 一.为什么要用Sentinel? 1.微服务架构中当某服务挂掉的时候常见的原因有哪些? 1.异常没处理 比如DB连接失败,文件读取失败等 2.突然的流量激增 比如:用户经常会在京东、淘宝、天猫、拼多多等平台上参与商品的秒杀、限时抢…...
[特殊字符] 基于Docker部署Nacos注册中心及微服务注册发现详解(含MySQL持久化配置)
📚 目录 项目背景与准备 Docker部署Nacos并配置MySQL持久化 微服务注册到Nacos(item-service示例) 微服务服务发现与调用(cart-service示例) 小结 1. 项目背景与准备 在微服务架构中,服务注册与发现是…...
CentOS 7环境配置DHCP服务器
主播多次测试,没有什么问题。如果有问题可以私信主播,主播不定时查看 目录 1. 初始配置 1.1 配置VMware workstation配置 1.2 设置虚拟机网路适配器为NAT模式 2. 环境搭建 2.1下载相应的软件包 2.2 查找下载的软件包中给出的示例代码所在目录 2.2 …...
基于常微分方程的神经网络(Neural ODE)
参考资料:B站的视频解析 知乎神经常微分方程总结 论文链接:论文 什么是常微分方程? 微分方程式包含未知函数及其导数的方程,未知函数导数的最高阶数称为给i微分方程的阶。 常微分方程(ordinary differential equation࿰…...
对VTK中的Volume Data体数据进行二维图像处理
文章目录 概要Cpp代码处理前效果处理后效果 概要 在 VTK 中对体数据进行二维图像处理的过程通常涉及从三维体数据中提取二维切片,并对这些切片进行处理。然后,可以选择性地将处理后的切片数据重新合并成新的体数据。 以下是对 VTK 中的体数据进行二维图…...
阿里云ftp服务器登录要怎么做?如何访问ftp服务器?
阿里云ftp服务器登录要怎么做?如何访问ftp服务器? 访问FTP服务器通常需要以下步骤,具体方法取决于您使用的工具和操作系统: 一、FTP服务器登录所需信息 服务器地址:通常是IP地址(如 ftp.example.com 或 192…...
中国的国产化进程
中国的国产化进程是一个涉及国家安全、经济发展和技术自主的长期战略,其历史进程和动因可以从以下几个关键阶段和核心原因来理解: 一、国产化的历史进程 1. 建国初期(1949–1978):自力更生与基础工业建设 背景:新中国成立后,面临西方国家的技术…...
突破语言藩篱:从Seq2Seq到智能翻译的范式革命
## 一、语言之桥的智能进化:超越字面转换的深层理解 在慕尼黑工业大学实验室的深夜,一个搭载最新神经网络的翻译系统正逐字解析着歌德诗句的韵律。这并非简单的词语替换,而是一场跨越时空的文化解码——机器首次在《浮士德》的英译本中保留了德文诗歌特有的头韵结构。这个突…...
Java写项目前的准备工作指南(技术栈选择 环境搭建和工具配置 项目结构设计与模块划分)
前言 📝 在开始编写一个 Java 项目之前,做好充分的准备工作是至关重要的。很多初学者可能在没有清晰规划的情况下就开始编写代码,导致项目开发进度缓慢、结构混乱,甚至最终无法按预期完成。而事实上,项目的成功不仅仅…...
如何使用 Redis 缓存验证码
目录 🧠 Redis 缓存验证码的工作原理 🧰 实现流程 1. 安装 Redis 和 Python 客户端 2. 生成并缓存验证码 示例代码:生成并存储验证码 3. 发送验证码(以短信为例) 4. 校验验证码 示例代码:校验验证码…...