WebGoat SQL Injection (intro) 源码分析

首先了解 java 中 mysql 的连接:java连接Mysql

WebGoat SQL Injection (intro)

10

根据提示:下面两个输入框只有一个受到 sql 注入攻击。题目要求是检索到所有数据

发现请求路径为 SqlInjection/assignment5b

定位到所在文件如下,根据代码可知:

  1. 使用的 PreparedStatement 执行 sql 语句,并且 SQL 语句中,Login_Count的值使用占位符 ? 代替,从而避免了Login_Count 值受到 sql 注入攻击;
  2. 并且判断了Login_Count 值是否为数字类型;
  3. 而userid 值在 sql 语句中并未使用占位符,而是依然采用拼接 sql 语句的方式,从而导致存在 sql 注入。

public class SqlInjectionLesson5b extends AssignmentEndpoint {//表明dataSource是一个LessonDataSource类型的对象。private final LessonDataSource dataSource;public SqlInjectionLesson5b(LessonDataSource dataSource) {this.dataSource = dataSource;}@PostMapping("/SqlInjection/assignment5b")@ResponseBodypublic AttackResult completed(@RequestParam String userid, @RequestParam String login_count, HttpServletRequest request)throws IOException {return injectableQuery(login_count, userid);}protected AttackResult injectableQuery(String login_count, String accountName) {//SQL 语句,Login_Count的值使用占位符 ?String queryString = "SELECT * From user_data WHERE Login_Count = ? and userid= " + accountName;//连接数据库。try (Connection connection = dataSource.getConnection()) {//创建一个 prepareStatement 对象,用于执行 SQL 查询。PreparedStatement query = connection.prepareStatement(queryString, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);int count = 0;try {count = Integer.parseInt(login_count);  //判断字符串login_count是否为整数} catch (Exception e){...}query.setInt(1, count);  //将query语句中的第一个参数占位符(索引从1开始)Login_Count替换为count的值// String query = "SELECT * FROM user_data WHERE Login_Count = " + login_count + " and userid// = " + accountName, ;try {ResultSet results = query.executeQuery();...} }
}

所以可知userid 值存在 sql 注入,并且Login_Count 的值需要输入数字类型才行

所以输入如下,即可获取所有查询数据

11

执行后定位到代码所在文件,可以看出使用Statement 的方式执行 sql 语句,并且 name 和 auth_tan 是使用字符串拼接的的方式插入到 sql 语句中,且未进行任何过滤

题目要求是查询到所有数据。可以构造如下语句成功查询

拼接后所执行的 sql 语句为

SELECT * FROM employees WHERE last_name = '' or 1=1 --+' AND auth_tan = ''

12

上一题仅仅是获取到全部员工的列表信息,这次题目要求将数据库中自己的工资修改为比 Tobi 和 Bob 的工资高。利用联合查询,同时执行多条 sql 语句

' or 1=1; Update employees SET SALARY=99999 where USERID=37648 --

13

题目显示存在一个 access_log 表,记录了我们的操作,现在需要把它删除。观察源码

执行的 sql 语句的含义:用于从名为access_log的数据库表中检索数据。这个查询的目的是找出表中所有action列中包含特定字符串(即变量action的值)的记录。

String query = "SELECT * FROM access_log WHERE action LIKE '%" + action + "%'";

与上一题思路相同,再第二句SQL语句中执行 DROP 命令,删除access_log表中的数据。所以构造 sql 语句

' or 1=1; drop TABLE access_log --+

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

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

相关文章

电影评论网站开发:Spring Boot技术详解

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了电影评论网站的开发全过程。通过分析电影评论网站管理的不足,创建了一个计算机管理电影评论网站的方案。文章介绍了电影评论网站的系统分析部分&…

【uniapp】使用Promise封装request

目录 1、创建config目录 2、创建settings.js 3、创建目录utils 4、创建request.js 5、创建api目录 6、创建apis.js文件 7、业务系统调用 7.1 业务系统banner 7.2 业务系统荣誉页面(传参) 前言:使用Promise封装request 1、创建config…

Python实现火柴人的设计与实现

1.引言 火柴人(Stick Figure)是一种极简风格的图形,通常由简单的线段和圆圈组成,却能生动地表达人物的姿态和动作。火柴人不仅广泛应用于动画、漫画和涂鸦中,还可以作为图形学、人工智能等领域的教学和研究工具。本文…

前端学习---(1)HTML

一个后端狗, 在公司悄摸得学习前端技术 在公司上班时间看视频影响不太好 按照这个来吧: https://gitee.com/chinese-gitee/Web 前端基础要学: HTML, CSS,JS 浏览器 浏览器中最重要的是渲染引擎(浏览器内核),JS引擎(常见的V8引擎) 渲染引擎: 用来解析 HTML与CSS。渲染引擎决定了…

UNIX网络编程-传输层

概述 传输层主要包括:TCP、UDP、SCTP(流控制传输协议)! 绝大多数客户端/服务器网络应用都使用TCP/UDP。SCTP是一个较新的协议,最初设计用于跨因特网传输电话信令。 这些传输协议都转而使用网络协议IP:或是…

2023年华为杯数学建模竞赛题F论文和代码

