网站首页 > 技术文章 正文
一、sqlmap介绍
相对于手工注入,sqlmap的高效注入大大提高了我们渗透效率。Sqlmap采用了以下5种独特的SQL注入技术:
- 联合查询,在可以使用Union的情况下注入(注入效率最高,成本最低)
- 报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回到页面中
- 布尔盲注,即可以根据返回页面判断条件真假的注入
- 延时注入,即不能根据页面返回的内容判断任何信息,要用条件语句查看时间延迟语句是否已经执行(即页面返回时间是否增加)来判断
- 堆叠查询,可以同时执行多条语句时的注入
注入小技巧:有回显可以用联合查询,有报错可以用报错注入。都没有再看有没有布尔类型的状态(显示或者不显示)。若以上都没有,试试用延时注入。或者我们直接测试延时注入
二、常用命令
当发现sql注入的时候,根据我们注入的不同,对sqlmap使用的参数也不同
1. 目的是获取网站后台管理的账号密码
- 查看当前数据库名字,即当前网站所属数据库名字
- 列出数据库中的表
- 觉得哪个表放着账号密码,就爆哪个表
- 一般密码经过了md5加密处理,需要进行hash碰撞
2. 目的是获取mysql的管理账号、密码进行远程连接
--users
--passwords
sqlmap -u URL 检查注入点
sqlmap -u URL --dbs 列出数据库中所有数据库的名字
sqlmap -u URL --is-dba 当前用户是否是数据库管理员
sqlmap -u URL --current-db 显示当前数据库的名字
-D 指定数据库
--tables 列出所有表名
qlmap -u URL -D "xx" --tables 列出xx数据库中的所有表
-T 指定一个表
--columns 列出所有的字段名
qlmap -u URL -D "xx" -T "cc" --columns 列出表中所有的字段名
-C 指定一个字段名
--dump 列出字段内容
qlmap -u URL -D "xx" -T "cc" -C "x,x,.." --dump 列出字段内容(-T ,-C之类的要用大写不然有时候会读不出来)
sqlmap -r a.txt -p username 倒入txt文档的post数据包,并指定参数username进行注入
--dbms mysql 指定注入的数据类型为mysql数据库
--os-shell 尝试写入shell
sqlmap -u url --batch --smart 自动聪明的选择,即执行的时候不需要我们再手动的进行选择yes或者no(但是由于机器自动进行选择,所以有时候结果会不一样比如没有结果,所以建议少使用)
--force-ssl 测https的时候
--cookie "cookie值" 有些网站要登录才行,所以需设置cookie
--threads=10 开启多线程,默认是单线程为1,最大10。线程越大检测速度越快
--users 获取mysql数据库管理用户,mysql安装时会默认有一个root用户,除了这个用户可能还会创建有其他用户,这个参数可以将这些用户列出了
--passwords 获取mysql数据库管理用户的hash值
--dbms:指定注入的数据库类型,如Microsoft Access, Microsoft SQL Server, MimerSQL, MonetDB, MySQL, Oracle, Percona, PostgreSQ
-v 3
如果你想观察sqlmap对一个点是进行了怎样的尝试判断以及读取数据的,可以使用-v参数。
共有七个等级,默认为1:
- 0 只显示python错误以及严重的信息。
- 1 同时显示基本信息和警告信息。(默认)
- 2 同时显示debug信息。
- 3 同时显示注入的payload。
- 4 同时显示HTTP请求。
- 5 同时显示HTTP响应头。
- 6 同时显示HTTP响应页面。
如果你想看到sqlmap发送的测试payload最好的等级就是-v 3。
二、进阶命令
--technique=BEUST
有时候我们手工探测出来注入是某种类型,为了节省时间,我们可以直接指定sqlmap注入的类型
BEUST的值可以是"BEUST"中的一种。
- 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(基于时间延迟注入)
sqlmap.py -r x.txt -v3 --technique=B #指定进行布尔盲注
--prefix与 --suffix
- --prefix 在payload最前面加上指定的字符
- --suffix 在payload最后面加上指定的字符
我们在注入的时候经会碰到需要在payload前加上指定的字符要构造闭合,如下这种情况,我们找到了注入点为' ,但是还得在后面加上 or ' 才行,与原来的sql语句构成闭合
所以我们就指定sqlmap在每个payload前面加上 ' ,每个payload后面加上 or '
sqlmap.py -r x.txt --prefix "'" --suffix " or '" -v3
--level
有时候注入的时候,我们发现了注入点但是使用sqlmap确注入不出来,发现sqlmap只发出了十几个包就说漏洞不存在然后停止运行了。那很有可能是你没有加此参数进行注入。
--level有五个等级(1-5),默认使用等级1进行注入。级别越高sqlmap发送的探测payload就越多,越有可能发现注入漏洞。为了尽可能发现漏洞,我们应该使用更高的级别,如--level 5
sqlmap.py -r r.txt -dbms mysql --technique=T -v3 --level 5
三、进行POST注入
不管是POST还是GET型注入,我们都可以在想要注入的参数后加*,代表对此参数进行注入,如对id参数进行注入,sqlmap -u " https://xx.xx.com?id=23* "
猜你喜欢
- 2025-08-30 LINUX 服务介绍_linux服务有哪些
- 2025-08-30 Java 性能优化的 50 个细节(珍藏版)
- 2025-08-30 Spring Boot3 全栈打包指南:一键搞定应用、数据库与 Redis 镜像部署
- 2025-08-30 mybatis-generator代码生成器的使用
- 2025-08-30 JFinal 4.9 发布,持续精雕细琢_jfinal dao
- 2025-08-30 神通数据库主从部署(一主两从)_神通数据库如何启动
- 2024-11-06 最近学习oracle的笔记(1) oracle入门教程
- 2024-11-06 详解大数据采集引擎之Sqoop&采集oracle数据库中的数据
你 发表评论:
欢迎- 09-0613.通过Excel导出数据库中的维值_数据库exp导入导出数据
- 09-06做数据分析时,SQL需要达到以下水平
- 09-06Java开发指南:JDK21下载、安装及目录解析,轻松开启编程之旅
- 09-06hive存储过程_hive存储过程环境变量
- 09-06Maven常用命令_maven常用命令有哪些
- 09-06JDK从8升级到21的问题集_jdk更新到几了
- 09-06Oracle狂刷存在感 NRF展会惊艳四座
- 09-06哪些软件支持UDI标签的生成与验证
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- oracle面试 (55)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)