news 2026/10/17 16:28:01

五大Web安全靶场环境搭建实战:DVWA、Pikachu、BWAPP、Mutillidae、MCIR部署与避坑指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
五大Web安全靶场环境搭建实战:DVWA、Pikachu、BWAPP、Mutillidae、MCIR部署与避坑指南

1. 靶场环境搭建的整体思路与选型逻辑

搞安全技术研究的人,手头没几套顺手的靶场环境,就像厨师没有趁手的刀。DVWA、MCIR、Pikachu、Mutillidae、BWAPP这五个靶机,基本覆盖了Web安全入门到进阶的绝大多数场景。我最早接触这些靶场的时候,一个个手动装,踩了不少坑,后来才慢慢摸索出一套比较顺的搭建流程。

这五个靶机各有侧重,不是随便凑在一起的。DVWA适合练基础漏洞的手感,Pikachu是中文环境下最友好的综合练习平台,BWAPP的漏洞覆盖面最广,Mutillidae偏向OWASP Top 10的系统性训练,MCIR则是一个比较特殊的SQL注入专项训练场。把它们放在一起,基本上从新手到中级安全研究者需要的练习场景就齐了。

搭建方式上,我强烈建议用虚拟机+集成环境的方案,而不是在物理机上直接装。原因很简单:这些靶场本身就是为了让你练习攻击的,里面全是漏洞,放在物理机上等于给自己埋雷。用虚拟机隔离,练完了直接回滚快照,干净利落。集成环境方面,XAMPP或者phpStudy都可以,我个人更倾向XAMPP,跨平台做得好,配置透明,出问题好排查。

还有一个关键决策是数据库的选择。这五个靶机里,DVWA、Pikachu、Mutillidae、BWAPP都支持MySQL,MCIR也是基于MySQL的。所以统一用MySQL/MariaDB就行,不用折腾多数据库。PHP版本建议用7.x系列,兼容性最好,PHP 8对某些老靶场会有兼容问题,这个后面会细说。

提示:搭建之前先确认虚拟机的网络模式。NAT模式最省事,宿主机能访问靶场就行,不需要靶场访问外网。如果要用Burp Suite抓包,记得把代理配置好。

2. 基础环境准备与核心组件安装

2.1 虚拟机与操作系统的选择

虚拟机软件用VMware Workstation或者VirtualBox都行,看个人习惯。操作系统我推荐Ubuntu Server 20.04 LTS或者Debian 11,这两个版本稳定,软件源里的PHP和MySQL版本也合适。如果你更习惯Windows环境,用Windows 10/11的虚拟机也可以,配合XAMPP搭建会更直观一些,但资源占用会高不少。

我自己的方案是Ubuntu Server 20.04,分配2核CPU、4GB内存、40GB硬盘。这个配置跑五个靶场绰绰有余,如果宿主机资源紧张,2GB内存也能跑起来,只是同时开多个靶场的时候会有点卡。硬盘建议给足,因为后面要装的东西不少,而且快照也会占空间。

系统装好之后,第一件事是更新软件源并安装基础工具:

sudo apt update && sudo apt upgrade -y sudo apt install -y curl wget unzip git vim net-tools

这几条命令下去,基础环境就差不多了。net-tools是为了后面用ifconfig查看IP地址,Ubuntu 20.04默认不带这个命令,得手动装。

2.2 Web服务器与数据库的安装配置

Apache和MySQL的安装一条命令搞定:

sudo apt install -y apache2 mysql-server php php-mysql php-gd php-xml php-mbstring php-curl php-zip

这里要注意PHP扩展的完整性。php-mysql是必须的,没有它PHP连不上数据库;php-gd用于图形处理,DVWA的验证码功能需要;php-xml和php-mbstring是很多靶场框架的依赖;php-curl用于外部请求,BWAPP的部分功能会用到。

安装完成后,启动服务并设置开机自启:

sudo systemctl start apache2 sudo systemctl enable apache2 sudo systemctl start mysql sudo systemctl enable mysql

MySQL的安全初始化也要做一下,设置root密码,删除匿名用户:

sudo mysql_secure_installation

按照提示一步步走就行,root密码设一个自己记得住的,后面配置靶场的时候要用。

2.3 PHP版本兼容性处理

