1、SQLMAP介绍
- sqlmap是一个由python语言编写的开源渗透测试工具,它主要用来检测sql注入漏洞,是一款功能强大的sql漏洞检测利用工具
- 可检测数据库:access、mssql、mysql、orcale、postgresql、db2、sqlite等
- 可进行sql盲注、union查询、显错注入、延迟注入、post注入、cookie注入等
- 其他功能:执行命令、列举用户、检测权限、自动破解、数据导出等功能
2、基本参数
2.1、基本参数
参数 | 功能 |
---|---|
-h | 查看帮助选项 |
–is-dba | 当前用户权限 |
–dbs | 所有数据库 |
–current-db | 网站当前数据库 |
–users | 所有数据库用户 |
–current-user | 当前数据库用户 |
–tables | 列表名 |
– columns | 列字段 |
–dump | 下载数据 |
–flush-session | 清除缓存 |
–count | 可以显示表中数据 |
–betch | 默认yes |
2.2、读取步骤
-
读取数据库----->读取表----->读取表的列----->读取内容
参数 功能 -D 指定数据库 -T 指定表 -C 指定列 –dbms=mysql/oracle.mssql 指定数据库
参数 | 功能 |
---|---|
–users | 枚举所有用户 |
–passwords | 枚举所有用户密码 |
–roles | 列出数据库管理员角色 |
–privileges | 列出数据库管理员权限 |
2.3、探测等级
-
参数:–level
-
共有五个等级,默认为1,GET和POST的数据都会进行测试
-
HTTP Cookie在level为2的时候进行测试
-
HTTP User-Agent/Referer头在level为3的时进行测试
-
为了保证全面性,建议使用高的level值,3即可或4
2.4、显示调试信息
- -v 显示调试信息,7个级别
级别 | 功能 |
---|---|
0 | 只显示python错误以及严重的信息 |
1 | 同时显示基本信息和警告信息 |
同时显示debug信息 | |
3 | 同时显示注入的payload |
4 | 同时显示HTTP请求 |
5 | 同时显示HTTP响应头 |
6 | 同时显示HTTP响应页面 |
2.5、获取目标
- -u/-url :单个目标
- **-m :**从文本中获取多个目标
2.6、获取http请求注入
-
参数:-r
-
常用情况:
-
post注入
-
搜索注入
-
http头注入
-
登录后的注入点(携带cookie)
-
2.7、–data
-
此参数时把数据以POST方式提交,sqlmap会像检测GET参数一样检测POST的参数
-
例:
sqlmap -u "http://www.xxx.com/index.php" --data "username=admin&password=password"
2.8、–param-del 参数拆分字符
- 当GET或POST的数据需要用其他字符分割测试参数的时候需要用到此参数
- 例:
sqlmap -u "http://www.xxx.com/vuln.php" --data="query=foobar;d=1" --param-del=";"
2.9、–referer,–headers,–proxy
-
–referer
sqlmap可以在请求中伪造HTTP中的referer,当–level参数设定为3或3以上的时候会尝试对referer注入
-
–headers
可以通过–headers参数来增加额外的http头
--headers "client-ip:1.1.1.1'"
-
–proxy
使用–proxy代理的格式为:http://url:port
2.9、时间控制
-
–delay
可以设定两个HTTP(S)请求间的延迟,设定为0.5的时候是半秒,默认没有延迟
sqlmap/lib/core/option.py
在1257行的def_setHTTPUserAgent()函数上面加入以下函数:def_defaultHTTPUserAgent(): """ @return:default sqlmap HTTP User-Agent header @rtype:C{str} """ return "User-Agent:Mozilla/5.0 (compatible:Googlebot/2.1; http://www.google.com/bot.html)"
加入后安全狗就不会拦掉 也可以换为百度的
加入后安全狗就不会拦掉 也可以换为百度的
-
–timeout
可以设定一个HTTP(S)请求超过多久判定为超时,10.5表示10.5秒,默认是30秒
-
–retries
当HTTP(S)超时时,可以设定重新尝试连接次数,默认是3次
2.10、–technique
- 这个参数可以指定sqlmap使用的探测技术,默认情况下会测试所有的方式
- 支持的探测方式
- B:Boolean-based blind SQL injection (布尔型注入)
- E:Error-based SQL injection (报错型注入)
- U:UNION query SQL injection (可联合查询注入)
- S:Stacked queries SQL injection (可多语句查询注入)
- T:Time-based blind SQL injection (基于时间延迟注入)
2.11、–search,-C,-T,-D
- –search可以用来寻找特定的数据库名,所有数据库中的特定表名,所有数据库表中的特定字段
- 可以在以下三种情况使用:
- -C后跟着用逗号分隔的列名,将会在所有数据库表中搜索指定的列名
- -T后跟着用逗号分隔的表名,将会在所有数据库中搜索指定的表名
- -D后跟着用逗号分隔的库名,将会在所有数据库中搜索指定的库名
2.12、–flush-session
-
–flush-session
如果不想用之前缓存这个目标的session文件,可以使用这个参数,会清空之前的session,重新测试该目标
2.13、–smart、–mobile
-
–smart
有时对目标非常多的URL进行测试,为节省时间,只对能够快速判断为注入的报错点进行注入,可以使用此参数
-
–mobile
有时服务端只接收移动端的访问,此时可以设定一个手机的User-Agent来模仿手机登录
3、注入
-
POST登录框注入
-
搜索框注入
sqlmap -r search-text.txt
-
伪静态注入
注入点:http://www.xxx.com/index.php/index/id/40.html
sqlmap -u "http://www.xxx.com/index.php/index/id/40*.html"
-
延迟注入
–time-sec
4、命令执行
- 参数:–os-shell,–os-cmd
- 当数据库为MySQL,PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数
- 在MySQL,PostgreSQL,sqlmap上传一个二进制库,包含用户自定义的函数,sys_exec()和sys_eval()
- cmd----------------执行cmd命令
- shell---------------执行当前用户命令
- –os-shell
- 自动上传脚本文件
- 返回shell