select * from vulin_users where (username LIKE '%b%') AND (age > 20);
') or 1=1 --
select * from vulin_users where (username LIKE '%') or 1=1 -- %') AND (age > 20);
将模糊查询条件闭合,模糊查询条件为空且为永真条件时,看是否会返回全部数据,判断是否有模糊查询漏洞
当存在其他函数编码时,可以测试是否存在编码读取不了的漏洞,;例如直接查询=a时是否会反馈查询结果
select * from vulin_users where (username LIKE '%a%') AND (age > 20);
{"nameb64j":"a"}
{"nameb64j":"') or 1=1 --"}
堆叠注入
遇到注⼊点在结尾的,那么可以进⾏堆叠注⼊测试
在SQL中,分号(;)是⽤来表示⼀条sql语句的结束。试想⼀下我们在 ; 结束⼀个sql语句后继续构造下⼀条语句,
会不会⼀起执⾏?因此这个想法也就造就了堆叠注⼊。⽽union injection(联合注⼊)也是将两条语句合并在⼀
起,两者之间有什么区别么?区别就在于union 或者union all执⾏的语句类型是有限的,可以⽤来执⾏查询语句,
⽽堆叠注⼊可以执⾏的是任意的语句。例如以下这个例⼦。⽤户输⼊:1; DELETE FROM products服务器端⽣成的
sql语句为: Select * from products where productid=1;DELETE FROM products当执⾏查询后,第⼀条显示查
询信息,第⼆条则将整个表进⾏删除。
mysqli_query()只能执⾏⼀条SQL语句,如果这需要执⾏多条SQL语句,就需要使⽤mysqli_multi_query()⽅法,
mysqli_multi_query()可以执⾏多条SQL语句,如果后端代码使⽤这个⽅法去执⾏SQL语句,我们就可以利⽤堆叠
注⼊获取后台数据库的信息。
换⾏符:\n
表现形式:%0A 回⻋
select * from vulin_users where (username LIKE '%a%') LIMIT 5;
select * from vulin_users where (username LIKE '%a%') LIMIT 5 and 1=1;
后端给我们加了个反斜杠,把我们传递的特殊符号全部转义了(不⽣效了)
换⾏
select * from vulin_users where (username LIKE '%a%') LIMIT 5;select * from vulin_users
where (username LIKE '%a%') LIMIT 5 and 1=1;
select * from vulin_users where (username LIKE '%a%') LIMIT 5;\nselect * from vulin_users
where (username LIKE '%a%') LIMIT 5 and 1=1;
宽字节注⼊
使用宽字节注入的前提是:数据库编码得是 gbk 编码
当某字符的⼤⼩为⼀个字节时,称其字符为窄字节当某字符的⼤⼩为两个字节时,称其字符为宽字节。所有英⽂默
认占⼀个字节,汉字占两个字节。
原理
当传递⼀个参数id=1‘得时候,当我们输⼊这个单引号,会被认为是⾮法字符,会被过滤函数添加“\”给过滤掉,所以
我们想要程序接受我们传递得参数中包含单引号,那么就需要把这个转义字符“\”⼲掉
\ 斜杆的编码为 %5c
乗:%81%5c
'
\' ===> %81%5c%21
乗
传参⼀个字符想办法凑成⼀个gbk字符,例如:‘運’字是%df%5c
所以添加%df后就变成了 運' 单引号就能正常使⽤了
GBK编码表:
https://www.qqxiuzi.cn/zh/hanzi-gbk-bianma.php
第15节课作业
1. 实际操作课堂讲解的yakit sql注入靶场,截图
2. 堆叠注入的原理是什么
mysqli_query()只能执⾏⼀条SQL语句,如果这需要执⾏多条SQL语句,就需要使⽤mysqli_multi_query()⽅法,
mysqli_multi_query()可以执⾏多条SQL语句,如果后端代码使⽤这个⽅法去执⾏SQL语句,我们就可以利⽤堆叠
注⼊获取后台数据库的信息。
3. 堆叠注入的利用场景是什么
遇到注⼊点在结尾的,那么可以进⾏堆叠注⼊测试
4. 宽字节注入的原理是什么
当传递⼀个参数id=1‘得时候,当我们输⼊这个单引号,会被认为是⾮法字符,会被过滤函数添加“\”给过滤掉,所以我们想要程序接受我们传递得参数中包含单引号,那么就需要把这个转义字符“\”⼲掉,\ 斜杆的编码为 %5c,传参⼀个字符想办法凑成⼀个gbk字符,例如:‘運’字是%df%5c所以添加%df后就变成了 運' 单引号就能正常使⽤了
5. 实操sqli靶场36关宽字节注入