这一步是很多人容易翻车的地方。Ubuntu 20.04默认的PHP版本是7.4,这个版本对五个靶场都兼容。但如果你用的是Ubuntu 22.04,默认PHP是8.1,DVWA和Pikachu可能会有报错。

检查PHP版本:

php -v

如果版本是8.x,有两个选择:一是降级到7.4,二是修改靶场代码适配PHP 8。我建议降级,因为改代码太费时间,而且容易漏掉一些隐性的兼容问题。降级的方法:

sudo apt install -y software-properties-common sudo add-apt-repository ppa:ondrej/php sudo apt update sudo apt install -y php7.4 php7.4-mysql php7.4-gd php7.4-xml php7.4-mbstring php7.4-curl php7.4-zip sudo a2dismod php8.1 sudo a2enmod php7.4 sudo systemctl restart apache2

这套操作下来,PHP就切到7.4了。验证一下:

php -v

显示7.4.x就对了。

注意:切换PHP版本之后,Apache的模块也要对应切换,否则PHP文件会被当成普通文本下载,而不是解析执行。这个坑我踩过,排查了半天才发现是模块没切。

3. 五大靶机的逐一部署与配置

3.1 DVWA的部署与数据库初始化

DVWA的部署最简单,直接从GitHub拉代码:

cd /var/www/html sudo git clone https://github.com/digininja/DVWA.git dvwa sudo chown -R www-data:www-data dvwa sudo chmod -R 755 dvwa

然后配置数据库连接。DVWA的配置文件在config目录下:

cd /var/www/html/dvwa/config sudo cp config.inc.php.dist config.inc.php sudo vim config.inc.php

需要改的地方就几处:

$_DVWA[ 'db_server' ] = '127.0.0.1'; $_DVWA[ 'db_database' ] = 'dvwa'; $_DVWA[ 'db_user' ] = 'root'; $_DVWA[ 'db_password' ] = '你设置的root密码';

保存退出后,在MySQL里创建数据库:

sudo mysql -u root -p CREATE DATABASE dvwa; exit;

浏览器访问http://靶机IP/dvwa,会看到DVWA的欢迎页面。往下翻,点击"Create / Reset Database"按钮,数据库表就自动建好了。默认账号是admin,密码是password。

DVWA的安全级别默认是impossible,需要在"DVWA Security"页面改成low,不然很多漏洞练不了。这个设置存在session里,每次重新登录都要改一次,有点烦,但没办法。

3.2 Pikachu的部署与常见问题处理

Pikachu是国内团队做的一个综合靶场,中文界面,对新手很友好。部署方式也是拉代码:

cd /var/www/html sudo git clone https://github.com/zhuifengshaonianhanlu/pikachu.git sudo chown -R www-data:www-data pikachu sudo chmod -R 755 pikachu

Pikachu的数据库配置在inc/config.inc.php:

sudo vim /var/www/html/pikachu/inc/config.inc.php

修改数据库连接信息:

define('DBHOST', '127.0.0.1'); define('DBUSER', 'root'); define('DBPW', '你设置的root密码'); define('DBNAME', 'pikachu');

然后在MySQL里创建数据库并导入初始数据:

sudo mysql -u root -p CREATE DATABASE pikachu; exit; sudo mysql -u root -p pikachu < /var/www/html/pikachu/pikachu.sql

Pikachu的安装页面在http://靶机IP/pikachu/install.php,访问一下确认安装成功。如果报错说数据库连接失败,检查一下config.inc.php里的密码有没有写对,以及MySQL是否允许root用户从本地连接。

Pikachu有一个比较特殊的地方:它的某些漏洞模块需要修改PHP配置才能正常触发。比如文件包含漏洞,需要确保allow_url_include是开启的:

sudo vim /etc/php/7.4/apache2/php.ini

找到allow_url_include = Off改成On,然后重启Apache:

sudo systemctl restart apache2

提示:allow_url_include开启后会有安全风险,但靶场环境是隔离的,问题不大。练完之后如果要把环境做其他用途,记得改回来。

3.3 BWAPP的部署与配置要点

BWAPP(buggy Web Application)的漏洞数量是这几个靶场里最多的,超过100个漏洞点。部署方式:

cd /var/www/html sudo git clone https://github.com/rajeshar/bWAPP.git bwapp sudo chown -R www-data:www-data bwapp sudo chmod -R 755 bwapp

