获取 SQL 注入的结果集
Get the ResultSet of an SQL injection
假设服务器端代码是这样的:
String id = getIdFromHttpRequest();
String value = getValueFromHttpRequest();
ResultSet rs = new ResultSet();
String query = "INSERT INTO users VALUES ('" + id + "', '" + value + "');"
rs = SQL.doQuery(query); // i know it's not the syntax, but the point is clear
嗯,注入很简单,我可以让它执行一个SQL命令,但问题是我想看结果集(我注入SELECT命令)。
有办法吗?
你可能无法做到这一点。
如您所知,INSERT 语句没有结果集,即使您使用 SQL 注入。充其量,您可以让它执行 SELECT 作为标量子查询。欺骗您的示例以执行以下操作并不难:
INSERT INTO users VALUES ('8675309', '' || (SELECT ...blah blah...) || '');
但是那仍然不会 return 结果集,因为 INSERT 从来没有结果集。
您需要执行第二个查询才能执行此操作。一些查询接口确实支持在对 doQuery() 的单个调用中进行多查询,但这并不总是正确的(取决于您使用的数据库品牌,可能还有一些配置选项)。
INSERT INTO users VALUES (...whatever...);
SELECT * FROM secure_table WHERE (id = '8675309');
使用 SQL 注入,您可以操纵 SQL,但不能操纵 运行 应用程序中 SQL 的其余代码.在您展示的示例中,该应用程序旨在 运行 INSERT 查询,而不是 INSERT 后跟 SELECT。应用程序没有理由在执行 INSERT 后获取结果集。
很难想象您如何单独使用 SQL 注入来欺骗您显示的代码来获取和显示结果集。
我认为不可能使用 SQL 注入通过利用非读取查询来读取数据。
假设服务器端代码是这样的:
String id = getIdFromHttpRequest();
String value = getValueFromHttpRequest();
ResultSet rs = new ResultSet();
String query = "INSERT INTO users VALUES ('" + id + "', '" + value + "');"
rs = SQL.doQuery(query); // i know it's not the syntax, but the point is clear
嗯,注入很简单,我可以让它执行一个SQL命令,但问题是我想看结果集(我注入SELECT命令)。
有办法吗?
你可能无法做到这一点。
如您所知,INSERT 语句没有结果集,即使您使用 SQL 注入。充其量,您可以让它执行 SELECT 作为标量子查询。欺骗您的示例以执行以下操作并不难:
INSERT INTO users VALUES ('8675309', '' || (SELECT ...blah blah...) || '');
但是那仍然不会 return 结果集,因为 INSERT 从来没有结果集。
您需要执行第二个查询才能执行此操作。一些查询接口确实支持在对 doQuery() 的单个调用中进行多查询,但这并不总是正确的(取决于您使用的数据库品牌,可能还有一些配置选项)。
INSERT INTO users VALUES (...whatever...);
SELECT * FROM secure_table WHERE (id = '8675309');
使用 SQL 注入,您可以操纵 SQL,但不能操纵 运行 应用程序中 SQL 的其余代码.在您展示的示例中,该应用程序旨在 运行 INSERT 查询,而不是 INSERT 后跟 SELECT。应用程序没有理由在执行 INSERT 后获取结果集。
很难想象您如何单独使用 SQL 注入来欺骗您显示的代码来获取和显示结果集。
我认为不可能使用 SQL 注入通过利用非读取查询来读取数据。