默认计划
931人加入学习
(9人评价)
安全测试缓冲区溢出

购买过Kali Linux渗透测试、武官课程包、安全技术会员课程的学员不要再买此课程

价格 ¥ 300.00
该课程属于 高校公益行 | 网络安全实践训练营 请加入后再学习

使用VBScript 传输文件

每一种传输方式 最熟悉场景

VBScript木马

还是需要通过echo吧所有的VBScript的代码指令发送到目标vbs里面 通过vbs执行 通过webhttp协议 下载木马程序 vbs 是windows默认的脚本语言 win7 以前最主要 是 现在增加powrshell

ka

win8 win7 使用powershell 简短的语句实现我们达到的目的

powershell 后缀是ps1

 

debug文件传输 操作很常用 朱啊哟是汇编反汇编 16dump 有默认字节 64k字节

过程 有限制 当文件比较大 使用upx进行压缩

[展开全文]

windows

 tftp 文件上传基于udp文件协议应用层的文件传输工具

用途 比如说思科os更新升级 可以自己搭建一个tftp服务器 然后吧更新的文件放在tfto里面 然后在思科的交换机里面指定tftp的服务地址 自动下载链接替换现有tftp

tftp 不支持身份验证 明文传输 边境防火墙过滤

windows

whoami查看当前用户的命令

只有所有者的权限是nobady的时候才能被所有者使用 要不然就没有办法值

键盘记录器窃取对方在键盘山之行的命令 拿到机密信息

查看

通过安装脚本快点

[展开全文]

使用类nc得到shell 我们成为非交互shell

p中安装ftp

[展开全文]

操作学习通执行

软件有很多漏洞 有没有很多公开的网站收集和整理已经公开的漏洞网站

发布恶意的漏洞代码 受到攻击 刚刚出来的漏洞

对于非明文的代码一定要注意 尽量吧别人提供的shellcode漏洞利用代码装换成为自己的shellcode

 

[展开全文]

准备shellcode之前需要找坏字符

因为操作系统 协议 所以坏字符是不一样的

[展开全文]

思路: 就是 让eip跳转esp esp里面存放eax偏转12个字符和jmp eax

[展开全文]

 通过debug程序直接调用程序来运行

关注eip寄存器地址

[展开全文]

发现缓冲区 漏洞利用获得目标管理权

是针对目标系统某一个软件进行溢出 一旦溢出成功就可以控制目标系统

客户端对服务器端进行连接的过程存在一个socket命令有缓冲区溢出漏洞

大部分溢出漏洞代码python windows工具 是edb

32 是指cpu的地址总线的位数 地址总线32位是最大寻址空间2的32次方 64位 就是2的64次方

32位难度比较简单 空间小 64位有巨大

32位系统 i486的cpu

主要服务器端程序都在bin一下

只要看到客户端等待程序 就好了 或者看到13327这个端口

linux也支持多种内存保护机制 另外 还有堆栈保护机制 防止恶意代码在你的cpu里面执行

服务端程序有缓冲区漏洞 通过网络连接的过程访问到啦

[展开全文]

理想状态 是反弹shell回来

所以 我就要用nc侦听444这个端口

nc -vlp 444

前期可能生出的shellcode 是在结束之后会导致程序的崩溃 但是新版本的shellcode可能做啦优化这一部分 结束之后让下一个线程去接收

打开桌面环境

在此基础上在目标程序性安装图成画的远程客户端在目标机器上得以执行

使用payload的情况下 vnc 可以查看到远程目标桌面环境

最简单 就是rdp 拿到命令行的管理权的时候 如何通过命令行的管理权打开远程桌面服务

windows里面做的大部分配置90% 配置的参数选修是存在注册表里面的 linux 是每一个软件存在配置文件里面

windows 快照抓取的方式找到啦打开远程桌面的注册表的键值

reg是windows注册表文件

dir查看当前目录

重启 

开启防火墙里面的远程服务 通过修改注册表完成

可以通过抓取注册表来确定到底是那个注册表

注册表快照 保存注册表当前快照

[展开全文]

在内存中存放数据完全相反的

f7键是调试过程中单步向前执行

下一步就向esp里面写入shellcode的代码啦

写shellcode 自己运用scratch写编码