BWAPP的数据库配置在admin/settings.php文件里,但这个文件需要先通过Web界面访问才能修改。所以流程是这样的:

  1. 浏览器访问http://靶机IP/bwapp/install.php
  2. 点击"install"按钮
  3. 在数据库配置页面填入连接信息

如果install.php页面报错,可以手动修改配置文件:

sudo vim /var/www/html/bwapp/admin/settings.php

修改以下几行:

$db_server = "127.0.0.1"; $db_username = "root"; $db_password = "你设置的root密码"; $db_name = "bwapp";

然后手动创建数据库并导入数据:

sudo mysql -u root -p CREATE DATABASE bwapp; exit; sudo mysql -u root -p bwapp < /var/www/html/bwapp/db/bwapp.sql

BWAPP默认账号是bee/bug,登录后可以在界面里切换漏洞难度。BWAPP的界面比较老旧,但功能很全,适合系统性地过一遍Web漏洞。

3.4 Mutillidae的部署与数据库配置

Mutillidae是基于OWASP Top 10设计的靶场,它的特点是每个漏洞都有对应的提示和教程,适合边学边练。部署:

cd /var/www/html sudo git clone https://github.com/webpwnized/mutillidae.git mutillidae sudo chown -R www-data:www-data mutillidae sudo chmod -R 755 mutillidae

Mutillidae的数据库配置在.htaccess文件里,这个文件是隐藏的,用ls -la才能看到:

cd /var/www/html/mutillidae sudo vim .htaccess

找到数据库相关的配置项,修改为:

SetEnv DB_HOST 127.0.0.1 SetEnv DB_USER root SetEnv DB_PASSWORD 你设置的root密码 SetEnv DB_NAME mutillidae

然后创建数据库并导入数据:

sudo mysql -u root -p CREATE DATABASE mutillidae; exit; sudo mysql -u root -p mutillidae < /var/www/html/mutillidae/database/mutillidae.sql

Mutillidae的安装页面在http://靶机IP/mutillidae/set-up-database.php,访问一下确认数据库连接正常。Mutillidae有一个比较烦人的地方:它的某些功能依赖mod_rewrite模块,需要确保Apache开启了重写:

sudo a2enmod rewrite sudo systemctl restart apache2

3.5 MCIR的部署与特殊配置

MCIR(Magical Code Injection Rainbow)是一个专门用于练习代码注入的靶场,它的界面非常简陋,但功能很专注。MCIR的部署和其他几个不太一样,它需要单独配置虚拟主机。

先拉代码:

cd /var/www/html sudo git clone https://github.com/SpiderLabs/MCIR.git mcir sudo chown -R www-data:www-data mcir sudo chmod -R 755 mcir

MCIR的数据库配置在每个子目录的includes/database.inc.php文件里。MCIR的结构比较特殊,它下面有多个子靶场,比如sqlol、xssmh、cryptomg等,每个都需要单独配置数据库连接。

以sqlol为例:

sudo vim /var/www/html/mcir/sqlol/includes/database.inc.php

修改数据库连接信息:

$dbhost = '127.0.0.1'; $dbuser = 'root'; $dbpass = '你设置的root密码'; $dbname = 'sqlol';

然后创建对应的数据库:

sudo mysql -u root -p CREATE DATABASE sqlol; exit;

MCIR的sqlol模块需要导入初始数据:

sudo mysql -u root -p sqlol < /var/www/html/mcir/sqlol/includes/sqlol.sql

其他子模块的配置方式类似,都是改database.inc.php然后建库导数据。MCIR的访问地址是http://靶机IP/mcir/sqlol/,每个子模块有独立的入口。

注意:MCIR的代码比较老,在PHP 7.4下可能会有Deprecated警告,但不影响功能。如果看到满屏警告觉得烦,可以在php.ini里把error_reporting调低一点。

4. 常见问题排查与实战避坑经验

4.1 数据库连接失败的排查思路

数据库连接失败是搭建靶场时最常见的问题,表现就是页面报"Access denied"或者"Connection refused"。排查步骤我总结了一个顺序:

