[GYCTF2020]Ezsqli(无列名注入)
由题目可以知道这是一个sql注入的题,我们先fuzz一波
很好,information被过滤了,我们直接考虑盲注
我们可以知道,当输入1时,结果返回
由于information被过滤了,我们考虑用别的东西替换
https://www.cnblogs.com/h0cksr/p/16189749.html
1 | sys.schema_table_statistics_with_buffer |
写一个爆表名的脚本
1 | import requests |
得到表名
无列名注入
这里因为我们无法通过 这个表获取flag的列名
并且这里过滤了 union 所以我们无法使用
1 | select 1,2,3 as b union select * from 表 |
这种无列名注入
所以我们现在需要学习另一个
通过ascii位移来获得flag
我们开始在本地尝试
1 | select (select "a") > (select "abcdef") |
所以我们可以通过这个方式来查询
首先通过 select 1,2,3 查询字段数
说明字段数量为2
然后我们就可以通过循环开始查询了
所以我们只要读取到了 Nu1L 然后通过 减去一位 我们就可以获得上一个的字符
然后加入 就可以获取下一个了
这里还有一个要注意的 就是 我们注入的地方在字段2 是flag在的地方
1 可能是 id什么的
我们开始写脚本吧
1 | import time |
注意这里的chr(char-1),我们在本地测试来看一下为什么
当我们匹配flag的时候,一定会先经过匹配到字符相等的情况,这一这个时候返回的是0,对应题目中的V&N,很明显此时的chr(char)并不是我们想要的,我们在输出1(Nu1L)的时候,匹配的是f的下一个字符g,而我们想要的是f,此时chr(char-1)=‘f’,所以这里要用chr(char-1)
如果脚本结果出现乱码,可能是运行时间太快,把sleep的值调大点.
得到flag