第二就是现成的 kali里面有msfpayload 就是生产各种各样的shellcode

payload 又称载荷 要发到目标系统中 有目标系统进行执行 然后取得控制权之类的代码

shell是payload的子集 

生产shellcode 然后注入到esp寄存器里面 按他让我们跳转的方式执行从而控制目标服务器

或者是自己有一个后门程序 将他16进制提取出来 发到对方esp服务器里面 当然shellcode内容也比较要小

寻找的命令格式

win32 就是在windows上执行的

win32反向链接

让受害者主动向我进行连接

连我的结果就是将我的shell操作系统的权限发给你

msfencode 可以对shellcode进行编码 吧坏字符过滤 -b表示过滤

\x对应的汇编语言是nop 是不操作的意思

因为 保证shellcode运行的有效性 直接跳转到esp 前面的第一位或者几位字符可能被cpu进行擦除掉或者是覆盖 和cpu的特性有关 

[展开全文]

接下来 一切顺利 就是数据的重定向啦 吧EIP里面内容改成ESP的地址 cpu就会读取ESP里面的代码啦 我们只需要将shellcode的代码存放在ESP中 在cpu就会理论上到这个ESP里面读取内容开始执行后门程序就开始 达到控制目标机器上啦 看似很简单 但是实际情况是非常复杂的 因为每次计算机重启的时候 或者程序运行的过程 进行地址分配的过程中这个esp的地址是变化 有可能一样 有可能不一样

理论上地址是随机的原因就在可能这台计算机处于空闲的状态 较为理想的状态

变通的思路 

在内存中找到操作系统固定的这一模块 xp自带的模块 而且还在内存中固定的这一模块 无论重启 或者进行多少次程序 都不变

系统模块里面有大量的指令 就有可能出现JMP ESP的指令 汇编代码 

目的是找到系统固定不变的模块 在找到系题掉用JMP ESP 指令地址的地址 因为他的地址是固定不变的()饶了一个湾子

就是在EIp里面存放内存地址固定不变的系统模块里面JMP ESP的指令所在的内存地址在执行esp里面代码部分内容 多调用一部

在内存可能存在好几跳 需要monna这个脚本

输入其他调试默认脚本

首先要关心的就是rebase :表示操作系统重启 重启之后表示操作系统内存地址是否发生变化

发生变化就是true

后面就是内存保护机制 要选的那个模块最好就是没有被操作系统保护的模块 如果受到保护 每一次调用这个地址 都会随机生成地址 没办法确定下一次这个地址在什么地方 就 必须是没有办法利用这个漏洞 os动态调用库必须是true· 我们要必须要选择每一个操作系统自带的库 只有这样才能在不同的机器上 每个机器都有这样的库 那我就可以好利用

下一步就是查找这个模块里面有没有JMP ESP这个命令 如果没有 那我们也就利用不了

把汇编指令转换成为二级制因为这些都是底层 每一个字节都要用\x表示

找不到就得想起他办法做溢出啦

如果说 应用程序收到deb的保护 那么在寻找模块  的基地址存放的内容 必须有 RE 权限的  否则后面的跳转就不会执行

找到这个地址 那么就设置一个端点 程序执行到这个断点 由用户决定程序下一步如何进行判断

目的 为了通过py的脚本向程序法溢出的代码看看溢出的代码跑到内存的地址是不是正常的进行跳转

[展开全文]

通过这个漏洞进行缓冲区漏洞测试 pass存在缓冲区漏洞  对寄存器中内容作出精确的修改 修改的寄存器EIP ESP EDP EIP 是重点关注的eip eip

 eip里面存放的是cpu下一次要执行的指令地址 执行里面的代码

 

发现eip 足够大 修改EIP的内容成为esp的地址

同时将esp里面的内容修改成为代码 然后cpu读取eip的地址 就会执行esp里面的代码内容 可以通过脚本来找到shellcode的代码空间

寻找可以存放shellcode的内存空间 尝试在esp里面存放shellcode的代码

修改esp里面的内容 假设esp里面可以存放3500个字符 看看到底有多少个c字符可以到达esp寄存器里面 判断esp寄存大小能不能存放shellcode的的大小

通常一般小巧的shellcode也需要300个字节左右

