liunx系统搭建pikachu

#!/bin/bash

==========================================

CentOS 7/8 一键搭建 Pikachu 靶场(完整修复版)

适配 EOL 系统、自动修复源、稳定配 DNS、防 Apache 冲突

==========================================

set -e

GREEN='\033[0;32m'

RED='\033[0;31m'

YELLOW='\033[1;33m'

NC='\033[0m'

echo -e "{GREEN}\[0/11\] 检查 root 权限...{NC}"

if "$EUID" -ne 0 ; then

echo -e "{RED}请用 sudo 或 root 用户执行{NC}"

exit 1

fi

判断系统版本

if -f /etc/os-release ; then

. /etc/os-release

VER=$VERSION_ID

else

echo -e "{RED}无法识别系统版本{NC}"

exit 1

fi

echo -e "{GREEN}\[1/11\] 配置 DNS(nmcli 方式,不崩网络)...{NC}"

if systemctl is-active NetworkManager >/dev/null 2>&1; then

nmcli connection modify ens33 ipv4.dns "223.5.5.5 119.29.29.29" 2>/dev/null || true

nmcli connection modify ens33 ipv4.ignore-auto-dns yes 2>/dev/null || true

nmcli connection up ens33 2>/dev/null || true

echo -e "{GREEN}DNS 已通过 nmcli 写入 ens33{NC}"

else

echo "nameserver 223.5.5.5" > /etc/resolv.conf

echo "nameserver 119.29.29.29" >> /etc/resolv.conf

echo -e "{YELLOW}NetworkManager 未运行,已写入 /etc/resolv.conf{NC}"

fi

echo -e "{GREEN}当前 DNS:{NC}"

grep "^nameserver" /etc/resolv.conf | head -3

echo ""

echo -e "{GREEN}\[2/11\] 修复 YUM 源(CentOS 7 EOL 切换 vault/阿里云)...{NC}"

mkdir -p /etc/yum.repos.d/bak

cp /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/ 2>/dev/null || true

if \[ "$VER" == 7\* ]; then

CentOS 7 已停止维护,切阿里云源

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 2>/dev/null || \

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 2>/dev/null || true

同时安装 epel

yum install -y epel-release 2>/dev/null || \

rpm -Uvh http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm 2>/dev/null || true

yum clean all

yum makecache

PKG_MGR="yum"

elif \[ "$VER" == 8\* ]; then

dnf install -y epel-release

dnf clean all

dnf makecache

PKG_MGR="dnf"

else

PKG_MGR="yum"

yum clean all

yum makecache

fi

echo -e "{GREEN}\[3/11\] 安装 LAMP + 工具...{NC}"

$PKG_MGR install -y -q httpd mariadb-server mariadb \

php php-mysqlnd php-gd php-mbstring php-xml php-json \

git wget unzip curl

echo -e "{GREEN}\[4/11\] 启动并启用服务...{NC}"

systemctl start httpd 2>/dev/null || true

systemctl start mariadb 2>/dev/null || true

systemctl enable httpd >/dev/null 2>&1

systemctl enable mariadb >/dev/null 2>&1

echo -e "{GREEN}\[5/11\] 初始化 MariaDB...{NC}"

DB_NAME="pikachu"

DB_USER="pikachu"

DB_PASS="pikachu123"

ROOT_PASS="root123"

给 root 设密码(如果还没设)

mysqladmin -u root password "$ROOT_PASS" 2>/dev/null || true

创建库和用户

mysql -u root -p"$ROOT_PASS" -e "

CREATE DATABASE IF NOT EXISTS ${DB_NAME} DEFAULT CHARACTER SET utf8mb4;

CREATE USER IF NOT EXISTS '{DB_USER}'@'localhost' IDENTIFIED BY '{DB_PASS}';

GRANT ALL PRIVILEGES ON {DB_NAME}.\* TO '{DB_USER}'@'localhost';

FLUSH PRIVILEGES;

" 2>/dev/null || {

echo -e "{RED}数据库配置失败,请检查 MariaDB 是否已启动{NC}"

exit 1

}

echo -e "{GREEN}\[6/11\] 下载 Pikachu 源码...{NC}"

cd /var/www/html

rm -rf pikachu

先尝试 git,失败则用 wget 下载 zip(GitHub 可能被墙)

if git clone https://github.com/zhuifengshaonianhanlu/pikachu.git 2>/dev/null; then

echo -e "{GREEN}通过 git clone 下载成功{NC}"

else

echo -e "{YELLOW}git 失败,改用 wget 下载 zip...{NC}"

wget -q https://github.com/zhuifengshaonianhanlu/pikachu/archive/refs/heads/master.zip -O pikachu.zip

unzip -q -o pikachu.zip

mv pikachu-master pikachu

rm -f pikachu.zip

echo -e "{GREEN}通过 wget 下载并解压成功{NC}"

fi

echo -e "{GREEN}\[7/11\] 配置数据库连接...{NC}"

cd /var/www/html/pikachu

if -f "inc/config.inc.php.dist" ; then

cp inc/config.inc.php.dist inc/config.inc.php

