【问题标题】:In which web language can I execute multiple queries with SQL injection?我可以使用哪种 Web 语言通过 SQL 注入执行多个查询?
【发布时间】:2013-10-06 21:33:10
【问题描述】:

我正在做有关 Web 漏洞的大学工作,我需要在实践中演示其中的一些漏洞,尤其是 SQL 注入。我开发了两个应用程序,一个在 PHP 中,一个在 JSP 中,但没有一个接受多个查询,我需要从 SQL 注入脚本执行 DROP TABLE

所以我已经知道mysql_query() 会转义多个查询,Statement.execute() 也是如此,我还没有尝试过使用 ASP.NET。但是 ASP.NET 是唯一允许以最简单的查询语法实现这一点的 Web 语言吗?比如mysql_query()是PHP最简单的语法,st.execute()是JSP最简单的语法,也就是说很多web应用都使用这种语法。

JSP

String query = "SELECT * from user; DROP TABLE user;-- ";
st = con.createStatement();
st.execute(query);

PHP

mysql_query("SELECT * from user; DROP TABLE user;-- ");

编辑:我不是很清楚,我正在制作一个易受攻击的登录应用程序,我需要 DROP 一个带有 SQL 注入的表,就像在查询中一样:

"SELECT * FROM user where user ='".$_POST['user']."' AND pass = md5('".$_POST['pass']."')";

我传入用户字段';删除表用户; -- ',我的问题是,哪种网络语言允许我在不使用 mysqli_multi_query() 等特定功能的情况下做到这一点?

【问题讨论】:

  • 了解TRANSACTION
  • 两种语言都支持执行多个查询。还有php! (虽然不推荐使用的 mysql_* 函数没有。)
  • 做“小鲍比桌”? xkcd.com/327 ADO.Net 支持以分号分隔的多个查询。 PHP 也应该...?
  • PHP MySQLi 扩展支持多个查询。 PHP MySQLi Multiple Statement.
  • 是的,我知道 PHP mysqli_multi_query(),但我需要一种允许以最简单的查询语法进行多个查询的 Web 语言。像 PHP 最简单的语法是 mysql_query()

标签: php mysql jsp web sql-injection


【解决方案1】:

另一种可能性是您可以尝试一些迂回的方式。例如让 PHP 调用 shellexec() 并通过 PHP 通过 MySQL 控制台命令行运行所有 SQL 语句。考虑到命令行的交互性,我什至不确定这是否可以做到。

不幸的是,它并不是一种可以说是普遍使用的方式。似乎所有的输入都表明这些天不能直接完成。至少不是多查询注入限制。但这并不意味着不会发生其他 SQL 注入攻击。

我能想到的一件事是使用 cmets 或子查询。使用 cmets,您将不得不花费大量时间制定一个解决方案,通过在注入的 SQL 末尾添加一个“--”来关闭 SQL 语句的其余部分。如果在您的代码所在的位置之后有任何换行符,这将是有问题的。但是使用子查询似乎更有可能。

对于子查询,您可能会在搜索查询中注入一个进入 WHERE 子句的值。

示例...

从这个查询开始:

SELECT * FROM students WHERE first_name = 'bobby'; -- Bobby being an unsanitized value.

变成:

SELECT * FROM students WHERE first_name = 'bobby' AND (DELETE FROM students WHERE student_id > 0) = true AND '' = '';

在我的第二个示例中,我注入了这个:

' AND (DELETE FROM students WHERE student_id > 0) = true AND '' = '

利用子查询方式注入动作语句。查看有关 SQL 标准的页面:http://www.w3resource.com/sql/subqueries/understanding-sql-subqueries.php

【讨论】:

  • 很高兴尝试@pthurdmond,但我仍然遇到错误!我把它放在一个临时服务器上,看看我在做什么,你可以输入用户名和密码,我调试了结果!你可以试试吗?54.232.204.7
  • 我觉得很有趣的是,每次有人在 StackOverflow 上发布 SQL 注入易受攻击的代码时,他们都会被骂。然而,没有人能够真正演示一种有效的 SQL 注入攻击。
  • @MikeChristensen 是的,我/我担心这也会发生在我身上。老实说,我不能说我在这个问题上花了很多时间。我当然从来没有按照这些思路尝试过任何事情。所以我只是基于我对其工作原理的一般知识。这更像是一个可行的想法。但我不会说它绝对会。只是想给那个家伙一些指导和帮助。
【解决方案2】:

这绝不是语言限制。 Web 的任何服务器端语言都可以执行多个查询(我一直这样做)。但是你的问题并没有多大意义。你想给它传递一个庞大的 SQL 文件来做一堆操作吗?或者您是否想要执行数据/事件特定操作,例如您的基本 CRUD 功能(创建、读取、更新、删除)?

所有的语法都很简单。但是如果你真的想对其进行混淆以进一步简化它,那么请使用 ORM,例如 Laravel 框架附带的 Eloquent 系统。

老实说,我认为您只需要花大量时间学习 SQL 和您喜欢的网络语言。我要说的是,PHP 是绝大多数 Web 开发发生的地方。有很多资源。

编辑: 由于您真正准备从同一个调用中运行多个查询,因此您可以使用此处描述的功能:http://raamdev.com/2008/multiple-query-problems-with-mysql_query/

又名:mysqli::multi_query - http://www.php.net/manual/en/mysqli.multi-query.php

【讨论】:

  • 试试这样的:mysql_query('DROP TABLE IF EXISTS dbName.tableName') or die(mysql_error());
  • 我想他想说明在他的大学项目中目的通过 SQL 注入删除表。听起来他不是在寻找创建一个功能齐全的应用程序......
  • 非常@Jason !我找不到执行多个查询以使用 SQL 注入删除表的 Web 语言
  • 啊,我明白了。你说的对,PHP 中的 mysql_query() 不支持。你检查过它的替代品 mysqli_query() 吗?我在文档中没有看到有关该限制的任何内容(尽管 mysql_query 在文档中确实提到了这一点)。看看:docs.php.net/manual/en/mysqli.query.php
  • 其实,看看这个。它有一些功能:raamdev.com/2008/multiple-query-problems-with-mysql_query
【解决方案3】:

实际上很奇怪,您不能使用 'DROP TABLE 方法 SQL 注入您自己的易受攻击的代码。

我会尝试使用 mysqli 函数,包括多查询函数,应该是 mysqli_multi_query()

请注意 PHP 5 中已经引入了对 mysqli 的 PHP 支持。

编辑:只需阅读您的 cmets 即可了解此功能。我认为这是最简单的方法。

【讨论】:

    【解决方案4】:

    问题不在于网络语言。 MySQL 不允许在单个准备中使用多个语句。请参阅有关准备好的语句的文档:

    https://dev.mysql.com/doc/refman/5.0/en/sql-syntax-prepared-statements.html

    在该页面的末尾附近有这个 sn-p:

    预编译语句的 SQL 语法不支持多语句(即,单个字符串中的多个语句由“;”字符分隔

    这将使规范'Bobby'; DROP TABLE STUDENTS;' 的使用变得更加困难。

    【讨论】:

    • 这就是我要说的!我想放下桌子!我想知道哪种网络语言允许我使用诸如 mysqli_multi_query() 之类的特定函数来做到这一点
    • 之所以使用multi_query是因为mysql不喜欢一个字符串中有多个语句。因此,任何其他语言都必须使用相同的解决方法。
    猜你喜欢
    • 2021-03-10
    • 1970-01-01
    • 2013-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    相关资源
    最近更新 更多