排查项检查方法常见原因
MySQL服务状态sudo systemctl status mysql服务未启动
数据库是否存在sudo mysql -u root -p -e "SHOW DATABASES;"建库语句没执行
用户名密码是否正确手动用mysql命令登录测试配置文件里密码写错
连接地址是否正确检查配置里是localhost还是127.0.0.1localhost走socket,127.0.0.1走TCP
用户权限是否足够SELECT user,host FROM mysql.user;root用户只允许localhost连接

其中最容易踩的坑是localhost和127.0.0.1的区别。在MySQL里,localhost走的是Unix socket,127.0.0.1走的是TCP。如果配置里写的是localhost但MySQL没有启用socket,就会连接失败。我的建议是统一用127.0.0.1,省得折腾。

还有一个坑是MySQL 8的认证插件。Ubuntu 20.04默认装的是MySQL 8,它默认用caching_sha2_password认证插件,而老版本的PHP MySQL扩展可能不支持。解决办法是改回mysql_native_password:

sudo mysql -u root -p ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码'; FLUSH PRIVILEGES; exit;

4.2 权限问题与文件上传失败的处理

靶场目录的权限设置不对,会导致两种问题:一是PHP无法写入session文件,二是文件上传功能失败。

Apache默认以www-data用户运行,所以靶场目录的属主应该是www-data:

sudo chown -R www-data:www-data /var/www/html/ sudo chmod -R 755 /var/www/html/

但有些目录需要写权限,比如DVWA的hackable/uploads目录、Pikachu的uploads目录:

sudo chmod -R 777 /var/www/html/dvwa/hackable/uploads sudo chmod -R 777 /var/www/html/pikachu/vul/unsafeupload/uploads

提示:777权限在靶场环境里没问题,但生产环境绝对不能用。靶场本身就是用来练攻击的,权限放开一点反而方便。

如果文件上传还是失败,检查PHP配置里的上传限制:

sudo vim /etc/php/7.4/apache2/php.ini

确认以下几项:

file_uploads = On upload_max_filesize = 20M post_max_size = 20M

改完重启Apache生效。

4.3 跨靶场访问的端口与路径冲突

五个靶场都放在同一个Apache下,通过不同的路径访问,理论上不会冲突。但实际搭建过程中,我遇到过两个问题:

第一个是默认虚拟主机的配置。Apache默认的000-default.conf把/var/www/html作为根目录,所有靶场都在这个目录下,访问路径就是http://IP/dvwa、http://IP/pikachu这样。如果某个靶场的代码里用了绝对路径(比如/dvwa/includes/),可能会因为路径不对导致资源加载失败。解决办法是检查靶场的配置文件,把绝对路径改成相对路径,或者配置单独的虚拟主机。

第二个是端口冲突。如果宿主机上已经跑了其他Web服务占用了80端口,虚拟机的Apache就起不来。检查端口占用:

sudo netstat -tlnp | grep :80

如果80端口被占用,可以改Apache的监听端口:

sudo vim /etc/apache2/ports.conf

把Listen 80改成Listen 8080,然后访问的时候加上端口号http://IP:8080/dvwa。

4.4 靶场安全隔离与快照管理

这五个靶场全是漏洞,放在网络里就是一个活靶子。如果虚拟机用的是桥接模式,同网络下的其他设备都能访问到,风险很大。我的建议是:

  • 虚拟机网络用NAT模式,只有宿主机能访问
  • 如果必须用桥接,在Apache里配置访问控制,只允许特定IP访问
  • 搭建完成后立即打快照,练废了直接回滚

快照管理有一个经验:不要只打一个快照。我的做法是打三个快照:一个是刚装完系统的干净状态,一个是装完所有靶场的初始状态,一个是配置好数据库和权限的可用状态。这样出问题的时候可以快速定位是哪一步出的错。

Apache的访问控制配置:

sudo vim /etc/apache2/apache2.conf

在文件末尾添加:

<Directory /var/www/html> Options Indexes FollowSymLinks AllowOverride All Require ip 192.168.1.0/24 </Directory>

这样只有192.168.1.0/24网段的设备能访问,其他IP会被拒绝。

5. 靶场使用技巧与进阶玩法

5.1 安全级别切换与漏洞触发条件

这五个靶场里,DVWA和BWAPP有安全级别切换功能,Pikachu和Mutillidae的漏洞是固定难度的,MCIR则完全看你怎么构造payload。

