当前位置: 首页 > article >正文

Linux靶机网站配置:从零搭建Web靶场环境

在网络安全学习中,搭建靶机环境是进行渗透测试和防御技术研究的重要环节。本教程将详细介绍如何在Linux系统(如Kali、Debian、Ubuntu等)上配置一个基于Apache的靶机网站,支持HTTP/HTTPS、虚拟主机、SSL自签名证书、本地域名解析、权限控制及多个子域名站点配置。


前置条件

  • 操作系统:Linux发行版(如Kali Linux、Ubuntu 20.04+、Debian 11+)
  • 权限要求:具有root或sudo权限
  • 网络环境:本地或虚拟机环境,推荐使用VirtualBox/VMware
  • 工具:终端、文本编辑器(如nano/vim)、curl、浏览器
  • 基础知识:熟悉Linux基本命令、Apache配置和网络概念

一、安装和配置Apache服务

1.1 安装Apache2

首先确保系统软件包是最新的,然后安装Apache2 Web服务器。

sudo apt update
sudo apt install apache2 -y

安装完成后,Apache会自动启动。可以通过以下命令检查服务状态:

sudo systemctl status apache2

若未运行,可手动启动:

sudo systemctl start apache2

1.2 创建站点目录和测试页面

为靶机网站创建一个独立的目录,并添加一个简单的测试页面。

sudo mkdir -p /var/www/test.lab
echo "<h1>Welcome to test.lab</h1>" | sudo tee /var/www/test.lab/index.html

设置正确的目录权限,确保Apache进程(默认用户为www-data)有访问权限:

sudo chown -R www-data:www-data /var/www/test.lab
sudo chmod -R 755 /var/www/test.lab

二、配置Apache虚拟主机(HTTP)

2.1 创建虚拟主机配置文件

为靶机网站配置一个虚拟主机,域名设置为test.lab

sudo nano /etc/apache2/sites-available/test.lab.conf

添加以下内容:

<VirtualHost *:80>ServerAdmin webmaster@test.labServerName test.labDocumentRoot /var/www/test.lab<Directory /var/www/test.lab>Options Indexes FollowSymLinksAllowOverride AllRequire all granted</Directory>ErrorLog ${APACHE_LOG_DIR}/test.lab_error.logCustomLog ${APACHE_LOG_DIR}/test.lab_access.log combined
</VirtualHost>
  • ServerName:定义主域名
  • DocumentRoot:指定网站根目录
  • AllowOverride All:允许.htaccess覆盖配置
  • ErrorLog/CustomLog:记录错误和访问日志

2.2 启用虚拟主机

启用刚创建的虚拟主机配置,并重新加载Apache服务:

sudo a2ensite test.lab.conf
sudo systemctl reload apache2

2.3 配置本地域名解析

为了在本地访问test.lab,需要编辑/etc/hosts文件进行域名解析。

sudo nano /etc/hosts

添加以下内容:

127.0.0.1    test.lab

注意:如果靶机运行在虚拟机或远程设备上,将127.0.0.1替换为靶机的实际IP地址(如192.168.1.50)。

2.4 验证HTTP配置

使用浏览器访问http://test.lab,或在终端运行:

curl http://test.lab

预期输出:

<h1>Welcome to test.lab</h1>

若无法访问,检查以下内容:

  • Apache服务是否运行:sudo systemctl status apache2
  • 防火墙是否阻止80端口:sudo ufw status
  • /etc/hosts配置是否正确

三、配置HTTPS和自签名SSL证书

为靶机网站启用HTTPS,增强安全性并模拟真实生产环境。

3.1 启用Apache SSL模块

sudo a2enmod ssl
sudo systemctl restart apache2

3.2 生成自签名SSL证书

创建证书存储目录并生成自签名证书,有效期365天。

sudo mkdir -p /etc/ssl/test.lab
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \-keyout /etc/ssl/test.lab/test.lab.key \-out /etc/ssl/test.lab/test.lab.crt \-subj "/C=CN/ST=Shanghai/L=Shanghai/O=Test Lab/CN=test.lab"

3.3 创建HTTPS虚拟主机

新建HTTPS虚拟主机配置文件:

sudo nano /etc/apache2/sites-available/test.lab-ssl.conf

添加以下内容:

<VirtualHost *:443>ServerAdmin webmaster@test.labServerName test.labDocumentRoot /var/www/test.labSSLEngine onSSLCertificateFile /etc/ssl/test.lab/test.lab.crtSSLCertificateKeyFile /etc/ssl/test.lab/test.lab.key<Directory /var/www/test.lab>Options Indexes FollowSymLinksAllowOverride AllRequire all granted</Directory>ErrorLog ${APACHE_LOG_DIR}/test.lab_ssl_error.logCustomLog ${APACHE_LOG_DIR}/test.lab_ssl_access.log combined
</VirtualHost>

启用HTTPS站点并重启Apache:

sudo a2ensite test.lab-ssl.conf
sudo systemctl reload apache2

3.4 配置HTTP到HTTPS自动重定向

编辑HTTP虚拟主机配置文件,将所有HTTP请求重定向到HTTPS:

sudo nano /etc/apache2/sites-available/test.lab.conf

修改为以下内容:

<VirtualHost *:80>ServerName test.labRedirect permanent / https://test.lab/
</VirtualHost>

重新加载配置:

sudo systemctl reload apache2

3.5 验证HTTPS配置

在浏览器访问http://test.lab,应自动跳转到https://test.lab,并显示欢迎页面。由于使用自签名证书,浏览器可能提示“证书不安全”,可选择信任继续访问。

使用curl验证:

curl -k https://test.lab

预期输出:

<h1>Welcome to test.lab</h1>

四、启用权限控制(.htaccess)

通过.htaccess文件实现访问控制,模拟真实场景中的权限管理。

4.1 确保支持.htaccess

虚拟主机配置中已包含AllowOverride All,无需额外修改。

4.2 示例:限制非本地访问

在站点目录下创建.htaccess文件:

sudo nano /var/www/test.lab/.htaccess

添加以下内容,限制仅本地(127.0.0.1)访问:

Order Deny,Allow
Deny from all
Allow from 127.0.0.1

4.3 示例:启用基本认证

安装htpasswd工具并创建密码文件:

sudo apt install apache2-utils
sudo htpasswd -c /etc/apache2/.htpasswd admin

按提示输入密码。接着编辑.htaccess

sudo nano /var/www/test.lab/.htaccess

添加以下内容:

AuthType Basic
AuthName "Restricted Area"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

启用auth_basic模块并重新加载:

sudo a2enmod auth_basic
sudo systemctl reload apache2

访问https://test.lab时,浏览器会提示输入用户名(admin)和密码。


五、配置多个子域名站点

为了模拟复杂的Web环境,可以为同一靶机配置多个子域名站点(如admin.test.labapi.test.labupload.test.lab)。以下是两种实现方式:通过ServerAlias实现子域名共享同一站点,或为每个子域名创建独立的虚拟主机。

5.1 方法1:使用ServerAlias共享站点

编辑主站点的虚拟主机配置文件,支持多个子域名:

sudo nano /etc/apache2/sites-available/test.lab-ssl.conf

修改为以下内容,添加ServerAlias

<VirtualHost *:443>ServerAdmin webmaster@test.labServerName test.labServerAlias www.test.lab admin.test.lab api.test.lab upload.test.labDocumentRoot /var/www/test.labSSLEngine onSSLCertificateFile /etc/ssl/test.lab/test.lab.crtSSLCertificateKeyFile /etc/ssl/test.lab/test.lab.key<Directory /var/www/test.lab>Options Indexes FollowSymLinksAllowOverride AllRequire all granted</Directory>ErrorLog ${APACHE_LOG_DIR}/test.lab_ssl_error.logCustomLog ${APACHE_LOG_DIR}/test.lab_ssl_access.log combined
</VirtualHost>

更新/etc/hosts以支持子域名解析:

sudo nano /etc/hosts

添加以下内容:

127.0.0.1    test.lab www.test.lab admin.test.lab api.test.lab upload.test.lab

重新加载Apache:

sudo systemctl reload apache2

验证:访问https://admin.test.labhttps://api.test.lab,应显示相同的欢迎页面。

