WebGoat SQL Injection (intro) 源码分析

news2024/10/22 2:43:11

首先了解 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")
  @ResponseBody
  public 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.coloradmin.cn/o/2220470.html

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

相关文章

基于递推式最小二乘法的PMSM参数辨识MATLAB仿真模型

微❤关注“电气仔推送”获得资料(专享优惠) 模型简介 最小二乘法是一种回归估计法,适用于被辨识的参数与系统输出为线性关 系的情况。它是在一定数据量下,基于系统输出误差的平方和最小的准则对参 数进行辨识的方法。此模型通过…

使用Flask实现本机的模型部署

前言 模型部署是指将大模型运行在专属的计算资源上,使模型在独立的运行环境中高效、可靠地运行,并为业务应用提供推理服务。其目标是将机器学习模型应用于实际业务中,使最终用户或系统能够利用模型的输出,从而发挥其作用。 一、设…

unity 屏幕波动反馈打击效果(附资源下载)

unity 屏幕波动反馈打击效果 一枪打出去整个屏幕都回波动的效果反馈。 知识点: 1、动画事件 2、屏幕后处理 效果如图:(波动速度浮动都可调整) 附件下载

TH-OCR:高效的文字识别工具与护照阅读器的完美结合

在数字化的时代,高效准确的文字识别工具变得越来越重要。今天我要给大家介绍一下 TH-OCR。 TH-OCR 是一款功能强大的文字识别软件,它能够快速准确地识别各种文档中的文字,大大提高了工作效率。 而其中,TH-OCR 在护照阅读器方面的应…

Gitlab 完全卸载–亲测可行

1、停止gitlab gitlab-ctl stop2.卸载gitlab(注意这里写的是gitlab-ce) rpm -e gitlab-ce 3、查看gitlab进程 ps aux | grep gitlab 4、杀掉第一个进程(就是带有好多.............的进程) 5、删除所有包含gitlab文件 find / …

工业自动化为什么依赖光耦隔离器 --- 腾恩科技

光耦合器隔离器在工业自动化中必不可少,可确保信号传输,同时保护敏感电子设备和人员免受高压影响。选择合适的光耦合器隔离器取决于对操作环境和隔离要求的了解。本文将重点介绍在为工业应用选择光耦合器隔离器时需要考虑的关键因素。 光耦合器隔离器在工…

电影评论网站开发:Spring Boot技术指南

3系统分析 3.1可行性分析 通过对本电影评论网站实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本电影评论网站采用SSM框架,JAVA作为开发语言&#…

python获取当前鼠标位置的RGB值

效果 依赖 pip install Pillow pyautoguisudo apt install gnome-screenshot代码 import pyautogui import timedef get_rgb_at_mouse():try:while True:# 获取当前鼠标的位置x, y pyautogui.position()# 截取当前屏幕图像screenshot pyautogui.screenshot()# 获取鼠标位置…

【C语言备课课件】(下)指针pointer

目录 定义type *var_name;初始化int *p &a; // p指向变量a的地址 空指针NULL,野指针,指针悬挂 解引用指针的算术运算指针与数组 数组名—首指针二维数组指针 行指针列指针 多级指针(进阶)数组指针,指针数组(进阶&#xff09…

ZYNQ:流水灯实验

实验目的 PL_LED0 和 PL_LED1 连接到 ZYNQ 的 PL 端,PL_LED0 和 PL_LED1循环往复产生流水灯的效果,流水间隔时间为 0.5s。 原理图 程序设计 本次实验是需要实现两个LED的循环熄灭点亮,时间间隔是0.5S,对时间间隔的控制使用计数器来完成。本…

改变函数调用上下文:apply与call方法详解及实例

目录 改变函数调用上下文:apply与call方法详解及实例 一、什么是 apply 方法? 1、apply 语法 2、apply 示例 二、什么是 call 方法? 1、call 语法 2、call 示例 三、apply 和 call 的共同与差异 1、apply 和 call 的共同点 2、apply…

一文读懂什么是数据即产品(Data as a Product,DaaP)

企业每天都要产生并消费大量数据,但如果这些数据一直保持在原始格式,就很难真正应用起来。因此,为了充分发挥数据的最大潜力,必须改变组织内部处理数据的方式。 “数据即产品”(DaaP)就是这样一种思维方式…

ERROR [internal] load metadata for docker.io/library/nginx:latest

docker执行错误解决方法 1、执行docker pull nginx2、docker build -t xxx:xx

RISC-V笔记——显式同步

1. 前言 RISC-V的RVWMO模型主要包含了preserved program order、load value axiom、atomicity axiom、progress axiom和I/O Ordering。今天主要记录下preserved program order(保留程序顺序)中的Explicit Synchronization(显示同步)。 2. 显示同步 显示同步指的是&#xff1a…

02篇 机械考研复试简历保姆级教程,考研简历联系导师邮件复试调剂超全攻略 导师喜欢看到的简历(附模板)

考研复试简历怎么写?导师喜欢看到的简历(附模板) 复试简历,重要程度max!绝非小事一桩!它就像是你硬核经历的闪亮外衣,条理清晰、逻辑严谨且设计感十足,一定能在导师心中留下深刻印象…

微信小程序-自定义组件

文章目录 微信小程序-自定义组件概述创建和使用数据、方法和属性slot 插槽默认插槽具名插槽 组件样式注意项样式隔离 数据监听组件间通信父传子子传父获取子组件实例 生命周期组件的生命周期组件所在页面的生命周期App、Page与Component生命周期对比冷启动保留当前页面和关闭当…

极氪汽车困局:营销频繁车、产品力不足

“ 极氪汽车的“车上吃火锅”营销活动虽登上热搜,但因频繁忽视老用户和产品力不足的争议,并未赢得消费者好感,反而加剧负面印象。 ” 科技新知 原创 作者丨颜瞾 编辑丨蕨影 近日,背靠吉利集团的极氪…

信息安全工程师(60)计算机病毒分析与防护

计算机病毒分析 介绍 计算机病毒是一种人为制造的程序,它通过不同的途径潜伏或寄生在存储媒体(如磁盘、内存)或程序里。当某种条件或时机成熟时,它会自生复制并传播,使计算机的资源受到不同程度的破坏。 定义&#xf…

Java【多线程】单例模式

目录 单例模式 饿汉模式 懒汉模式 懒汉模式-多线程版 单例模式 单例模式是一种设计模式 设计模式相当于棋谱 棋谱,大佬把一些对局整个推演过程,写出来 设计模式,是属于程序员的棋谱 单例模式(单个实例/对象)&…

Views Page 视图页面

下图中显示的 Views 页面允许自定义网格级别及其相应的 View。 Views (视图) 页面包含两个主要部分: 关卡设计师;请注意,其他设计器页面为在关卡设计器中选择的 View 提供设置;Properties (属性) 窗口&…