摘要: 非栈上格式化字符串漏洞利用 概述 有时候输入的字符串并不是保存在栈上的,这样没法直接在栈上布置地址去控制printf函数的参数,这种情况下的利用相对比较复杂。 程序在调用时会将rbp压入栈中或者将一些指针变量存在栈中等操作,所以栈上会有很多保存着栈上地址的指针,而且容易找到三个指针p1、p2、p3,形成p1指向p2、p2指向p 阅读全文
posted @ 2022-03-07 21:37 vi0let 阅读(559) 评论(0) 推荐(0) 编辑
摘要: 栈上的格式化字符串漏洞利用 综述 通过格式化字符串漏洞可以进行任意内存的读写。由于函数参数通过栈进行传递,因此使用%X$p(X为任意正整数)可以泄露栈上的数据。并且,在能对栈上数据进行控制的情况下,可以事先将想泄露的地址写在栈上,再使用%X$p,就可以以字符串格式输出想泄露的地址。 除此之外,由于"%n"可以将已经成功输出的字 阅读全文
posted @ 2022-03-07 21:35 vi0let 阅读(376) 评论(0) 推荐(0) 编辑
摘要: 格式化字符串介绍 格式化字符串介绍 格式化字符串(format string),是一些程序设计语言在格式化输出API函数中用于指定输出参数的格式与相应位置的字符串参数,例如C、C++等程序设计语言的print类函数,其中的转换说明(conversion specification)用于把随后对应的0个或多个函数参数转 阅读全文
posted @ 2022-01-17 22:41 vi0let 阅读(1073) 评论(0) 推荐(0) 编辑
摘要: 栈溢出进阶(下) stack pivot 原理 leave -> mov rsp,rbp pop rbp ret ret 优点 :所需溢出字节较少 条件 :栈溢出控制程序执行流;存在可以控制内容的内存(栈、堆、bss...),且需泄露地址。 SROP SROP全称是Sigreturn Oriented Program 阅读全文
posted @ 2022-01-17 22:39 vi0let 阅读(23) 评论(0) 推荐(0) 编辑
摘要: 栈溢出进阶(上) stack smash 原理:在程序加了 canary 保护之后,如果我们读取的 buffer 覆盖了对应的值时,程序就会报错,而一般来说我们并不会关心报错信息。而 stack smash 技巧则就是利用打印这一信息的程序来得到我们想要的内容。这是因为在程序启动 canary 保护之后,如果发现 c 阅读全文
posted @ 2022-01-17 22:34 vi0let 阅读(50) 评论(0) 推荐(0) 编辑
摘要: ret2xx ROP 随着NX保护的开启,以往直接向栈或者堆上直接注入代码的方式难以继续发挥效果。所以攻击者们也提出来相应的方法来绕过保护,目前主要是ROP(Return Oriented Programming),其主要思想是在栈缓冲区溢出的基础上,利用程序中已有的小片段(gadgets)来改变某些寄存器或者变 阅读全文
posted @ 2022-01-17 22:33 vi0let 阅读(65) 评论(0) 推荐(0) 编辑
摘要: canary_pie绕过 canary机制介绍 canary是一种用来防护栈溢出的保护机制。其原理是在一个函数的入口处,先从fs/gs寄存器中取 出一个4字节(eax)或者8字节(rax)的值存到栈上,当函数结束时会检查这个栈上的值是否和存进去 的值一致 当canary被纂改时,触发__Stack_chk_fail。 can 阅读全文
posted @ 2022-01-17 22:32 vi0let 阅读(371) 评论(0) 推荐(0) 编辑
摘要: 栈溢出 栈溢出 C语言函数调用栈 • 函数调用栈是指程序运行时内存一段连续的区域 • 用来保存函数运行时的状态信息,包括函数参数与局部变量等 • 称之为“栈”是因为发生函数调用时,调用函数(caller)的状态被保存在栈内,被调用函数(callee)的状态被压入调用栈的栈顶 • 在函数调用结束时,栈顶的函数 阅读全文
posted @ 2022-01-17 22:30 vi0let 阅读(61) 评论(0) 推荐(0) 编辑
摘要: shellcode shellcode|概述 shellcode通常是软件漏洞利用过程中使用一小段机器代码 作用: 1、启动shellcode,进行交互 2、打开服务器端口等待连接 3、反向连接端口 4、。。。 shellcode编写 编写时面临的问题 下面是一个简短的shell程序: #include"stdlib. 阅读全文
posted @ 2022-01-17 22:24 vi0let 阅读(179) 评论(0) 推荐(0) 编辑
摘要: 装载与汇编 程序的装载与进程的执行 静态链接的程序的执行过程 动态链接的程序的执行过程 x86&amd64汇编简述 常用汇编指令: mov lea add/sub push/pop cmp jmp j[condition] call/ret leave ... mov指令:赋值 lea指令:取址 push指令: 阅读全文
posted @ 2022-01-17 22:23 vi0let 阅读(16) 评论(0) 推荐(0) 编辑