以DVWA的sql注入初级为例,结合网上搜索的相关利用方式,总结成这一篇文章,内容会有点跳跃。

大纲:

1.初级手工注入

2.order by的使用

3.union查询注意点

4.Mysql相关的注释用法(比如 ‘--’后面需要跟一个空格或者回车等)

5.Mysql相关系统信息函数和全局变量

6.Mysql常用函数

详细信息如下:

1.初级手工注入

DVWA登录之后设置 security level为low,找到SQL Injection之后,通过显错注入的方式来判断是否存在注入。添加单引号之后 页面显示报错如下

提示存在语法错误 ,原因在于引号没有闭合好,页说明了sql语句查询的时候是带上引号的,就自发的认为是字符型参数。在输入框中使用数字万能秘钥 1 or 1=1 的时候 竟然发现可以查询出来 。在数据库中也直接使用 查询语句 SELECT * FROM `users` where user_id = '1 or 1=1' 也可以查出。这个就有点奇怪了。原因在于如果是字符型参数,输入 1 or 1=1 ,是不能查出数据的,我一度还以为数据库进行了布尔运算,百思不得。后面发现 这个参数竟然是int型 的。数据库会自动截断输入不为数字的字符,保留从首位开始为数字的一段入参。这个也解释了为什么 输入 1 or 1=1 能够得出id =1 的信息。

既然后台语言查询的时候 是有引号的 那就先闭合引号 再注入sql语句。比如使用 1 ' or 1=1 -- ['--'后面有个空格,否则会报错],这个输入会显示出表里面的所有数据

再比如 1' or '1'= '1 这个就不需要sql注释语句来注释后面的引号;

2.order by的使用

初步显示数据之后,我们可以判断一下 这个查询语句 查询了这张表 几列数据,这时使用 order by 来判断查询了几列。order by 数字 这个语句指示这按照查询列的数据来排序,具体产生什么样的结果 我们可以看看下面的查询结果。

最简单的 SELECT `first_name`,`last_name` FROM `users`  查询

添加order by 1之后的  SELECT `first_name`,`last_name` FROM `users` order by 1的结果

发现第一列开始按照首字母进行了排序

添加order by 2之后的  SELECT `first_name`,`last_name` FROM `users` order by 2的结果

增大数字为3,发现报错

利用这个原理 我们可以一步步增大order by 数字 ,直到报错为止,这个报错意味着只查询了这么几列的。

所以在输入框中我们输入 1' order by 3 -- [--后面需要有空格,mysql的注释语法导致的],发现报错了,故数值下减,直到判断为2 结束order by 的运用。

3.union查询注意点

通过order by 我们知道了查询的列数 我们需要使用 union查询来输出我们需要的信息。使用union 的时候 我们可以使用火狐插件 如 hackbar 来方便我们操作,如下图所示,我们输入查询的列数即可

union查询有一定的特点,在http://www.w3school.com.cn/sql/sql_union.asp 这里面讲了。即union查询左右两边查询的数据类型需要相似或者一致。

这个也就意味着 我们输出的数据可以在数字所指示的地方显现出来。

有了这个之后,我们去获得一些我们想要的信息。比如user(),version(),database()等。

自然也可以这个样子

两种方式其实是一样的。

有了这些之后,我们还可以看看操作系统信息,这里就需要用到数据库的全局变量了,全局变量不需要说明在哪个库。union select 1,@@global.version_compile_os from mysql.user--  以及union select 1,@@global.version_compile_os from 结果是一样的

后续还可以猜解表名什么的可以自己搜搜了。

可以参考http://www.2cto.com/article/201307/230064.html

4.Mysql相关的注释用法(比如 ‘--’后面需要跟一个空格或者回车等)

 MySQL服务器支持3种注释风格:

 从‘#’字符从行尾。

 从‘-- ’序列到行尾。请注意‘-- ’(双破折号)注释风格要求第2个破折号后面至少跟一个空格符(例如空格、tab、换行符等等)。该语法与标准SQL注释语法稍有不同,后者将在1.8.5.7, “‘--’作为注释起始标记”中讨论。

 从/*序列到后面的*/序列。结束序列不一定在同一行中,因此该语法允许注释跨越多行。

5.Mysql相关系统信息函数和全局变量

了解Mysql相关系统信息函数和全局变量有助于我们更好的了解这个系统

 USER()、SYSTEM_USER()、SESSION_USER()、CURRENT_USER()和CURRENT_USER 这个都是对等的,schema()等于 database()。数据库中经常出现 @@ ,这个起头的代表的就是全局变量,格式是@@global.var_name。常用的有 version version_bdb version_compile_os等 多搜集一些这样的数据是不会有错的。

这个可以参考http://www.cnblogs.com/gavin110-lgy/p/5772577.html

6.Mysql常用函数

了解这个主要适用于转换注入语句的时候,方便过安全狗这类的,可以参考http://www.2cto.com/database/201508/436118.html 。