5.2 方法2:为每个子域名创建独立虚拟主机

为每个子域名创建独立的站点目录和配置文件,以模拟不同的服务。

5.2.1 创建子域名目录和测试页面
sudo mkdir -p /var/www/admin.test.lab
sudo mkdir -p /var/www/api.test.lab
echo "<h1>Welcome to admin.test.lab</h1>" | sudo tee /var/www/admin.test.lab/index.html
echo "<h1>Welcome to api.test.lab</h1>" | sudo tee /var/www/api.test.lab/index.html

设置权限:

sudo chown -R www-data:www-data /var/www/admin.test.lab /var/www/api.test.lab
sudo chmod -R 755 /var/www/admin.test.lab /var/www/api.test.lab
5.2.2 创建子域名虚拟主机配置文件

admin.test.lab创建配置文件:

sudo nano /etc/apache2/sites-available/admin.test.lab-ssl.conf

添加以下内容:

<VirtualHost *:443>ServerAdmin webmaster@admin.test.labServerName admin.test.labDocumentRoot /var/www/admin.test.labSSLEngine onSSLCertificateFile /etc/ssl/test.lab/test.lab.crtSSLCertificateKeyFile /etc/ssl/test.lab/test.lab.key<Directory /var/www/admin.test.lab>Options Indexes FollowSymLinksAllowOverride AllRequire all granted</Directory>ErrorLog ${APACHE_LOG_DIR}/admin.test.lab_ssl_error.logCustomLog ${APACHE_LOG_DIR}/admin.test.lab_ssl_access.log combined
</VirtualHost>

api.test.lab创建配置文件:

sudo nano /etc/apache2/sites-available/api.test.lab-ssl.conf

添加以下内容:

<VirtualHost *:443>ServerAdmin webmaster@api.test.labServerName api.test.labDocumentRoot /var/www/api.test.labSSLEngine onSSLCertificateFile /etc/ssl/test.lab/test.lab.crtSSLCertificateKeyFile /etc/ssl/test.lab/test.lab.key<Directory /var/www/api.test.lab>Options Indexes FollowSymLinksAllowOverride AllRequire all granted</Directory>ErrorLog ${APACHE_LOG_DIR}/api.test.lab_ssl_error.logCustomLog ${APACHE_LOG_DIR}/api.test.lab_ssl_access.log combined
</VirtualHost>
5.2.3 启用子域名站点
sudo a2ensite admin.test.lab-ssl.conf
sudo a2ensite api.test.lab-ssl.conf
sudo systemctl reload apache2
5.2.4 配置子域名HTTP到HTTPS重定向

为每个子域名添加HTTP重定向配置:

sudo nano /etc/apache2/sites-available/admin.test.lab.conf

添加以下内容:

<VirtualHost *:80>ServerName admin.test.labRedirect permanent / https://admin.test.lab/
</VirtualHost>

api.test.lab创建类似配置文件:

sudo nano /etc/apache2/sites-available/api.test.lab.conf

添加以下内容:

<VirtualHost *:80>ServerName api.test.labRedirect permanent / https://api.test.lab/
</VirtualHost>

启用并重新加载:

sudo a2ensite admin.test.lab.conf
sudo a2ensite api.test.lab.conf
sudo systemctl reload apache2
5.2.5 验证子域名配置

访问以下地址:

  • https://admin.test.lab:显示“Welcome to admin.test.lab”
  • https://api.test.lab:显示“Welcome to api.test.lab”

使用curl验证:

curl -k https://admin.test.lab
curl -k https://api.test.lab

