1. PHPINFO泄露从信息宝库到致命漏洞第一次接触PHPINFO泄露漏洞时我完全没想到这个看似无害的页面会成为渗透测试的突破口。记得当时在某个CTF比赛中目标网站首页干干净净但随手尝试的/phpinfo.php却返回了200状态码——那一刻就像在沙漠里发现了绿洲。PHPINFO页面本质上是个配置展示界面会完整显示服务器环境变量、PHP配置参数、加载的扩展模块等敏感信息。实战中最快捷的利用方式是直接搜索$_ENV或$_SERVER变量我常用这个命令快速定位flagcurl -s http://target.com/phpinfo.php | grep -i flag\|password\|secret去年审计某企业系统时就遇到过典型场景开发者在测试环境开启了expose_phpOn配置导致/phpinfo.php暴露了数据库连接凭证。更危险的是部分CMS系统会默认开启调试模式在PHPINFO中泄露后台路径和加密密钥。建议开发者始终在生产环境设置expose_php Off display_errors Off2. 备份文件泄露开发者的习惯陷阱新手最容易忽略的往往是那些临时文件。有次我给客户做渗透测试扫了三天没进展最后竟在/wwwroot.zip找到了完整源码——原来运维图省事直接用压缩包备份网站。2.1 常见备份文件类型压缩包备份web.zip、www.rar、backup.tar.gz编辑器缓存.swpvim、.swo、.swnIDE配置文件.idea/、.vscode/系统文件.DS_StoreMac、Thumbs.dbWindows这个Python脚本我用了三年能快速检测各类备份文件import requests from concurrent.futures import ThreadPoolExecutor def check_backup(url, ext): try: r requests.head(f{url}/{ext}, timeout3) if r.status_code 200: print(f[] Found: {ext}) except: pass backups [web.zip, index.php.bak, .index.php.swp] with ThreadPoolExecutor(10) as executor: [executor.submit(check_backup, http://target.com, ext) for ext in backups]2.2 实战中的骚操作遇到.DS_Store文件时Windows用户可以用dsstoreparse工具解析python3 dsstoreparse.py downloaded.DS_Storevim缓存恢复有个坑要注意如果直接vim -r index.php.swp报错试试加上-n参数禁止交换文件警告。3. Git泄露版本控制的潘多拉魔盒第一次用GitHack工具时的震撼至今难忘——看着.git目录被完整拖下来就像拿到了服务器的后门钥匙。但实际比赛中情况往往更复杂。3.1 Git泄露三重攻击路径历史记录挖掘git log -p # 查看详细修改记录 git show commit_hash # 查看特定提交暂存区恢复git stash list git stash apply stash{0}分支切换git branch -a # 查看所有分支 git checkout dev # 切换到开发分支3.2 高级利用技巧遇到过最棘手的场景是.git目录被部分删除。这时候可以尝试git fsck --full # 检查数据库完整性 git reflog # 查看引用日志有次比赛发现目标存在/git/HEAD但其他文件被删通过这个命令成功恢复wget -r -np -R index.html* http://target.com/.git/4. SVN/HG泄露被遗忘的版本控制现在虽然Git是主流但老系统中SVN和Mercurial泄露依然常见。去年某次渗透测试中正是.svn/entries文件泄露了整套ERP系统源码。4.1 SVN泄露利用流程使用dvcs-ripper工具克隆仓库./rip-svn.pl -u http://target.com/.svn检查pristine目录下的版本文件find .svn/pristine -type f -exec grep -l flag {} \;4.2 Mercurial的特殊技巧HG泄露的利用有个冷知识.hg/store目录包含所有文件变更记录。我曾用这个命令快速定位flaghg verify # 检查仓库完整性 hg log -v # 查看详细日志遇到无法直接访问的情况时可以尝试构造特殊请求curl http://target.com/.hg/requires # 检查版本5. 防御方案从开发到部署的最佳实践看过太多因配置不当导致的安全事件后我总结出这套防护方案开发阶段在.gitignore中添加敏感文件规则使用pre-commit钩子检查是否包含密钥# .pre-commit-config.yaml - repo: local hooks: - id: forbid-creds name: Check for credentials entry: grep -rnw password\|secret --include*.{php,js,env} language: system部署阶段Nginx配置屏蔽敏感路径location ~ /\.(git|svn|hg|DS_Store) { deny all; return 404; }自动化扫描备份文件find /var/www -name *.bak -o -name *.swp -delete监控阶段设置文件完整性监控aide --check # 检查关键文件变更日志监控敏感路径访问tail -f /var/log/nginx/access.log | grep -E phpinfo|\.git在CTF比赛中这些漏洞往往是最容易拿分的突破口。但现实世界的攻防更残酷——去年某公司就因.git泄露导致千万级数据泄露。记住安全无小事从第一行代码开始就要绷紧这根弦。