-2

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

所以我已经知道它可以mysql_query()逃避多个查询,而且Statement.execute()我还没有尝试过使用 ASP.NET。但是 ASP.NET 是唯一允许以最简单的查询语法实现这一点的 Web 语言吗?Likemysql_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()

4

4 回答 4

0

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

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

我能想到的一件事是使用评论或子查询。对于注释,您将不得不花费大量时间来制定解决方案,通过在注入的 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

于 2013-10-01T14:55:26.177 回答
0

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

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

老实说,我认为您只需要花大量时间学习 SQL 和您喜欢的 Web 语言。我要说的是,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

于 2013-09-30T21:31:52.557 回答
-1

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

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

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

编辑:只需阅读您关于了解此功能的评论。我认为这是最简单的方法。

于 2013-09-30T21:54:36.137 回答
-1

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

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

在该页面的末尾附近有以下代码段:

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

这将使使用 canonical 变得更加困难'Bobby'; DROP TABLE STUDENTS;'

于 2013-09-30T21:55:07.553 回答