六、常见问题与解决方法

  • 无法访问网站
    • 检查Apache服务状态:sudo systemctl status apache2
    • 确认/etc/hosts配置正确
    • 检查防火墙规则:sudo ufw allow 80sudo ufw allow 443
  • 证书警告
    • 自签名证书会导致浏览器警告,可忽略或导入证书到信任列表。
  • 权限错误
    • 确保目录和文件权限正确:sudo chown -R www-data:www-data /var/www/*

相关文章:

Linux靶机网站配置:从零搭建Web靶场环境

在网络安全学习中&#xff0c;搭建靶机环境是进行渗透测试和防御技术研究的重要环节。本教程将详细介绍如何在Linux系统&#xff08;如Kali、Debian、Ubuntu等&#xff09;上配置一个基于Apache的靶机网站&#xff0c;支持HTTP/HTTPS、虚拟主机、SSL自签名证书、本地域名解析、…...

电机试验平台:创新科技推动电动机研究发展

电机试验平台是电机制造和研发过程中不可或缺的重要设备&#xff0c;其功能涵盖了电机性能测试、电机寿命测试、电机质量评估等多个方面。随着科技的不断发展和电机应用领域的日益扩大&#xff0c;对电机试验平台的要求也越来越高。本文将从现代化电机试验平台的设计与应用两个…...

STM32F103定时器1每毫秒中断一次

定时器溢出中断&#xff0c;在程序设计中经常用到。在使用TIM1和TIM8溢出中断时&#xff0c;需要注意“TIM_TimeBaseStructure.TIM_RepetitionCounter0;”&#xff0c;它表示溢出一次&#xff0c;并可以设置中断标志位。 TIM1_Interrupt_Initializtion(1000,72); //当arr1…...

【springcloud学习(dalston.sr1)】Zuul路由访问映射规则配置及使用(含源代码)(十二)

该系列项目整体介绍及源代码请参照前面写的一篇文章【springcloud学习(dalston.sr1)】项目整体介绍&#xff08;含源代码&#xff09;&#xff08;一&#xff09; springcloud学习&#xff08;dalston.sr1&#xff09;系统文章汇总如下&#xff1a; 【springcloud学习(dalston…...

Qt与Hid设备通信

什么是HID&#xff1f; HID&#xff08;Human Interface Device&#xff09;是‌直接与人交互的电子设备‌&#xff0c;通过标准化协议实现用户与计算机或其他设备的通信&#xff0c;典型代表包括键盘、鼠标、游戏手柄等。‌ 为什么HID要与qt进行通信&#xff1f; 我这里的应…...

2024 山东省ccpc省赛

目录 I&#xff08;签到&#xff09; 题目简述&#xff1a; 思路&#xff1a; 代码&#xff1a; A&#xff08;二分答案&#xff09; 题目简述&#xff1a; 思路&#xff1a; 代码&#xff1a; K&#xff08;构造&#xff09; 题目&#xff1a; 思路&#xff1a; 代…...

SAP HCM 0008数据存储逻辑

0008信息类型&#xff1a;0008信息类型是存储员工基本薪酬的地方&#xff0c;因为很多企业都会都薪酬带宽&#xff0c;都会按岗定薪&#xff0c;所以在上线前为体现工资体系的标准化&#xff0c;都会在配置对应的薪酬关系&#xff0c;HCM叫间接评估&#xff0c;今天我们就分析下…...

Elasticsearch 查询与过滤(Query vs. Filter)面试题

Elasticsearch 查询与过滤(Query vs. Filter)面试题 🚀 目录 基础概念性能优化实战应用错误排查高级场景设计题总结基础概念 🔍 面试题1:基础概念 题目: 请解释Elasticsearch中query和filter的主要区别,并说明何时应优先使用filter。 👉 查看参考答案 核心区别…...

golang读、写、复制、创建目录、删除、重命名,文件方法总结

文章目录 一、只读文件二、写入文件三、复制文件四、创建目录五、删除目录/文件五、重命名文件 一、只读文件 file, err : os.Open("./main.go")defer file.Close() //打开文件一定要关闭关闭文件if err ! nil {fmt.Println("文件打开失败", err)}/*方案一…...

如何使用通义灵码辅助学习C++编程 - AI编程助手提升效率

一、引言 C 是一门功能强大且灵活的编程语言&#xff0c;在软件开发、系统编程、游戏开发等领域广泛应用。然而&#xff0c;其复杂的语法和丰富的特性使得学习曲线较为陡峭。对于初学者而言&#xff0c;在学习过程中难免会遇到各种问题&#xff0c;如语法理解困难、代码调试耗…...

解决LeetCode 47. 全排列 II 问题的正确姿势:深入分析剪枝与状态跟踪

文章目录 问题描述常见错误代码与问题分析错误代码示例错误分析 正确解决方案修正后的代码关键修正点 核心逻辑详解1. 为何使用 boolean[] used 而非 HashSet&#xff1f;2. 剪枝条件 !used[i - 1] 的作用 场景对比&#xff1a;何时用数组&#xff1f;何时用哈希表&#xff1f;…...

ubuntu18 设置静态ip

百度 编辑/etc/netplan/01-netcfg.yaml 系统没有就自己编写 network: version: 2 renderer: networkd ethernets: eth0: dhcp4: no addresses: [192.168.20.8/24] # 设置你的IP地址和子网掩码 gateway4: 192.168.20.1 # 网关地址 namese…...

【Docker】CentOS 8.2 安装Docker教程

目录 1.卸载 2.安装依赖 3.设置yum源 4.安装Docker 5.启动Docker 6.设置Docker开机自启 7.验证Docker是否安装成功 8.配置多个国内镜像地址 9.重启Docker 10.Docker指令大全 10.1.启动与关闭Docker 10.2.Docker镜像操作 10.3.Docker容器操作 10.4.Docker Compose操作…...

K230 ISP:一种新的白平衡标定方法

第一次遇见需要利用光谱响应曲线进行白平衡标定的方法。很好奇是如何利用光谱响应曲线进行白平衡标定的。 参考资料参考&#xff1a;K230 ISP图像调优指南 K230 介绍 嘉楠科技 Kendryte 系列 AIoT 芯片中的最新一代 AIoT SoC K230 芯片采用全新的多核异构单元加速计算架构&a…...

桃芯ingchips——windows HID键盘例程无法同时连接两个,但是安卓手机可以的问题

目录 环境 现象 原理及解决办法 环境 PC&#xff1a;windows11 安卓&#xff1a;Android14 例程使用的是HID Keyboard&#xff0c;板子使用的是91870CQ的开发板&#xff0c;DB870CC1A 现象 连接安卓手机时并不会出现该现象&#xff0c;两个开发板都可以当做键盘给手机发按…...

SQL看最多的数据,但想从小到大排列看趋势

SQL 查询&#xff1a;从 test 表中获取本月的数据&#xff0c;并对数量最多的前10个流程按数量升序排序 假设表结构 test 表包含请求信息。workflow_base 包含流程的基本信息。 CREATE TABLE test (requestid INT, -- 请求IDworkflowid INT, -- 流程IDcurr…...

Go语言 Gin框架 使用指南

Gin 是一个用 Go (Golang) 编写的 Web 框架。 它具有类似 martini 的 API&#xff0c;性能要好得多&#xff0c;多亏了 httprouter&#xff0c;速度提高了 40 倍。 如果您需要性能和良好的生产力&#xff0c;您一定会喜欢 Gin。Gin 相比于 Iris 和 Beego 而言&#xff0c;更倾向…...

[Linux] vim及gcc工具

目录 一、vim 1.vim的模式 2.vim的命令集 (1):命令模式 (2):底行模式 3.vim配置 二、gcc 1.gcc格式及选项 2.工作布置 三、自动化构建工具makefile 1.基本使用方法 2.配置文件解析 3.拓展 在linux操作系统的常用工具中&#xff0c;常用vim来进行程序的编写&#xff1b…...

YOLOv11改进 | Neck篇 | 轻量化跨尺度跨通道融合颈部CCFM助力YOLOv11有效涨点

YOLOv11改进 | Neck篇 | 轻量化跨尺度跨通道融合颈部CCFM助力YOLOv11有效涨点 引言 在目标检测领域&#xff0c;YOLO系列算法因其卓越的速度-精度平衡而广受欢迎。YOLOv11作为该系列的最新演进版本&#xff0c;在Neck部分引入了创新的跨尺度跨通道融合模块(CCFM, Cross-scale…...

MySQL只操作同一条记录也会死锁吗?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL只操作同一条记录也会死锁吗?】面试题。希望对大家有帮助&#xff1b; MySQL里where条件的顺序影响索引使用吗&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在MySQL中&#xff0c;死锁通常发生在多…...

数据结构与算法——双向链表

双向链表 定义链表分类双向链表&#xff1a;带头双向循环链表 初始化打印尾插头插尾删头删查找在pos(指定位置)之后插入结点在pos(指定位置)之前插入结点删除pos(指定位置)的结点销毁顺序表与链表的分析 定义 链表分类 单向和双向 带头和不带头 带头是指存在一个头结点&…...

MODBUS RTU调试助手使用方法详解

一、软件简介 485调试助手是一款常用的串口通信调试工具&#xff0c;专门用于RS-485总线设备的测试、调试和通信监控。它支持多种串口参数设置&#xff0c;提供数据收发功能&#xff0c;是工业现场调试的必备工具之一。 二、软件安装与启动 1. 系统要求 Windows 7/10/11操作…...

自由学习记录(60)

Lecture 16 Ray Tracing 4_哔哩哔哩_bilibili 老师说的“高频采样”问题是什么&#xff1f; 现在考虑一个特殊情况&#xff1a; ❗ 一个像素内&#xff0c;图像信号变化很剧烈&#xff08;高频&#xff09;&#xff1a; 比如&#xff1a; 细网格纹理 马赛克背景 很高频的…...

现代计算机图形学Games101入门笔记(三)

三维变换 具体形式缩放&#xff0c;平移 特殊点旋转。这里涉及到坐标系&#xff0c;先统一定义右手坐标系&#xff0c;根据叉乘和右手螺旋判定方向。这里还能法线Ry Sina 正负与其他两个旋转不一样。这里可以用右手螺旋&#xff0c;x叉乘z&#xff0c;发现大拇指朝下&#xff0…...

WeakAuras Lua Script <BiaoGe>

WeakAuras Lua Script <BiaoGe> 表格拍卖插件WA字符串 表格字符串代码&#xff1a; !WA:2!S3xA3XXXrcoE2VH9l7ZFy)C969PvDpSrRgaeuhljFlUiiSWbxaqXDx(4RDd0vtulB0fMUQMhwMZJsAO5HenLnf1LPSUT4iBrjRzSepL(pS)e2bDdWp5)cBEvzLhrMvvnAkj7zWJeO7mJ8kYiJmYiImYF0b(XR)JR9JRD…...

计算机视觉与深度学习 | LSTM应用合集

LSTM **一、时间序列预测****二、自然语言处理(NLP)****三、语音识别与合成****四、视频分析与行为识别****五、异常检测****六、医疗健康****七、推荐系统****八、金融风控****九、机器人控制****十、其他创新应用****十一、LSTM的局限性及替代方案****十二、总结**长短期记…...

在Verilog中,逻辑右移(Logical Right Shift)和算术右移(Arithmetic Right Shift)的区别

在Verilog中&#xff0c;逻辑右移&#xff08;Logical Right Shift&#xff09;和算术右移&#xff08;Arithmetic Right Shift&#xff09;的核心区别在于左侧空位的填充方式&#xff0c;具体如下&#xff1a; 逻辑右移&#xff08;>>&#xff09; 操作符&#xff1a;&g…...

Go语言 GORM框架 使用指南

在 Go 语言社区中&#xff0c;数据库交互一直是开发者们关注的重点领域&#xff0c;不同开发者基于自身的需求和偏好&#xff0c;形成了两种主要的技术选型流派。一部分开发者钟情于像sqlx这类简洁的库&#xff0c;尽管其功能并非一应俱全&#xff0c;但它赋予开发者对 SQL 语句…...

STM32控制电机

初始化时钟&#xff1a;在 STM32 的程序中&#xff0c;初始化系统时钟&#xff0c;一般会使用 RCC&#xff08;Reset and Clock Control&#xff09;相关函数来配置时钟。例如&#xff0c;对于 STM32F103 系列&#xff0c;可能会使用 RCC_APB2PeriphClockCmd 函数来使能 GPIO 和…...

力扣刷题(第二十九天)

灵感来源 - 保持更新&#xff0c;努力学习 - python脚本学习 验证回文串 解题思路 验证回文串的核心在于判断一个字符串是否从前向后和从后向前读都是一样的。不过&#xff0c;题目通常会有两个主要限制条件&#xff1a; 忽略大小写&#xff1a;比如 "A man" …...