1.内存攻击
内存攻击的根本原因是图灵计算机没能严格区分内存中的数据和指令而导致的。
A:缓冲区溢出漏洞是因为程序缺乏对缓冲区的边界进行条件检查而引起的一种异常行为。
缓冲区溢出又分为栈溢出与堆溢出两种类型。
栈溢出
栈溢出的基本原理在于程序使用栈这种数据结构来控制程序运行流程,程序先将函数返回地址压入栈中,然后执行结束以后再从栈中取回函数返回地址,继续执行指令。问题是出现在当我们向栈中的地址写入数据时,当写入的数据长度超过栈分配的缓冲区地址空间时,就会造成栈溢出。
栈溢出一般有三种利用方式:
A1.覆盖缓冲区附近的程序变量
主要是改变程序的执行流程和结果,从而达到攻击者的目的。
A2.覆盖栈中保存的函数返回地址
这种是最常用的,程序执行完以后直接执行恶意攻击者的代码去了
A3.覆盖某个程序指针或程序异常处理结构
只要溢出以后异常处理结构被执行,同样可以让程序流转到任意地址。这种处理方式可以绕过操作系统的栈保护机制,而且异常处理结构更接近栈底,所以从缓冲区头部到异常处理结构的内存空间更大,处理起来可能更加方便。
这里顺路科普一下那个现代操作系统的缓冲区溢出的安全保护机制,称为ASLR(Address space layout random),通过对堆(heap),栈(stack)等共享地址空间的布局随机化,从而增加攻击者预测地址空间的难度,防止攻击者直接定位攻击代码地址。
堆溢出
堆溢出的概念
![](https://img.haomeiwen.com/i10153763/dbff121f46a30954.png)
堆溢出的原理
![](https://img.haomeiwen.com/i10153763/e5702579a8f2e892.png)
缓冲区溢出利用的思路:
主要有三步,第一步是考虑缓冲区溢出的缓冲区空间大小,第二步是通过逆向分析或者源码分析来理解程序逻辑,最后是考虑坏字符,空字符,可能需要考虑编码的情况等来构造shellcode。
这里科普一些端口知识:
Netbios(Network basic input output system)运行在137,138,139端口上
![](https://img.haomeiwen.com/i10153763/9cc64cb043b371fd.png)
SMB(Server Message Block)运行在445端口上,也可通过139端口来接收数据
MSRPC(Microsoft remote procedure call)主要是135端口。
![](https://img.haomeiwen.com/i10153763/6e04b5a792761129.png)
2.MS08-067内存攻击实战技术
A漏洞原理:攻击者通过msrpc over smb通道来调用server服务程序中的Netpathcanonicalize函数,该函数在远程访问其他主机时候,会调用Netpwcanonicalize函数,该函数会对远程访问主机的路径进行规范化,而该函数存在缓冲区溢出漏洞,从而导致远程代码执行。
B漏洞利用:
![](https://img.haomeiwen.com/i10153763/315bf54c22853a9e.png)
![](https://img.haomeiwen.com/i10153763/b6eceb2abe97d0a4.png)
![](https://img.haomeiwen.com/i10153763/5df42ab0bb322b4b.png)
就这样日进去了。。。。
C:漏洞源码分析
![](https://img.haomeiwen.com/i10153763/5958ded25e1a16cb.png)
查看metasploit下面的ruby文件,可以一步步查看漏洞利用源码。
例如描述这一部分,主要介绍了该漏洞出现在NetAPI32.dll中的canonicalization路径处理函数中,该模块主要能够绕过一些NX(No execute,win下面是DEP技术)机制,然后2003的系统有大概率会崩溃或者挂起。
![](https://img.haomeiwen.com/i10153763/46c8cc202ac03564.png)
默认设置这个是规定了会话退出采用了退出线程的方式。
![](https://img.haomeiwen.com/i10153763/cce330a1cdd56eca.png)
payload这里主要是规定了可用空间大小,坏字符,自定义选项等。
![](https://img.haomeiwen.com/i10153763/392bbe12d0fb1408.png)
下面规定了可针对的target,包括一些各种平台,一些初始化可能不一样。
D:08-067漏洞原理机制分析
首先用ollydbg打开了所谓的netapi32.dll,然后我们寻找netpwpathcanonicalize函数,如下:
![](https://img.haomeiwen.com/i10153763/cf00e93fe13b5481.png)
然后,就是留个坑。。。二进制安全的知识好多看不懂,汇编也看不懂,以后渗透学深了以后再来补补。。。。
网友评论