ONKay1 2024-05-06 10:05 采纳率: 76.5%
浏览 9

sql注入问题,标题和内容两个注入点

一个web题目,该如何注入得到信息,普通注入不通过,该怎么注入,求解答

img

  • 写回答

6条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-06 10:05
    关注

    引自免费微信小程序:皆我百晓生

    针对这个题目,看起来是一个简单的SQL注入测试场景。题目提示了两次尝试的注入语句,并且显示了错误信息,这表明服务器端对输入进行了部分过滤。不过,我们可以通过巧妙地构造SQL语句来绕过这些限制。

    首先,让我们分析一下已知的注入尝试:

    1. 1';show database#
    2. 1';show database#

    这两个尝试都被服务器阻止了,因为它们包含了分号(;),这是SQL语句结束的标志。然而,我们可以利用一些技巧来继续执行SQL命令。

    一种可能的方法是使用注释符来隐藏我们的SQL命令。在MySQL中,有两种注释方式:单行注释(--)和多行注释(/* ... */)。由于题目中的URL中有%20or%201=1/*,这可能是试图开启一个多行注释,但被服务器过滤掉了。我们可以尝试使用单行注释来避开这个问题。

    这里有一个可能的注入方法:

    1. 尝试使用单引号(')作为字符串边界,这样可以防止SQL解析器误将我们的SQL命令当作变量。
    2. 使用单行注释(-- )来隐藏剩余的SQL命令。

    考虑以下注入语句:

    ' UNION SELECT column_name, table_name FROM information_schema.columns WHERE table_schema = DATABASE(); --
    

    这个注入语句的作用是获取当前数据库下的所有表名和列名。我们将它插入到标题或内容字段中,例如:

    标题: ' UNION SELECT column_name, table_name FROM information_schema.columns WHERE table_schema = DATABASE(); -- 内容: ' UNION SELECT column_name, table_name FROM information_schema.columns WHERE table_schema = DATABASE(); --

    如果你能够成功执行这个注入,你应该能看到返回的结果包含了一些关于数据库结构的信息。注意,实际操作时,你需要将上述SQL语句替换为双引号("),因为在这里我使用的是单引号以便于展示。

    如果你想要进一步查询特定表的数据,你可以修改注入语句,例如查询名为users的表中的数据:

    标题: ' UNION SELECT * FROM users LIMIT 10; -- 内容: ' UNION SELECT * FROM users LIMIT 10; --

    这段代码会返回users表的前10条记录。当然,在实际应用中,我们应该尊重隐私并避免滥用这样的技术。这只是一种用于教育目的的示例。

    请注意,这个例子基于MySQL数据库,不同数据库系统可能会有不同的语法,所以在实际环境中,你需要根据目标系统的具体特性调整注入语句。此外,为了安全起见,请确保你在受控的环境或拥有权限的情况下进行此类测试。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月6日

悬赏问题

  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 Hadoop集群部署启动Hadoop时碰到问题
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 QTableWidget重绘程序崩溃
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站