一、SQLMAP简介
SQLMAP是一款由Python开发的自动化SQL注入工具,其主要功能是扫描、发现并利用SQL注入漏洞,它内置了很多绕过插件,并且支持多种数据库,如MySQL、Oracle、PostgreSQL、SQL Server、Access、IBM DB2、SQLite等数据库;
SQLMAP的强大之处在于对数据库指纹的识别、数据库枚举、数据提取、访问目标文件系统、并在获取完全的操作权限时执行任意命令,它支持以下几种独特的注入:
- 基于布尔类型的注入,即可根据返回页面判断条件真假的注入;
- 基于时间的盲注,即不能根据页面返回判断的时候,利用时间线是否延时来判断条件的真假;
- 基于报错的注入,即页面会返回错误信息,或者把注入的语句的结果直接返回到页面中,比如数据库报错的信息等;
二、SQLMAP安装
前面我们提到了SQLMAP是由Python编写,因此我们需要安装配置Python环境,安装完成后,将Python目录加入环境变量,然后将下载好的SQLMAP目录放到Python目录下,然后配置好环境变量,然后即可在CMD环境下启动SQLMAP
三、SQLMAP的使用
-
- sqlmap.py -u url --current-db
-
- sqlmap.py -u url -D dbname --tables
-
- sqlmap.py -u url -D dbname -T tablename --columns
-
- sqlmap.py -u url -D dbname -T tabalename -C olumnname --dump
-
- sqlmap.py -u url --password
-
- sqlmap.py -u url --current-user
-
- sqlmap.py -u url -dbms=mysql/oracle/mssql
-
- sqlmap.py -u url --is-dba
-
- 返回为结果为true时,当前数据库用户为root,返回结果为false则相反
-
- --level 1 默认的等级,会进行基本的测试,包括GET和POST方式
-
- --level 2 在原有的基础上增加对cookie的检测
-
- --level 3 增加对USER AGENT/REFERER的检测
-
- --level 5 最高等级,包含所有的payload,会尝试自动破解出cookie、xff等头部注入(速度最慢)
-
- --referer:当前等级为3或3以上时,会尝试对referer注入,可以使用referer来伪造referer来源
四、SQL注入的修复与绕过
- 目前为止我们已经学习了手工注入和SQLMap工具的注入方法。 但是,如果目标安装了一些防护软件怎么办呢?
-
- sqlmap.py -u- url --tamper “脚本名称.py”
-
- apostrophemask.py 将引号替换为UTF-8,用于过滤单引号
-
- base64encode.py 替换为base64编码
-
- multiplespaces.py 围绕着SQL关键字添加多个空格
-
- nonrecursivereplacement.py 双写语句替换预定义的payload
-
- space2randomblank.py 将空格替换为其他的有效字符
-
- unionalltounion.py union all select替换为union select
-
- securesphere.py 追加一些其他特殊字符串
-
- space2hash.py 将空格替换为#号,并添加一个随机字符串和换行符
-
- space2mssqlblank.py 空格替换为其他空符号
-
- space2mssqlhash.py 空格替换为#号,并添加一个换行符
-
- between.py 用NOT BETWEEN 0 AND 替换大于号,用 BETWEEN AND替换等号
-
- percentage.py ASP每个字符前添加%,如%s%e%l%e%c%t%...
-
- charencode.py 对未url编码处理的Payload字符串进行url编码
-
- charunicodeencode.py 使用unicode编码
-
- space2comment.py 空格替换为/**/
-
- greatest.py 用GREATEST替换大于号
-
- modsecurityversioned.py 空格替换为MySQL内联注释
-
- modsecurityzeroversioned.py 使用MySQL内联注释(/!00000/)注入
-
- space2mysqldash.py 空格替换为--和一个换行符
-
- chardoubleencode.py 对Payload进行两次URL编码(不处理已经编码的字符)
-
- 在处理输入之前,验证所有客户端提供的数据,包括所有的参数、URL和HTTP头的内容。
-
- 不使用动态拼接的SQL语句,如果使用对特殊字符进行转义。
|