DVWA的安全级别在"DVWA Security"页面切换,有low、medium、high、impossible四档。low级别基本没有防护,medium加了一些简单的过滤,high级别的防护比较严格,impossible则是完全修复的版本。我的建议是每个漏洞都从low开始练,然后逐步提高级别,感受防护措施的变化。

BWAPP的安全级别在登录后的界面里切换,有low、medium、high三档。BWAPP的漏洞数量多,建议按照OWASP Top 10的分类逐个过一遍,不要跳着练。

Pikachu的漏洞难度是固定的,但它的每个漏洞模块都有详细的说明和提示,适合新手跟着教程一步步操作。Pikachu的特别之处在于它有很多组合漏洞的场景,比如XSS+CSRF组合利用,这个在实际渗透测试中很常见。

5.2 抓包工具与靶场的配合使用

练Web漏洞离不开抓包工具,Burp Suite是最常用的。配置方法:

  1. Burp Suite设置代理监听127.0.0.1:8080
  2. 浏览器设置代理指向Burp Suite
  3. 访问靶场,Burp Suite就能抓到请求

如果靶场在虚拟机里,宿主机访问虚拟机的IP,Burp Suite装在宿主机上,代理配置要注意不要代理虚拟机IP。在浏览器的代理设置里,把虚拟机IP加到例外列表里,这样访问靶场的请求不经过Burp Suite,只有访问外网的请求才走代理。

Burp Suite的Repeater模块是练靶场的神器,可以手动修改请求参数,观察响应变化。Intruder模块适合做暴力破解和参数fuzzing。Scanner模块在社区版里功能有限,但手动测试也够用了。

提示:Burp Suite的证书要装到浏览器里,不然HTTPS请求会报错。靶场一般是HTTP的,不装证书也能用,但如果靶场配了HTTPS,就必须装证书。

5.3 靶场数据的备份与迁移

搭好的靶场环境,如果换机器或者重装系统,重新搭一遍很费时间。我的做法是定期备份虚拟机的快照,同时把靶场的数据库导出:

mysqldump -u root -p --all-databases > /backup/all_databases.sql

靶场的代码目录也打包备份:

tar -czvf /backup/webapps.tar.gz /var/www/html/

恢复的时候,先装好基础环境,然后导入数据库和代码:

sudo mysql -u root -p < /backup/all_databases.sql sudo tar -xzvf /backup/webapps.tar.gz -C /

这样十分钟就能恢复整个靶场环境,比重新搭建快得多。

5.4 从靶场到实战的能力迁移

靶场练熟了,怎么用到实际工作中?我的体会是:靶场练的是漏洞原理和利用手法,实战考的是信息收集和漏洞组合。

在靶场里,你知道漏洞在哪里,直接去利用就行。但在实战中,你需要先做信息收集,找到可能的入口点,然后逐个测试。这个能力靶场给不了,需要额外练习。

我的建议是:靶场练到一定程度后,可以尝试一些模拟实战环境的平台,比如自己搭一个包含多个漏洞的Web应用,然后从外网视角去测试。或者参加一些CTF比赛,CTF的Web题目往往需要组合多个漏洞才能拿到flag,这个思路和实战很接近。

另外,靶场里的漏洞都是已知漏洞,实战中更多是逻辑漏洞和业务漏洞。这些在靶场里练不到,需要在实际项目中积累经验。但靶场打下的基础是必要的,没有这个基础,连常见的注入和XSS都搞不定,更别说逻辑漏洞了。

6. 环境维护与长期使用建议

6.1 定期更新与版本管理

靶场代码更新频率不高,但偶尔会有bug修复和新漏洞添加。定期更新靶场代码:

cd /var/www/html/dvwa sudo git pull cd /var/www/html/pikachu sudo git pull

更新之前先备份数据库,因为有些更新会修改数据库结构。更新之后如果页面报错,检查一下配置文件有没有被覆盖。

PHP和MySQL的版本也要关注。Ubuntu的软件源会推送安全更新,但大版本升级可能会影响靶场兼容性。我的做法是锁定PHP和MySQL的大版本,只装安全补丁,不升大版本:

sudo apt-mark hold php7.4 mysql-server

这样系统更新的时候不会把PHP升到8.x,避免兼容性问题。

