sqlmap进阶使用

Sqlmap的开源项目,托管在github,最简单的安装方式便是使用git,执行如下命令:

  git clone https://github.com/sqlmapproject/sqlmap.git

一、SQL注入类型

注入点类型:数字型  字符型

注入点位置:GET(url) POST(POST数据包) HEAD(cookie user-agent accept referer xff)

执行效果:显错盲注(时间、布尔)、报错 

其他注入类型:联合查询 堆叠(一条sql语句后面加上分号,再加一条语句)宽字节 DNS解析注入

二、参数

1.参数:--level 5: 探测等级

 -- level 指需要执行的测试等级,一共有5个等级(1-5),可以不加level。默认是1。

http cookies在level为2时就会测试

user-Agent/Referer在level为3时就会测试。

host在当–level设置为5或更高时,Sqlmap会检测Host是否存在注入漏洞

2.参数:-u 或 –url

使用参数“-u”或“–url”指定一个URL作为目标

3.参数:-p和–skip

默认情况下Sqlmap会测试所有GET参数和POST参数,实际上还可以手动指定一个以逗号分隔的、要测试的参数列表,该列表中的参数不受level限制。这就是“-p”的作用。

举个例子,若想只测试GET参数“id”和User-Agent,则可以这么写:

  -p "id,user-agent"

如果不想测试某一参数则可以使用“–skip”。如设置了level为5但不想测试User-Agent和Referer,则可以这么写:

  --level=5 --skip="user-agent,referer"

4.参数:-v 输出级别

Sqlmap的输出信息按从简到繁共分为7个级别(和葫芦娃一样多),依次为0、1、2、3、4、5和6;使用参数“-v <级别>”来指定某个等级,如使用参数“-v 6”来指定输出级别为6。默认输出级别为1,各个输出级别的描述如下:

0:只显示Python的tracebacks信息、错误信息[ERROR]和关键信息[CRITICAL];
1:同时显示普通信息[INFO]和警告信息[WARNING];
2:同时显示调试信息[DEBUG];
3:同时显示注入使用的攻击荷载;
4:同时显示HTTP请求;
5:同时显示HTTP响应头;
6:同时显示HTTP响应体。

5.参数:–force-ssl

在kali遇到sqlmap出现了 “连接不到目标URL” 的问题强制使用SSL

三、sqlmap注入显示

B:Boolean-based blind(布尔型注入)
E:Error-based(报错型注入)
U:Union query-based(可联合查询注入)
S:Stacked queries(可多语句查询注入)
T:Time-based blind(基于时间延迟注入)
Q:Inline queries(嵌套查询注入)

四、SQLMap自带绕过脚本tamper

sqlmap在默认情况下除了使用CHAR()函数防止出现单引号,没有对注入的数据进行修改。我们可以通过--tamper参数对数据作修改来绕过WAF等设备
命令方式:

sqlmap.py XXXXXX --tamper “模块名”

在日常使用中我们可以用参数--identify-waf进行检测

一些常用的tamper脚本:

apostrophemask.py 过滤单引号,把单引号换为UTF-8

base64encode.py 替换为base64编码

multiplespaces.py 围绕sql关键字添加多个空格

space2plus.py 用+来替换空格

nonrecursivereplacement.py 用双重语句替代预定义的sql关键字

不同数据库特性

注释符号

MySQL: 单行:        #    多行: /**/ --+

SQLServer:单行: --   多行: /**/

Oracle:单行:        --   多行: /**/

PostgreSQL:单行:--  多行: /**/

Access:无注释符

特有数据库

MySQL:      information_schema

SQLServersysobjects

Oracle:       dual

PostgreSQL

Access:      msysobjects

ASCII转换函数
MySQL:select char(97)

SQLServer:select char(97)

Oracle:select chr(97) from dual

PostgreSQL:select chr(97)

Access:select chr(97)

查询用户和权限方法
MySQL

查询当前用户

select user();

select substring_index(user(), '@', 1) ;

查询当前用户的权限

select * from mysql.user where user = substring_index(user(), '@', 1) ;



SQLServer:

判断是否是SA权限

select is_srvrolemember('sysadmin')     

判断是否是db_owner权限  

select is_member('db_owner')

判断是否是public权限

select is_srvrolemember('public')



Oracle:

查看当前用户

select * from user_users;

查看当前用户拥有的角色     

select * from session_roles;

查看当前用户拥有的权限

select * from session_privs; 



PostgreSQL:

select user                       #查看用户

select current_user               #查看当前用户



Access:

Access数据库是文件类型数据库,没有用户和权限的概念

五、防范方式

1、  输入验证,过滤字符/字符串

        原理:过滤 ' " % @  以及数据库相关字符串如 select、database()等

2、  参数化查询

        原理:在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数来给值,这个方法已被视为最有效可预防的攻击手法的防御方式。

        在使用参数化查询的情况下,数据库不会将参数的内容视为SQL指令的一部分来处理,而是在数据库完成SQL指令的编译后,才套用参数运行,因此就算参数中含有具破坏性的指令,也不会被数据库所运行。

3、  权限分离

六、绕过

1.逗号被过滤:使用from 1 for 3;  从1开始 读取3个字符

2.过滤空格:使用两个空格代替一个空格,用Tab代替空格,php:%a0=空格,mysql:/**/=空格

3.ascii被过滤:使用 hex() bin() 进行转换即可

4.group_concat()被过滤:可用concat_ws() 

5.substr(),substring(),mid()可以相互取代, 取子串的函数还有left(),right()

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值