SQL注入相关的知识【Mysql为例子】的更多相关文章

  1. sql注入攻防 以php+mysql为例

    随着Web应用的高速发展和技术的不断成熟,对Web开发相关职位的需求量也越来越大,越来越多的人加入了Web开发的行列.但是由于程序员的水平参差不齐或是安全意识太低,很多程序员在编写代码时仅考虑了功能上 ...

  2. BUUCTF[归纳]sql注入相关题目

    这是我自己对于sql注入的部分ctf题型的归纳,均来自buuctf的平台环境. [0CTF 2016]piapiapia 我尝试了几种payload,发现有两种情况. 第一种:Invalid user ...

  3. sql注入问题 java中将MySQL的数据库验证秘密加上 ' or '1'= '1 就可以出现万能密码

    password的字符串中,加上 ' or '1'= '1 就可以制作出万能密码. 原因如下: 原代码中密码是123456 执行数据库查询语句 实际上执行的SQL语句是: select * from ...

  4. 【转载】以Java的视角来聊聊SQL注入

    以Java的视角来聊聊SQL注入 原创 2017-08-08 javatiku Java面试那些事儿 在大二就接触过sql注入,之前一直在学习windows逆向技术,认为web安全以后不是自己的从业方 ...

  5. MySQL 及 SQL 注入

    如果您通过网页获取用户输入的数据并将其插入一个MySQL数据库,那么就有可能发生SQL注入安全的问题. 本章节将为大家介绍如何防止SQL注入,并通过脚本来过滤SQL中注入的字符. 所谓SQL注入,就是 ...

  6. MySQL SQL 注入

    如果您通过网页获取用户输入的数据并将其插入一个MySQL数据库,那么就有可能发生SQL注入安全的问题. 本博文将为大家介绍如何防止SQL注入,并通过脚本来过滤SQL中注入的字符. 所谓SQL注入,就是 ...

  7. 在SQL注入中利用MySQL隐形的类型转换绕过WAF检测

    web应用一般采用基于表单的身份验证方式(页面雏形如下图所示),处理逻辑就是将表单中提交的用户名和密码传递到后台数据库去查询,并根据查询结果判断是否通过身份验证.对于LAMP架构的web应用而言,处理 ...

  8. 三十一、MySQL 及 SQL 注入

    MySQL 及 SQL 注入 如果您通过网页获取用户输入的数据并将其插入一个MySQL数据库,那么就有可能发生SQL注入安全的问题. 本章节将为大家介绍如何防止SQL注入,并通过脚本来过滤SQL中注入 ...

  9. DB-MySql:MySQL 及 SQL 注入

    ylbtech-DB-MySQL:MySQL 及 SQL 注入 1.返回顶部 1. MySQL 及 SQL 注入 如果您通过网页获取用户输入的数据并将其插入一个MySQL数据库,那么就有可能发生SQL ...

随机推荐

  1. Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别

    转: http://blog.csdn.net/it_man/article/details/5074371 Spring事务配置的五种方式 前段时间对Spring的事务配置做了比较深入的研究,在此之 ...

  2. 在C++中反射调用.NET(一)

    为什么要在C++中调用.NET 一般情况下,我们常常会在.NET程序中调用C/C++的程序,使用P/Invoke方式进行调用,在编写代码代码的时候,首先要导入DLL文件,然后在根据C/C++的头文件编 ...

  3. iOS核心笔记—源代码管理工具-SVN

    源代码管理工具-SVN 一. 源代码管理工具概述 1. 源代码管理工具的作用? > 能追踪一个项目从诞生一直到定案的过程 > 记录一个项目的所有内容变化,无限制返回 > 查看特定版本 ...

  4. Android 友盟分享详细集成过程及所遇问题解决

    最近项目需要针对微信.朋友圈.QQ.QQ空间集成友盟分享的功能,说实话,我也是第一次做,期间碰到过很多问题,这篇随笔就来写一下我是怎么集成友盟分享的,还有碰到哪些问题,都是怎样解决的! 其实集成友盟并 ...

  5. 读书笔记 effective c++ Item 2 尽量使用const,枚举(enums),内联(inlines),不要使用宏定义(define)

    这个条目叫做,尽量使用编译器而不要使用预处理器更好.#define并没有当作语言本身的一部分. 例如下面的例子: #define ASPECT_RATIO 1.653 符号名称永远不会被编译器看到.它 ...

  6. Xamarin开发IOS系列教程一:安装黑苹果

    经过一番思想挣扎和斗争之后,最终还是选择采用Xamarin来开发跨平台移动应用,好处和优点大家可以搜索其它博文,因为家里面穷加上谈了恋爱,就不买苹果了,开发阶段在Windows上面直接搞定哈,时候不早 ...

  7. FPGA学习体会

    我是安徽工程大学电子信息科学与技术专业的学生刘美花,在v3学院的培训结束了,这十几天的培训对我来说还是挺有意义的,不过中间也有一些波折.还记得刚开始的时候和老师还有各个学校的学生不太熟,心中有诸多不满 ...

  8. [Hive] - Hive参数含义详解

    hive中参数分为三类,第一种system环境变量信息,是系统环境变量信息:第二种是env环境变量信息,是当前用户环境变量信息:第三种是hive参数变量信息,是由hive-site.xml文件定义的以 ...

  9. 20130620—ant和java杂学随笔

    ant知识点: 1.使用属性定义相对路径的时候,一定要使用location,而不要去使用value  对于<property></property>中location和valu ...

  10. Android开发10:传感器器及地图相关应用

    前言 啦啦啦~各位小伙伴们好~经过这一学期的Android知识的学习,我们学到了很多和Android开发相关的知识,这一学期的学习也要告一段落了. 一起进入我们今天的相关内容~这次我们将一起学习使用 ...