else

mkdir -p inc

fi

确保配置文件存在且内容正确

cat > inc/config.inc.php << EOF

<?php

define('DBHOST', '127.0.0.1');

define('DBUSER', '${DB_USER}');

define('DBPW', '${DB_PASS}');

define('DBNAME', '${DB_NAME}');

define('DBPORT', '3306');

?>

EOF

echo -e "{GREEN}\[8/11\] 修复 Apache 配置(防端口冲突 + 监听所有网卡)...{NC}"

HTTPD_CONF="/etc/httpd/conf/httpd.conf"

备份

cp "HTTPD_CONF" "{HTTPD_CONF}.bak.$(date +%s)" 2>/dev/null || true

清理所有 Listen 行,只留一条干净的

sed -i '/^Listen/d' "$HTTPD_CONF"

echo "Listen 80" >> "$HTTPD_CONF"

加 ServerName 消除启动警告

if ! grep -q "^ServerName" "$HTTPD_CONF"; then

echo "ServerName localhost:80" >> "$HTTPD_CONF"

fi

确保没有 127.0.0.1 限定

sed -i 's/^Listen 127.0.0.1:80/Listen 80/g' "$HTTPD_CONF" 2>/dev/null || true

echo -e "{GREEN}\[9/11\] 权限、防火墙、SELinux...{NC}"

chown -R apache:apache /var/www/html/pikachu

chmod -R 755 /var/www/html/pikachu

if command -v firewall-cmd &> /dev/null; then

firewall-cmd --permanent --add-service=http >/dev/null 2>&1 || true

firewall-cmd --reload >/dev/null 2>&1 || true

fi

SELinux 临时关闭 + 永久关闭

setenforce 0 2>/dev/null || true

sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config 2>/dev/null || true

echo -e "{GREEN}\[10/11\] 重启 Apache...{NC}"

先杀掉可能残留的 httpd(防端口占用)

pkill -9 httpd 2>/dev/null || true

sleep 1

systemctl restart httpd

echo -e "{GREEN}\[11/11\] 验证...{NC}"

HTTP_STATUS=$(systemctl is-active httpd)

LISTEN_RESULT=$(ss -tlnp 2>/dev/null | grep :80 || true)

echo "Apache 状态: $HTTP_STATUS"

echo "端口监听: $LISTEN_RESULT"

if "$HTTP_STATUS" = "active" && echo "$LISTEN_RESULT" | grep -q ":80"; then

IP_ADDR=(ip route get 1 2\>/dev/null \| awk '{print 7; exit}' || hostname -I | awk '{print $1}')

echo ""

echo -e "{GREEN}========================================{NC}"

echo -e "{GREEN} Pikachu 安装完成!{NC}"

echo -e "{GREEN}========================================{NC}"

echo -e " 初始化地址: {GREEN}http://{IP_ADDR}/pikachu/install.php${NC}"

echo -e " 访问地址: {GREEN}http://{IP_ADDR}/pikachu${NC}"

echo -e " 数据库: {GREEN}{DB_NAME} / {DB_USER} / {DB_PASS}${NC}"

echo -e "{GREEN}========================================{NC}"

echo ""

echo "【下一步】虚拟机 Snort 联调:"

echo " 1. 虚拟机设为'桥接模式'"

echo " 2. 物理机浏览器访问 http://${IP_ADDR}/pikachu"

echo " 3. 不要用 127.0.0.1,必须用上面的局域网 IP"

else

echo -e "{RED}Apache 启动异常,请检查 /var/log/httpd/error_log{NC}"

exit 1

fi

相关推荐
laoli_coding16 分钟前
数据机密性保护算法汇总(国际算法)
安全·网络安全·密码学
X7x52 小时前
零信任架构:重塑数字时代安全边界的战略转型
网络安全·网络攻击模型·安全威胁分析·安全架构·零信任架构
锐速网络3 小时前
CDN加速服务怎么选?主流CDN加速平台横向对比(2026实战版)
网络安全·网络加速·高防cdn·cdn选型·cdn对比·企业级cdn
超级无敌zhq5 小时前
内网横向移动实战:从单点攻破到域控沦陷
网络·安全·web安全·网络安全
lcreek5 小时前
SQL 注入实战:DVWA LOW完整测试指南
网络安全·sql注入
Whoami!6 小时前
05-【园区】SDN+VXLAN 私有云安全防护架构
网络安全·架构·sdn·拓扑图
酉鬼女又兒8 小时前
零基础入门虚拟局域网VLAN:从广播域问题根源到802.1q帧格式、三大端口类型及实战例题全解析
网络·网络协议·计算机网络·网络安全·职场和发展·智能路由器·求职招聘
pencek8 小时前
HakcMyVM-driftingblues3
网络安全
HackTwoHub8 小时前
关于文件上传漏洞深度绕过利用教程,突破命令执行限制
运维·安全·web安全·网络安全·系统安全·安全架构
超级无敌zhq8 小时前
内网权限维持实战:打造持久化后门与隐蔽通道
网络·windows·安全·网络安全