表的结构
说SQL的概念,和学习本模块能够了解到对SQL的了解,和DML、DDL、DCL的功能。
本关卡是让我们根据Employees表,来查找名字为Bob的department值,知道这个意思之后,就可以很容易地构造一下的sql语句进行提交了。
select department from Employees where first_name='Bob'抓包,查看请求的路径。发现是SqlInjection/attack2的请求路径。
使用IDEA的全局搜索快捷键SHIFT+SHIFT,然后输入SqlInjection/attack2,进行查找,进入第一个。
源码的简要分析
要求我们把Tobi的部门department更改为销售部Sales,构造以下的SQL语句即可。
update employees set department = 'Sales' where first_name = 'Tobi'抓包,得到请求的url是SqlInjection/attack3,在源码中进行搜索
本题是让我们添加一列phone数据(varchar(20))。
alter table employees add phone varchar(20)没什么好说的,和前面的差不多
本题要求我们把表grant_rights的权限给用户unauthorized_user,关于DCL的详情可见oracle grant的用法
grant insert on grant_rights to unauthorized_user没什么好说的,和前面的差不多
说明了什么是SQL注入,SQL注入的简单例子。
说明了SQL注入的危害。
说明了SQL注入的严重性。
这关要求我们把sql语句进行闭合,达到查询所有数据的效果。
"SELECT * FROM user_data WHERE first_name = 'John' AND last_name = '" + lastName + "'";构造以下语句即可。我这里使用的百分百成立的条件是or 1=1该语句不管前面的语句是否为真还是假,最终的结果一定为真。
SELECT * FROM user_data WHERE first_name = 'John' AND last_name = 'Smith' or '1' = '1'没什么好说的,都是没有经过预处理就进行sql语句的执行,代码不安全。
本关要求我们构造一条sql语句,来查询所有的用户信息。
"SELECT * FROM user_data WHERE login_count = " + Login_Count + " AND userid = " + User_ID;如果要查询所有的用户信息就需要让条件百分百成立。我这里使用的百分百成立的条件是or 1=1该语句不管前面的语句是否为真还是假,最终的结果一定为真。
SELECT * FROM user_data WHERE login_count = abc AND userid = 1 or 1 = 1本关主要说SQL的字符型注入,然后要求构造恶意的sql语句来查询所有的数据。
"SELECT * FROM user_data WHERE first_name = 'John' AND last_name = '" + lastName + "'";根据前一关的思路进行构造即可,由于本关卡是字符串注入,因此需要注意的是需要对单引号进行闭合。
SELECT * FROM employees WHERE last_name = ' abc ' AND auth_tan = ' 1 ' or '1' ='1没什么好说的,这里使用的是没有预编译处理的语句,所以不安全。
本关要求我们修改Smith的薪水salary超过Tobi和Bob的薪水salary。因此需要我们使用到update来对数据进行修改,这里使用到的注入方式是堆叠注入。
堆叠注入就是使用分号;来执行多条sql语句的,堆叠注入不管前面的语句是否正确,后面的语句都会执行,构造以下的恶意请求,达到我们执行后面sql语句进行修改数据的目的。这里前面的单引号是起到对前面语句闭合的作用。
name=Smith&auth_tan=3SL99A'; update employees set salary = 999999 where last_name='Smith'; -- +为了美观,我这里使用burpsuite进行提交。
没什么好说的,这里使用的是没有预编译处理的语句,所以不安全。
题目要求我们删除Access_log表,该表是用来记录日志的。很简单,继续使用堆叠注入即可,首先要闭合前面的sql语句,然后在插入一条要执行的删除Access_log表的语法即可。
没什么好说的,这里使用的是没有预编译处理的语句,所以不安全。