估计思路 

坏字符 :z在做模糊测试 不同的协议 不同的应用程序 不同的类型的漏洞在做模糊测试找到他的漏洞 尝试对他攻击的过程中 因为程序和协议的不同有一些个字符是在缓冲区里面不能使用的 这些字符因为程序 和应用程序不同也就不同 有的协议可能过滤0a 或者过滤0b 或者遇到0c就崩溃 所以 这些字符我们成为坏字符 是不能出现在缓冲区内存空间里面的 另外也有一些字符在缓冲区里面是有特殊的定义的 这些字符的出现困可能代表着一种用途 所以 向esp注入shellcode的必须要将这些坏的字符找出来 避免shellcode里面出现坏字符 导致shellcode 不能正常工作

所以 挑出来

已知的

查看 计算机寄存器里面存放的是ascll码 16进制数表示 不同的编码表示不同的字符 而ascll编码在计算机中一个字符有一个字节来表示 一个字节用二进制表示0000 0000 最大1111 1111

之间有多少种可能字符 有二进制字符计算一下 2的8次方+2的0次方 一共是255中可能的字符加全0 256中可能都是字符 通过脚本将这256个字符全部打到esp寄存器里面 看那些字符被过滤 出现问题  回头写shellcode 避免出现这些字符

没有出现切后面字符都没有代表这个字符不能出现在缓冲区里面 另外一种就是没有出现但是后面的字符出现代表被过滤掉啦

[展开全文]

如何才能精确定位到 两种方法

两分法 不停的二分 

唯一字符串 生成2700个字符  每4个字符为一组 每一组都是是唯一的 所以称为唯一字符串 如果我们可以生成这个唯一的字符串的话 可以发送唯一的字符串 然后只需要看到被填充到EIP里面是那个字符串 这样就可以一下就可以定位到字符创 这样就可以对EIP里面的寄存器做出精确的修改

kali 有现成的脚本

内存地址和我们使用的顺序相反 高位存放低地址 低位存放高地址

前面2606个全部填写为a 地2607个填写一个不同的字符在此确认一下这个位子是可以让我修改的

精确的将EIP写进我们想要的值 指向我们内存中任意的一块空间(比如说存放shellcode所存放的能存地址空间) 那么就可以就可以实现通过你这个漏洞我来远程控制你的服务器的目的

ESP里面添加的是shellcode 一串恶意代码 这个代码会在目标服务器上开一个端口 或者主动反向链接用nc链接我的攻击者的指定端口 就可以实现通过你这个漏洞我来远程控制你的服务器的目的

[展开全文]

如果目标系统做啦很好的限制的情况下 那么就没有可能造成缓冲区溢出

左边打的窗口 是汇编指令大的窗口 右边是寄存器 

左边是内存数据的部分 右边也是数据

重点关注的部分是寄存器 寄存器里面的指令是马上要交给内存执行的 客户端发给服务器端这些数据要交给cpu运行都会到相应的寄存器之中 每一个寄存器每一个功能不同

关注的第一个寄存器 就是 EIP(就是当前这个程序进程下一个要执行的指令存放在内存地址) 41 就是ASCLL码 16进制 41装换成10进制就是40+1 40也就是4*16 64加1 就是65

计算机字符在计算机里面存贮 只能存贮高低电频 0或者1数字 在计算机存贮的字符都是需要进行编码的编码都是一组0101的组合

内存单元每四个字节为一个单元

[展开全文]

m模糊测试  一方面使用kali的虚拟机向windows里面slm110端口使用pass去发送数据 最笨的方法用110端口 在使用pass

不知道就需要尝试 就需要一个足够大的足够多的数据输入到pass里面 当数值足够大的时候有可能造成目标程序崩溃 缓冲区溢出

有啦一个基本的框架之后就开始变化脚本内容实现测试

未知协议 和应用 如何去判断目标服务器接受那些指令的输入 有那些命令带那些函数 如何发现 两种方法 查相关的rfc 如果这个协议有标准的rfc 了解这个协议有什么指令 在什么地方带参数 只要能够输入数据部分 人工输入的部分 可以人工去探测 看存不存在缓冲区漏洞另外一种没有标准rfc 私有协议可以通过wireshark来进行抓包 看指令怎么样进行传输先学习这个协议 然后吧这个协议搞的差不多懂啦 然后通过写相应的脚本程序对他进行发起连接 固定的指令 以及指令里面传输的数据了解