6.2 资源占用优化与性能调优

五个靶场同时跑,Apache和MySQL的内存占用会比较高。如果虚拟机内存只有2GB,可能会卡。优化方法:

  • 关闭不用的Apache模块:sudo a2dismod autoindex status
  • 调整MySQL的缓冲池大小:在/etc/mysql/mysql.conf.d/mysqld.cnf里设置innodb_buffer_pool_size = 128M
  • 关闭靶场里不用的功能模块

如果只是偶尔练某个靶场,可以把其他靶场的目录临时改名,Apache就不会加载它们:

sudo mv /var/www/html/mutillidae /var/www/html/_mutillidae

需要的时候再改回来。

6.3 靶场环境的日常使用习惯

最后分享几个我养成的使用习惯:

第一,每次练习前打快照。靶场练着练着可能会把数据库搞乱,或者上传一些奇怪的文件,打快照可以随时回滚。

第二,记录练习笔记。每个漏洞的利用过程、payload、遇到的坑,都记下来。靶场练多了容易忘,笔记是最好的复习资料。

第三,不要只练一个靶场。DVWA练熟了,换Pikachu练,同样的漏洞在不同靶场里的实现方式可能不一样,多练几个能加深理解。

第四,定期重置数据库。靶场练久了,数据库里会积累很多测试数据,影响练习效果。DVWA有"Create / Reset Database"按钮,其他靶场可以手动重新导入SQL文件。

这套环境我用了两年多,从最初的DVWA单靶场,慢慢加到五个,中间重装过好几次,踩过的坑基本都写在上面的内容里了。搭建过程不算复杂,但细节很多,尤其是数据库连接和权限配置这两块,新手很容易卡住。按照上面的步骤一步步来,基本上两三个小时就能全部搞定。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/17 16:22:48

LabVIEW调用HCNetSDK实战:从CLN配置到多路抓图

简介&#xff1a;海康威视HCNetSDK V5.3.6.30库文件是一套面向LabVIEW开发者的摄像头控制接口&#xff0c;解决了在图形化编程环境中直接调用设备SDK的难题&#xff0c;适合需要快速集成监控功能的中级LabVIEW工程师。资源为ZIP压缩包&#xff0c;共45个文件&#xff0c;以DLL动…

作者头像 李华
网站建设 2026/10/17 16:19:28

React Native开发必知:JS、JSX、TS、TSX四者区别与选型指南

最近在React Native社区里&#xff0c;经常看到有人把js、jsx、ts、tsx混着用&#xff0c;也看到不少刚入门的朋友问“这四个到底有啥区别&#xff1f;”。我最早接触RN的时候也走过弯路&#xff1a;项目里既有.js又有.jsx&#xff0c;后来升级TypeScript又冒出来.ts和.tsx&…

作者头像 李华
网站建设 2026/10/17 16:19:23

H5幸运刮刮乐系统:免公众号、轻量级分佣抽奖方案

简介&#xff1a;这是一套开箱即用的H5幸运刮刮乐抽奖系统源码&#xff0c;面向中小商家、营销运营人员及PHP全栈开发者&#xff0c;解决微信生态内无需公众号资质即可快速部署抽奖活动的痛点&#xff0c;支持多级分佣与直运营模式。资源包共2013个文件&#xff0c;以518个JSON…

作者头像 李华
网站建设 2026/10/17 16:19:15

AI检测原理与降AI工具搭配:让英文论文更自然

这几年我帮不少硕士博士生看过英文论文&#xff0c;频率最高的一个诉求不是"帮我改改语法"&#xff0c;而是"能不能把Turnitin的AI检测标红降下去"。这个词被大家简化成了"降AI"&#xff0c;对应的工具也越来越卷&#xff0c;SpeedAI科研小助手就…

作者头像 李华
网站建设 2026/10/17 16:16:22

AI辅助教材写作如何把查重率从28%降到8%?低查重编写策略全解析

我最近在整理一本实操类教材&#xff0c;初稿交出去后被查重打回来&#xff0c;重复率28%。看到报告第一眼我是不服的——内容明明是我们团队一个个案例跑出来的&#xff0c;怎么会有这么多红字&#xff1f;后来把报告下载下来逐段看&#xff0c;才发现标红最多的是三块&#x…

作者头像 李华