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

相关推荐
不驚5 小时前
软考信息安全工程师-第七章《访问控制技术原理与应用》
计算机网络·网络安全·信息安全·软考·信息安全工程师
山川绿水11 小时前
bugku——PWN——overflow2
人工智能·web安全·网络安全
浩浩测试一下18 小时前
汇编 高低八位寄存器数据存储方式(逆向分析)
汇编·网络安全·逆向·二进制·免杀·寄存器·windows编程
汤愈韬18 小时前
TK_HCIP-Security_FW的可靠性_双机热备场景_上接路由器下接交换机
网络·网络协议·网络安全
梧六柒21 小时前
9-::$DATA后缀绕过
网络安全
X7x51 天前
网络入侵防御系统(IPS):从被动防御到主动拦截的网络安全革命
网络安全·网络攻击模型·安全威胁分析·安全架构·ips
Soari1 天前
AI 编码智能体的“安全防弹衣”:深度拆解 agent-skills,构建百分百受信任的专业技能注册表
人工智能·网络安全·github·软件工程·aiagent·claudecode·agent-skills
梧六柒1 天前
8- 点绕过
网络安全
深邃-1 天前
【Web安全】-SRC平台介绍:CNVD平台-事件型漏洞-通用型漏洞,教育SRC平台,漏洞盒子,补天漏洞平台,企业SRC平台,企业和公益SRC平台
网络协议·安全·web安全·网络安全·https·src·cnvd