有没有办法在 dbms_xmlquery.getxml 或 DBMS_XMLGEN.getXML(..) 或其他 PL/SQL xml 函数中执行多个 sql 命令?

Is there any way to execute multiple sql commands inside dbms_xmlquery.getxml or DBMS_XMLGEN.getXML(..) or other PL/SQL xml functions?

提问人:Mikhail 提问时间:12/28/2020 最后编辑:Mark RotteveelMikhail 更新时间:12/28/2020 访问量:291

问:

我找到了一篇文章,其中包含在 dbms_xmlquery.getxml(..) 函数中执行动态 PL\SQL 代码的示例。本文 https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/SQL%20Injection/OracleSQL%20Injection.md#oracle-sql-list-table。 示例如下:

SELECT TO_CHAR(dbms_xmlquery.getxml('declare PRAGMA AUTONOMOUS_TRANSACTION; 
begin execute immediate ... end;')) results FROM dual;

但是,除了有效的“SELECT”语句之外,我所有执行某些内容的尝试都在 xlm 响应中出错:

<ERROR>oracle.xml.sql.OracleXMLSQLException: Invalid query </ERROR>.

甚至像这样的查询

SELECT TO_CHAR(dbms_xmlquery.getxml('begin execute immediate '' begin select 1 from dual; end;'' end;')) results FROM dual;

但是查询

SELECT TO_CHAR(dbms_xmlquery.getxml('select 1 from dual')) results FROM dual;

工作正常。

Oracle PLSQL SQL注入 oracle19c

评论

1赞 tgdavies 12/28/2020
请编辑您的问题以显示您如何执行这些查询,并正确设置代码和错误消息的格式。
0赞 Jon Heller 12/30/2020
你问是因为你要尝试创建一个SQL注入测试吗?如果是这样,可能就没有办法在 DBMS_XMLGEN 中运行 PL/SQL——该软件包可能在十年前就支持该语法,这可能会导致漏洞,从而解释为什么许多强化脚本用于撤销对 DBMS_XMLGEN 的公共访问。如果因为想要运行多个查询来获得更多结果而提出要求,则至少有三种不同的方法:union all、cursor() 和选择多行,每行对 GETXML 的调用不同。

答: 暂无答案