1、猜测执行语句
sql注入都需要先猜测后端的查询语句,有时候是语句结构,像闭合的字符串,其他的逻辑运算符,有时候是猜测信息,像查询字段、字段数、表名。
拿到题目,可以分类输入字符串,根据回显推测查询语句。 我个人的基本思路是 先 数字,再字母,再拼接特殊符号。
先试试 1,
再 abc,。没回显,放弃字母。
继续尝试特殊字符,1' --> 没有回显 。1" --> 回显nonono 1; 回显 array
目前猜测(可能不对,但是先猜着,不对再修正),不是单引号闭合,双引号被检测黑名单了,分号可以将查询语句分隔开,能生效。 所以堆叠注入可能性很大。
https://www.cnblogs.com/backlion/p/9721687.html(关于堆叠注入看大佬的文章了解)
简单来说,就是通过分号分隔开多个sql语句,使其同时执行。
堆叠注入的基本思路就是 直接 怼上sql语句。
于是 输入
1;show databases;
有门。 继续查表
1;show tables;
查表。
1;select * from Flag;
又是 nonono。。本来我认为是select 被加上黑名单了。 但是按照绕过select 的思路走不通。
看大佬博客了。
大佬猜测,语句中 有 || 。 就是or的意思。
猜测的语句为
$sql = "select."$_POST["参数"]" ||flag from Flag";
当传入1的时候,能成功;传入字符串查询失败。 (因为是or,只执行前面的了)
绕过 || 的思路也很奇特,用的payload是
*,1
拼接的sql语句 以及 实际执行的。
select *,1 || flag from Flag
select *,1 from Flag