模糊测试是一个非常困难的过程 台阶较高 必须理解响应的概念 基础 吧相应的理论弄清楚才能做模糊测试 设计到系统的底层和协议的底层 台阶很高基本概念了解到基本协议理解到 需要时间不断的学习

 

 

触发和发现缓冲区漏洞 首先要溢出 一定是传输的数据大于现有的缓冲区的大小才可能发生溢出

做模糊测试 是一个大概的测试 先发100个 100个不行在发1000个 1000个不行就发1w个 总之发到足够大如果目标程序还是没有任何溢出的迹象的时候 基本上可以放弃这个命令参数 进行下一个参数参数 比如说先对user发10w个数据 然后user这个指令缓冲区没有发生溢出就换个指令 pass

第二个脚本 产生变化 不断的增大向目标服务器发送的数据量 原因监视不确定在什么时候回导致溢出 导致溢出的点在那里 然后需要确定精确的位子 然后才能判断程序在这个缓冲区里面是如何进行程序重定向 如何指向的

怎么样参看目标服务器端sml已经产生溢出 程序已经崩溃 需要使用到调试工具 调试工具可以帮我们判断 由于客户端向我发送啦数据之后 服务端程序现在处于是你样的状态 是崩溃啦 还是啥异常情况

调试工具有2中使用方法:打开一个静态的程序文件比如说一个exe 进行汇编语言调试

第二个就是对一个动态的进程进行调试 需要用attack 侦听的这个进程 比如说 谁侦听啦110这个端口谁就是pop3的服务程序 侦听当前运行pop3服务端这个程序的 侦听服务情况

运行的过程中调试工具就会进行记录程序状态

相当于 客户端与服务端中间的一个拦截 客户端发送服务端的数值 服务端的反馈的情况在计算机运行的情况会被调试工具记录下来(相当于 我客户端向服务端发送数据 服务端接受数据送到计算机的内存当中 在内存进行那些的缓冲区的修改 都会被调试工具记录下来)

winxp 查看端口进程 信息 netstat -ano

 

[展开全文]

windows缓冲区系统溢出

操作系统上的缓冲区溢出是有操作系统上工作的服务的 这些服务会开放一些网络端口 端口会侦听一些服务接受用户的输入

Slmail 正常情况是作为一个邮件服务器进行首发 本身存在缓冲区漏洞的 目的发现这个软件的缓冲区漏洞 利用一些模糊测试 和逆向工程的手段发现 并且成功的利用 控制目标系统

immunitydebugger_ 可以通过调用python的脚本辅助我们进行动态调试 发现内存 以及缓冲区存在的问题

mona脚本 辅助我们在模糊测试定位进程模块 发现和调用shellcode  全部安装到windows里面

win7 win8操作系统的防护机制 但是可以绕过 复杂 需要自己去搞定 windows 就是我们需要攻击的目标系统

ip windows(119)将模块放入pycommd里面 就可以调用这个脚本

sl开着很多端口 每一个端口侦听着不同的服务 不同的服务 可以根据不同的指令向服务器提供指令

邮件smtp  连接到目标端口使用nc 相关的指令pop3 

pop3指令

Fuzzer模糊测试 

点:就是寻找可以向目标端口去提交数据 输入指令地方 向程序发任何字符组合在服务端用

pop3服务

debugger去调试程序 去发现不同的数据提交到端空被我pop3解析 放到内存的程序执行的过程会不会发生缓冲区溢出这也是实验大的

psop3 指令 pass 一定会造成目标系统 我们在传入一些shllcode一定可以实现远程控制

win7 win8全面支持dep windows防护机制 以前操作系统可以指定存放位置

dep 结合cpu特性通过操作系统的软件实现 防止代码指令在内存数据页中执行 早期没有采用这种方式 早期hack讲代码指令放入到内存数据页中存放  修改程序运行流程来使程序制定在数据页中的代码 然后代码从数据页中提取执行 dep可以阻止代码从数据页中被执行

