基于dvwa环境下级别为low的SQL手工注入教程:
初始状态下username和password分别为admin和password
接下来我们login,成功登录
可以看到我们已经成功登录,其中红色箭头所指就是我们SQL注入的地方了,而下面蓝色箭头指向的DVWA Security是设置难度等级的地方,初始状态下,难度一般为impossible,对我们初学者而言,并不适合,我们需要设置为low,再打开红色箭头所指的地方,SQL Injection,得到如下图所示的界面:

这便是一个表单,是用户交互式的地方,也是常见SQL注入漏洞存在的地方。
第1步:我们测试是否存在注入点,先输入“1”(双引号括起来的内容即为要输入的,下同),返回结果:

接下来,输入特殊字符“1'”(1和英文单引号),得到如下结果:

”You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1''' at line 1“翻译为中文便是”SQL语法有错误;检查与MySQL服务器版本相对应的手册,以获得在第1行“1”附近使用的正确语法“看到这个结果,我们几乎可以确定这个表单存在SQL注入漏洞。
第2步:测试信息的列数 使用 order by+数字的形式。例如我们可以输入"1' order by * -- "(*代表具体的数字),要注意的是--后面有空格)随着*数字从1逐渐变大,当*为3时,终于浏览器不再返回正常值,得到了“Unknown column '3' in 'order clause'”表明这里有两个表。这是为什么呢?order by
在SQL语句中是排序的意思,如果这里只有两个表(那么我们使用联合查询union select时一次可以查询两个数据),输入排序三个的指令肯定会犯错,便是这个原因。
接下来我们用联合查询,union select,尝试输入“1' and 1=1 union select 1,2 -- ”得到如下结果:

从而,我们可以得出First name处显示结果为查询结果第一列的值,surname处显示结果为查询结果第二列的值。(简单点说,就是First name一行显示第一个命令的值,Surname一行显示第二个命令的值,便是一次联合查询可以得到的两个数据)
接下来呢?好像离我们的目标还很遥远(突然想插一句,我们的目标是什么?当然是拿到所有的用户名和密码呀)
第3步:获取当前数据库和当前用户名。介绍几个内置函数user()、database()、version(),@@version_compile_os,user()将会返回进行当前查询的用户名,database()将会返回当前网站所使用的数据库名字,version() 获取当前数据库版本,@@version_compile_os获取当前操作系统.。通过输入“1' union select database(),user() -- ”我们得到如下页面,可以看到,绿色箭头一前一后分别代表当前数据库名字和当前进行查询的用户名。蓝色箭头便是两条命令得到的数据。即当前数据库为dvwa,当前用户名为“root@localhost”。可以用上文提到的类似的指令获取当前数据库版本和当前的操作系统信息。

通过以上查询我们知道当前数据库名为dvwa,然而好像……并没有什么卵用……不要慌,问题不大,我们继续。
第4步:测试连接数据库权限。可以输入“1' and ord(mid(user(),1,1))=114 -- ”

如图所示,返回正常,表明为root(即最高权限,你可以得到你想要的)。
第5步:获取当前用户的表(看不懂没关系,问题不大,往下看就好了)事实上,我们目前的有效信息只有当前的数据库为dvwa,其实MySQL中存在一个百科全书似的数据库叫 information_schema我么可以利用它查到dvwa数据库目录下的表,那么构造查询语句“1' union select table_name,2 from information_schema.tables where table_schema= 'dvwa' -- ”(这里用到了SQL查询的语法以后我会陆续介绍,“SELECT 字段名 FROM 数据表名称 WHERE 搜索子句”)其中在information_schema(就是那个几乎包含所有的那个库)里,有一个表为tables,table_name是表名,table_schema表示的是某个表所在的数据库,所以看懂了吧,联合搜索union select后面的table name便是我们的目的——获取表的名称,from后面便是information_schema这个“库”,where相当于添加了一个条件,就是说在dvwa这个表所在的数据库中…………有没有很乱?我也觉得很乱,笔者也没有接触过什么理论,所以逻辑有点混乱,但大可不必担心,笔者也是看着前辈们的教程,在实践中积累经验,我相信你看了演示,也一定能明白。

好了,可以看到,我们弄出来了两个表,guestbook和users,不假思索,肯定要搞users了!于是输入命令“1' union select column_name,2 from information_schema.columns where table_schema= 'dvwa' and table_name= 'users' -- ”(注意看命令,感受它的格式,体会它的含义,这点很重要!)
看!password!终于等到你,还好我没放弃,接下来问题变得简单,“1' union select user,password from users -- ”可以试着理解它的意思,搜索用户(user)、密码(password)在users这个表中。
便得到了我们想要的,但是乍一看,这………………这怪模怪样的东西是密码?
怎么来验证一下呢?

来到这里,“暴力破解”的地方,拿着我们注入得到的用户名和密码感受一下成功的喜悦吧。
PS:需要说明的是,本文只是很浅的一部分,事实上,SQL手工注入的其他命令还很多(会有后续文章渐渐补充),也可以用工具注入(以后笔者也会慢慢更新)笔者也是初学者,花费了很长时间才体会到一点点,走了很多很多弯路,在工具注入成功的一刹那,也曾激动地落泪,因为每个人所付出的,只有自己明白吧。写给那些像我一样迷茫的人,再坚持一下,绝对会成功的。欢迎大牛批评斧正,笔者水平有限,还有不懂得小伙伴可以发私信给我。
- 基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案
基于Windows环境下cmd/编译器无法输入中文,显示中文乱码解决方案 两个月前做C++课设的时候,电脑编译器编译结果出现了中文乱码,寻求了百度和大神们,都没有解决这个问题,百度上一堆解释是对编译器 ...
- Windows2008R2+iis7.5环境下的dz论坛X3版伪静态设置教程
Windows2008R2+iis7.5环境下的dz论坛X3版伪静态设置教程 因为2008R2不是那么的普及,加上X3版新出不久,所以伪静态的设置教程比较少,今天搞出来了,其实很简单,那么下面给大家简 ...
- 基于python3环境下搭建Robot Framework 自动化测试框架(一)
大家都知道,Robot Framework 是基于python2 环境 的一套自动化测试工具,据说python 2 到2020年不维护,现在用python 3 的环境搭建Robot Framework ...
- 四步法分析定位生产环境下MySQL上千条SQL中的问题所在
第一步:通过以下两种方式之一来打开慢查询功能 (1)方式一:通过修改mysql的my.cnf文件 如果是5.0或5.1等版本需要增加以下选项: log-slow-queries="mysql ...
- 基于Windows环境下Myeclipse10.0下载安装破解及jdk的下载安装及环境变量的配置
jdk的安装及环境变量的配置 1.安装JDK开发环境 附上jdk安装包的百度云链接 链接:http://pan.baidu.com/s/1mh6QTs8 密码:jkb6(当然自行去官网下载最好哒,可以 ...
- 基于IDEA环境下的Spark2.X程序开发
我们选择在线安装 这个是windows下的scala,直接双击安装就可以了 安装好之后可以验证一下 这个是我本地的jdk1.8安装包,直接双击安装 安装完成后可以验证一下 https://archiv ...
- 基于Windows环境下MyEclipse10快捷键总结
---------------------------------------------MyEclipse 快捷键1(CTRL)----------------------------------- ...
- 基于Openstack环境下开启SRIOV
主题思想: 先在系统层面修改配置文件,再去openstack里面修改配置文件 compute node系统层面: 先确认下是否含有ixgbe moudle lsmod |grep ixgbe 修改/e ...
- 新闻实时分析系统 基于IDEA环境下的Spark2.X程序开发
1.Windows开发环境配置与安装 下载IDEA并安装,可以百度一下免费文档. 2.IDEA Maven工程创建与配置 1)配置maven 2)新建Project项目 3)选择maven骨架 4)创 ...
随机推荐
- jsp页面随页面初始化加载js函数
1 <%@ page language="java" import="java.util.*" pageEncoding="gbk"% ...
- CIFAR-10 dataset 的下载与使用、转图片
基本信息 CIFAR-10 是一个包含60000张图片的数据集.其中每张照片为32*32的彩色照片,每个像素点包括RGB三个数值,数值范围 0 ~ 255. 所有照片分属10个不同的类别,分别是 'a ...
- jQuery学习总结02-属性
1.attr(name|properties|key,value|fn) 说明:设置和返回被选元素的属性值 示例: 参数: name(属性名称) string properties(作为属性的'名/值 ...
- 轻便的gb28181协议中的rtp+ps格式视频流的封装和解析
streams 轻便的gb28181协议中的rtp+ps格式视频流的封装和解析 packet packet实现ps的相关封装和解析, example/enc 通过joy4来读本地视频文件,然后调用Rt ...
- Linux学习之旅(一)Linux常用命令
pwd命令 显示当前所在的目录 ls命令 显示目录下的子目录和文件 ls 显示当前目录下的子目录和文件 ls -a 显示当前目录下的所以子目录和文件(包括隐藏文件和文件夹) ls -al 显 ...
- 12JDBC
1.JDBC概述 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java ...
- join 按两个文件的相同字段合并
1.命令功能 join对每一对具相同内容的输入行,合并为一行输出.默认情况是把输入的第一个字段作为连接字段,字段间用空格隔开. 2.语法格式 join option file1 file2 jo ...
- centos7 内网可达,外网不可达
参考:https://www.cnblogs.com/operationhome/p/10207257.html 网关地址改为192.168.1.1
- pandas 新增数据列(直接赋值、apply,assign、分条件赋值)
# pandas新增数据列(直接赋值.apply.assign.分条件赋值) # pandas在进行数据分析时,经常需要按照一定条件创建新的数据列,然后进行进一步分析 # 1 直接赋值 # 2 df. ...
- sysbench github & manual
sysbench github https://github.com/akopytov/sysbench sysbench-manual.pdf https://github.com/mrivandu ...