资安学习路上-网站常见漏洞与 Injection的爱恨情仇2

SQL injection

先来简单练习

https://www.hacksplaining.com/exercises/sql-injection#/start
1.练习网站随便输入一组帐密,发现网站後端在验证帐号後,在他的log纪录里,有错误讯息出现(Invalid credentials),被挡下来惹。
https://ithelp.ithome.com.tw/upload/images/20220508/20148431vb0G0v0Fzj.png
2.尝试在密码後面加个单引号乱搞一下,log一样出现错误讯息,会发现因为资料库语法,引号是要成双成对,所以这边多一个单引号,故无法做解析。
https://ithelp.ithome.com.tw/upload/images/20220508/20148431XkeLJNryB3.png
3.接着看一下他的资料库SQL语法,分别为SELECT "栏位"、FROM "资料表"、WHERE "条件"、AND "条件"(帐号密码都要符合,所以用AND)。
https://ithelp.ithome.com.tw/upload/images/20220508/20148431sSkxyZwqqh.png
4.为了方便了解,上面输入内容可以在下面看到
https://ithelp.ithome.com.tw/upload/images/20220508/20148431mR4HPbbZfI.png
5.并尝试输入单引号後,发现下面LIMIT变成紫色,表示异常,有机会有SQL injection。
https://ithelp.ithome.com.tw/upload/images/20220508/20148431pgEdgycTXU.png
6.接着尝试输入其他万用字串' or 1=1--(须注意要空白,打圈圈处),其中,or表示前面或後面条件只要1个有过即可,而1=1是一定成立,最後再用--注解掉後面的LIMIT指令,成功偷用别人帐号,不需要密码进行登入。
https://ithelp.ithome.com.tw/upload/images/20220508/20148431ZglqxMDGAH.png
https://ithelp.ithome.com.tw/upload/images/20220508/20148431axjCavgTil.png

SQL基础

在进一步学习SQL injection前,先来了解一下下,SQL基础知识跟指令。
1.一个资料库(DataBase)里面会有多个资料表(Table),每个资料表里面会有多个资料栏位(Column),每个资料栏位里面会有多个资料(Data)。

2.上面每个项目,我们都可以利用SQL语法进行,新增、删除、修改、查询。
https://ithelp.ithome.com.tw/upload/images/20220508/20148431WFvbiZrGrB.png

上图取自台科大资安社课教材

3.新增-Create

  • 新增资料库 Create DATABASE "资料库名称";

上图取自台科大资安社课教材

  • 新增资料表,方法1
CREATE TABLE `myDb`.`employees` (   		
     #在myDb资料库里新增employees资料表
  
`id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,     
     #第一个栏位id,资料型态是int(整数),NOT NULL为栏位特性
     #需特别注意每个资料表都会有一个PRIMARY KEY(PK)
  
`name` VARCHAR(100) NOT NULL,	       
     #第二个栏位name,资料型态是VARCHAR(字串),数字为字串有几个字元
`department` VARCHAR(100) NOT NULL,
`address` VARCHAR(255) NOT NULL,
`salary` INT(10) NOT NULL
);
  • 增资料表,方法2(不加单引号也行)
    https://ithelp.ithome.com.tw/upload/images/20220508/20148431rG6AxB40N9.png

上图取自台科大资安社课教材

4.更新资料表栏位-ALTER

ALTER TABLE `myDb`.`test`      #针对test这个资料表,进行修改
ADD `new_col` INT NOT NULL     #新增new_col栏位,资料型态为int
AFTER `name`;			       #新增在name後面

ALTER TABLE table_name ALTER COLUMN column_name datatype; 
    #修改table_name资料表,里面的column_name栏位的资料型态为 datatype
ALTER TABLE table_name DROP COLUMN column_name;
    #删除table_name资料表,里面的column_name栏位

5.新增资料==>用塞的-INSERT

INSERT INTO `myDb`.`employees` (`id`, `name`,`department`,`address`,`salary`)
    #先讲新增`myDb`资料库里,`employees`资料表里的那些栏位
VALUES	
(4, 'Abraham','Development','America','540000'),
(5, 'Bob','Marketing','Korea','580000');
    #再讲每个栏位对应的内容(VALUES)

6.查询资料==>SELECT 栏位 FROM 资料库的哪个资料表,* 表示所有资料栏位
https://ithelp.ithome.com.tw/upload/images/20220508/20148431KDxIvTQK53.png

上图取自台科大资安社课教材

7.更新资料==>UPDATE 资料库的哪个资料表 SET 哪个栏位为...
WHERE限制条件一定要加,不然所有department跟salary栏位都会改。
https://ithelp.ithome.com.tw/upload/images/20220508/20148431WvN0hPNBtw.png

上图取自台科大资安社课教材

8.删除资料
限制条件WHERE要加,不然会删掉整个资料表。
https://ithelp.ithome.com.tw/upload/images/20220508/20148431nHm7olPY0O.png

上图取自台科大资安社课教材


<<:  [自学笔记]LINQ资料查询技术

>>:  学习日记-2

NNI执行的流程

一个Experiment的运行逻辑是: • Tuner 接收搜索空间,生成configuration...

【Lua】用 Fengari 让 Lua 取代 JavaScript 吧!

大家好! 众所皆知,能开发网页的动态程序语言以 JavaScript 为首选,毕竟几乎所有浏览器都支...

DAY23 model展示

>model.py from logging import root from django....

那些被忽略但很好用的 Web API / BroadcastChannel

里长办公室广播:张君雅小妹妹,恁兜欸泡面已经煮好了! 前两天已经认识了 PostMessage 和...

从零开始学3D游戏设计:基础粒子效果

这是 Roblox 从零开始系列,在效果章节的单元,今天你将学会如何透过粒子发射器来做出基本的粒子特...