aslr 动态内存分配 随机内存地址加载执行程序和dll 每次重启地址变化

 

[展开全文]

缓冲区溢出 攻击

oday 官方没有发现 只掌握某一个人手里面 直接远程控制你的计算机 种植木马  通过缓冲区攻击也是控制目标机器 从原理来自己去发现漏洞实现方法

缓冲区是内存里面的片段 使用程序 输入需要程序替我们执行的参数变量 通过这些参数和变量传递给程序 吧这些参数和变量提交的的数据部分 提交给计算机 放到内存里面 缓冲区就是就是内存片段 内存交由cpu处理计算 然后将结果传递给我们或者是写到计算机硬盘里面 这也是计算机程序运行根本原理

程序是一个动态的根据用户的输入 产生不同的结果反馈给用户 也是计算机程序的本质

计算机的漏洞也是源于计算机程序可以j接受输入数值 当我们向计算机输入某一个数值的时候 其实是通过某些过变量参数 这些可变的参数传递给计算机 正常情况下 向一个计算机发送一个参数 和一个指令 数据 正常情况下计算机会把我们提交的数据当成数据来处理 但是如果程序设计的规则不严 有可能实现输入的一部分数据和代码通过某种方法一些程序规则欺骗计算机让它将我们原本输入的数据这部分东西当成代码在计算机里面执行 这样也就造成某种注入的漏洞 后面的上传和sql也就是程序没有严格的限定和区分数据代码导致原本是输入数据的部分输入代码 被计算机执行 执行可能造成计算机的崩溃 和控制目标计算机

显示参数

类似于分号;| && ls 

漏洞产生的根源 程序本身没有做对用户输入的参数 过滤检查消毒毒交给计算机放到内存有cpu执行 本质的原理

更加复杂的 缓冲区的本质就是内存片段 应用程序提交的数据都会放在缓冲区里面 cpu去调度 去执行 执行之后吧结果返回客户端程序或者硬盘  如果应用程序对参数没有进行限制 会导致代码的执行 如果说程序没有对缓冲区的边境大小 做限制也有可能造成用户提交的数据溢出啦缓冲区(比如说提交啦一个大的数据放到一个缓冲区 如果缓冲区没有做边界的限制 那么这个大数据就会溢出到默认的缓冲区大小之外的空间里 导致数据占据其他进程 其他数据该有的内存里面 导致结果 程序崩溃 或者是进程劫持 完全控制服务器)没有对

逆向工程 打包安装号 反汇编 

发现是否存在漏洞 :源码审计 (能接触到源代码检查相应的漏洞) 

逆向工程(打包编译之后的软件安装包 逆向工程反汇编 逆向分析)

模糊测试 :安装包 安装一个操作系统 和环境软件安装包 部署 运用程序动态工具来检测这个程序运行工程中对我输入不同数值的反馈 这个时候 就可以像程序发送任意组合

数据生成器:公开通用的或者自己写程序 向目标程序发送数据 通过编程语言生成半随机的有规律性的打向目标机器

测试工具 动态调试

[展开全文]
先用01 脚本测试是否存在缓冲区溢出
eip的作用是吓一跳指令执行的地址
esp是执行的指令

之后用脚本测试缓冲区溢出再第几个字节发生溢出
精准测试
可以用唯一字符串法
二分法
唯一字符串法可以用kali下的
/usr/share/metasploit-framework/tools/exploit
./pattern_create.rb 创建出某长度的唯一字符串
./pattern_offset 可以计算eip的位置
[展开全文]

 

环境准备:

SLMail 5.50

ImmunityDebugger

mona.py ->imm安装的pythoncommand文件夹下

DEP:阻止代码从数据页被执行

ASLR: 随机内存地址加载执行程序和DLL,每次重启地址变化

 

关闭靶机的防火墙,或者打开ICMP的ping服务

 

netstat -nao(Windows)查看所有端口

 

nc IP PORT(Kali)连接指定的端口

 

[展开全文]

vbscript            //win7以前的脚本语言

·service apache2 start

netstat -pantu | grep :80

cd /var/www/html

cp /ftphome/whoami.exe

 

Powershell

 

Debug

·汇编、反汇编

·16进制dump工具

·64k字节的传输限制

[展开全文]