sqlilabs1

在第二关中 我首先用and 1=1 和and1=2 得到的结果是不一致,说明我们的语句可以被注入使用,也即存在注入点:

img

接下来我们就要利用这个注入点输入语句了 这个是我们加个‘发现是和上一题是不一样的

输入单引号,根据报错信息确定咱们输入的内容被原封不动的带入到数据库中,也可叫做数字型注入

img

这个时候我们发现第二关相比第一关少了一个单引号,所以我们这题我们就无须加单引号,直接写查询代码就可以了(看看我们上面执行的and其实也就可以知道了)

这个时候我们还是用order by 查询他的字段数,可以发现,依旧为3;
然后我们使用union联合select

在这里发现一个神奇的事情,是不是用–+注释掉后面都可以,没啥区别

这边有一点我需要再明确的:
我们是先获得数据库database()的名字,在通过数据库的名字后查询表名table_name,再知道表名之后,查询字段名column_name
后面和前面的第一关是很类似的,就不详细说

接下来是第三关

当我输入and 1=1 或者是 and1=2的时候,页面没有任何区别,所以这个和第二关不太一样,此时我们再尝试一下输入单引号 页面变成如下

img

从错误报告中我们可以知道

1
2
use near ''1'') LIMIT 0,1' at line 1
SELECT * FROM users WHERE id=('1'') LIMIT 0,1

这个时候我们发现 在输入单引号后,后面多了一个括号,

我们把use的那条补充完整,应该是use near ‘(‘1’’) LIMIT 0,1’ at line 1
这个时候我们可以推测出这次的程序如果要执行代码应该是要(’执行内容’),所以我们尝试一下在’后面加一个括号,让整个语句变成use near ‘(‘1’)’ ‘) limit’ **让我尝试一下 发现他是变成这样的:
use near ‘’) LIMIT 0,1’ at line 1 就像我在第一关说的,(’1’) 因为已经是合法数据,所以就没出现了,符合我的猜想,我一开始说要执行代码需要
(’内容’)这个格式,
所以我接下来便输入了:
?id=1’)(‘and1=1’) 并且无论是否加 –+ 都是错误的,所以我就纳闷啊,为啥呢,后来发现是要(’’)这个形式没错
但是,我们将语句还原回去一下
use near ‘(‘(‘1’)and1=1’)’** 此时我们就可以发现其实and1=1 是(’’)这个形式了
在后面加上注释符,即可
img

此时我们发现,存在注入点,接下来就和前两题应该没什么区别了吧
让我尝试一波
此时有点小无语,因为没有让前面的id为假,导致我一直输出dumb,我还在想哪里出错了,无语了
和之前的没啥区别,就不说了哈哈哈哈
补充一下就是 一开始的group_concat(column_name) 这边这个table或者column是不用加s的,需要加的是information_schema.columns这边需要加,这一整个语句中就是这里需要加。
好像也没啥要写的,如果有的话再来补充吧

第四关

这个前四关都一模一样啊,我本来想第四关重新写一篇博客水一下,可是一看到题目就知道跟前三篇几乎一模一样吧?唯一不同的是这次是双引号”

确实一模一样,没啥好说的

Author

vague huang

Posted on

2020-11-07

Updated on

2020-12-08

Licensed under

Comments