漏洞
Kiopler
这个作者很懒,什么都没留下…
展开
-
堆溢出问题快速调试
首先来看下问题代码,这里最后的空字符发生了溢出。来看一下出现的问题以及如何调试。上面写明是堆链中第41个堆块且地址在0x00382a700出发生了错误。这种情况下别急着终止,点击重试就会断在出问题的位置。点重试后断到了这里往上拉一拉,寻找函数名,或者直接查看调用堆栈发现是断在_free_dbg函数中,这个函数是free()的底层,所以可以断定一定是释放的时候出了问题直接在free()函数上下断点然后运行过去,发现第41块堆块的下溢标志受损了。就是strcpy导致的。原创 2021-02-19 16:24:55 · 390 阅读 · 0 评论 -
汇编与机器码对照(长期记录)
je或jz // 相等则跳(机器码是74或84) jne或jnz // 不相等则跳(机器码是75或85) jmp // 无条件跳(机器码是EB)汇编指令对应机器码表一、状态寄存器PSW(Program Flag)程序状态字寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成,如下所示:15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0OF DF IF TF SF ZF AF PF CF条...原创 2020-12-19 20:29:14 · 4549 阅读 · 1 评论 -
采用柔性数组来打印出WinXP下的堆链
代码:#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct _stHeapStruct { void *pvBlink; void *pvFlink; char *pszFileName; unsigned int uiLineNum; unsigned int uiSize; unsigned int uiType; unsigned int uiSe原创 2020-12-09 14:53:54 · 71 阅读 · 0 评论 -
分析WinXP下VC++6.0Debug的堆分配机制
首先来看这段程序:我在里面进行了malloc操作也就是分配了堆空间。单步执行完malloc:用黑色背景色标出的内存块即为刚刚分配的12字节长度堆内存。接下来来详细解析一下其组成部分:一个堆分配完后内存分布大体如此:来分别解释下:堆链前驱指针: 该指针指向了上一个分配的堆块的可用空间首地址。如果本堆块是第一个则前驱指针为NULL代表没有上一个 堆链后继指针: 该指针指针了下一个分配的堆块的可用空间首地址。如果本堆块是最后一个则后继指针为NULL代表没有下一个 所在文件:原创 2020-12-08 15:50:08 · 348 阅读 · 0 评论 -
0day安全阅读笔记[5] 利用虚函数机制进行溢出攻击
1. 利用虚函数机制进行溢出攻击看一下C++虚函数机制的表的简略图一般在一个类中原创 2020-11-24 15:55:42 · 412 阅读 · 2 评论 -
0day安全阅读笔记[4] (Part 1)利用SEH异常处理结构进行栈溢出攻击
这一篇来记录如何利用SEH异常结构来进行栈溢出攻击,我的实验设备Win2K SP4, 使用VC++6.0 Release编译SEH结构是程序遇到异常或者错误导致崩溃时可以转到某个特定处理函数执行的机制。特定处理函数内可以给一些提示或者补救措施。但正是因为有跳转到某个位置的能力便可以利用它来跳转到Shellcode位置。SEH结构一般是如下的形式:__try { // 可能导致异常的代码}__except (EXCEPTION_EXECUTE_HANDLER){ // 异常处理函数原创 2020-11-20 20:08:57 · 394 阅读 · 0 评论 -
0day安全阅读笔记[3]Win2K的堆管理机制分析
1. Win2K下的堆管理机制基堆的管理细节分为以下几种要素:1. 堆表: 位于堆的起始地址,里面全部是以8字节为一组的双向链表数组(Freelist[128])。每一组链表只指向空闲堆空间,其排布按照空闲空间的大小决定(一共128组双向链表)2. 空表索引: 堆表中每一组双向链表都被称为空表索引, 其指向的空闲堆空间被称为空闲堆块,假设还没有被分配则指向自己3. 堆块: 假设没被分配则称为空闲态堆块,被分配后则是占用态堆块,空表索引指向的就是堆块。空闲态堆块的组织结构请看图5.2.9,占用原创 2020-11-10 20:06:59 · 226 阅读 · 0 评论 -
Kali-linux使用Metasploit基础
Metasploit是一款开源的安全漏洞检测工具。它可以帮助用户识别安全问题,验证漏洞的缓解措施,并对某些软件进行安全性评估,提供真正的安全风险情报。当用户第一次接触Metasploit渗透测试框架软件(MSF)时,可能会被它提供如此多的接口、选项、变量和模块所震撼,而感觉无所适从。Metasploit软件为它的基础功能提供了多个用户接口,包括终端、命令行和图形化界面等。本节将介绍Metasploit下各种接口的使用方法。6.2.1 Metasploit的图形管理工具ArmitageArmitage转载 2020-11-04 22:38:00 · 1431 阅读 · 1 评论 -
0day安全阅读笔记[2]通过加解密保护shellcode
shellcode结合了逆向中的壳的概念,为shellcode增加了一个简易壳(实际上就是进行了异或操作), 来看shellcode的源码:__asm { nop cld push 0x1E380A6A push 0x4FD18963 push 0x0C917432 mov esi, esp lea edi, [esi - 0xc] xor ebx, ebx mov bh, 0x04 sub esp, ebx mov bx, 0x323原创 2020-11-04 19:52:02 · 524 阅读 · 2 评论 -
HASH算法总结
1、什么是Hash函数?Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。2、Hash算法有什么特点?一个优秀的 hash 算法,将能实现:正向快速:给定明文和 hash 算法,转载 2020-11-03 15:24:19 · 724 阅读 · 0 评论 -
0day安全阅读笔记[1]栈溢出攻击
第一个问题:首先来看一下那个HASH算法,这个HASH算法有一点懵住我了,一开始看那一段代码始终没看出个所以然:digest = ((digest << 25) | (digest >> 7));一直在想的是|或位运算符是从左往右的顺序,那digest << 25生成的结果,后面的digest >> 7会使用吗? 还是全部用原始的? 结果证明是不会影响的:转成反汇编后就看到了, 把digest的值。一次放eax, 一次放ecx, 分开来进原创 2020-11-02 23:37:58 · 266 阅读 · 0 评论