强对流降水临近预报建模与优化 对问题一,为了实现基于前一小时(10帧)的实测雷达观测量(ZH、ZDR、KDP),对后续一小时(10帧)的ZH进行预报,本文首先建立了线性拟合与RMSE双驱…

matlab相位图

% 清空工作空间和命令窗口 clear; clc; % 模拟生成时间t,位移y(t)和角位移theta(t) t linspace(0, 100, 1000); % 时间从0到100,包含1000个点 y 1e-5 * sin(2 * pi * 0.1 * t) .* exp(-0.01 * t); % 位移y(t) 振荡衰减 theta 1e-6 * cos(2 * pi * …

第11章 索引(postgresql v17)

V17 Chapter 11. Indexes 索引是增强数据库性能的常用方法。索引允许数据库服务器查找和检索特定的行,比没有索引要快得多。但是索引也会给整个数据库系统增加开销,因此应该合理使用索引。 1、介绍 假设我们有一个类似这样的表: CREATE TABLE test1 …

验证archive_command配置是否正确

要验证 archive_command 配置是否正确,你可以按照以下步骤进行: ‌检查配置文件‌: 确保 postgresql.conf(或你的 PostgreSQL 实例使用的任何自定义配置文件)中的 archive_command 已经设置为你想要的命令。 ‌重启 …

Python 网络编程:端口检测与IP解析

Python 网络编程:端口检测与IP解析 在现代网络编程中,了解如何检查端口状态以及根据IP地址解析主机名是非常重要的技能。本文将介绍如何使用Python实现这两个功能,并提供相应的示例代码供读者参考。 一、检查端口是否打开 在网络应用中&am…

self.browser = web.WebView.New(self) NotImplementedError

这个错误是 NotImplementedError,通常意味着你正在调用的某个功能在当前环境或库版本中还没有实现或不支持。在这个错误中,问题出在 web.WebView.New(self),它尝试创建一个 Web 浏览器控件,但未能成功。 在 wxPython 中&#xff…

Qt第十三天:网络编程:TCP和UDP的使用

我发现了有些人喜欢静静看博客不聊天呐, 但是ta会点赞。 这样的人呢帅气低调有内涵, 美丽大方很优雅。 说的就是你, 不用再怀疑哦 ❤️TCP: 一、创建项目,命名为Server,继承QWidget 二、添加Qt设计师…

一套医药订单管理系统。该系统旨在通过数字化手段,实现医药订单的自动化处理、库存精准管理、供应链高效协同,以及数据驱动的决策支持。

1.产品介绍 产品名称: 智医链医药订单一体化管理系统 主要功能: 智能订单处理 自动化订单接收:系统支持多渠道订单接入(如电商平台、医院采购系统、线下门店等),自动抓取订单信息,减少人工录入错误。智能分配与调度:根据库存情况、配送距离、车辆载重等因素,智能分配…

ios在复制方面的兼容

在 iOS 开发中,特别是在使用 JavaScript 与 WebView 交互时,可能会遇到某些事件处理的限制。iOS 对于非用户动作(non-user-initiated actions)的事件处理有特定的安全策略,这是为了防止恶意代码或自动化脚本执行可能导…

如何进行数学家式的学习思考?

如何进行数学家式的学习思考? 学生阶段的数学学习是非常重要的,对这一点很少有人质疑。一提起数学学习,一些学生、家长甚至一些教师认为,学生的数学学习往往侧重于掌握基本概念、公式和解题技巧,通过做题来巩固知识和提…

【飞腾加固服务器】全国产化解决方案:飞腾FT2000+/64核,赋能关键任务保驾护航

在信息安全和自主可控的时代背景下,国产化设备的需求与日俱增,尤其是在国防、航空航天、能源和其他关键行业。高可靠性和极端环境设计的国产加固服务器,搭载强大的飞腾FT2000/64核处理器,全面满足国产自主可控的严苛要求。 性能强…

数字化那点事:一文读懂人工智能

人工智能(Artificial Intelligence, AI)作为当今科技领域的热门话题,正以前所未有的速度改变着我们的生活。从智能家居到自动驾驶,从医疗诊断到金融分析,AI的应用无处不在。本文将通过通俗易懂的语言和丰富的案例&…

springboot 3.2.5集成spring security 只放行get请求,其他请求403

环境配置 jdk 17 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.5</version><relativePath/> <!-- lookup parent from repository --></…

Spring Boot 中的 @RequestMapping 和 Spring 中的 @RequestMapping 有什么区别?

在Spring框架中&#xff0c;RequestMapping注解用于映射Web请求到处理器&#xff08;控制器&#xff09;的方法上。在Spring Boot中&#xff0c;这个注解的使用方式并没有变化&#xff0c;但是Spring Boot作为Spring的扩展&#xff0c;提供了一些额外的便利性&#xff0c;使得开…

【Linux探索学习】第六弹——Linux的工具(一):Ubuntu系统下的软件包管理器

前言&#xff1a; 在Ubuntu系统中&#xff0c;Linux工具为用户提供了强大的命令行操作能力。这些工具不仅使日常任务的自动化成为可能&#xff0c;还大幅提升了生产力。本文将重点介绍一些常用的Linux工具&#xff1a;软件包管理器 注意&#xff1a;本文是所讲解的内容是在Ubun…