【分享】关于第10章-同时替换栈和.data中COOKIES来突破GS的一点学习心得

个人感觉从这一节真的学到了很多,比如如何在OD中寻找一些对应函数中指令的位置,如果查找某些寄存器的值等,下面将我的学习心得贴出来,内容完全由本人一字一句手敲出来,转载请注明出处。


主要是结合OD调试来说明如何寻找各个关键点的位置,计算距离等问题。

注意:找位置计算距离等时将shellcode定义为8个\x90即可

1.首先要知道.data中cookies的位置,OD加载PE文件,在反汇编窗口根据关键字查找,因为要找cookies,也就是程序最开始定义security  cookies的位置,应该是在test函数进去后开始的地方,所以找两个关键字锁定:

MOV EAX,DWORD PTR DS:[_security_cookies] 通过该句,我们知道,这个就是将cookies的值放入eax寄存器中,所以,通过中间一列的十六进制可以得知在.data中cookies的位置是:

00403000(反着的,注意),

那么,这三句就是对应的产生cookies的代码了:

注意此时的EBP的值(通过寄存器区可以看到):

 

2.寻找malloc产生的内存的首地址,这个也很好找,因为在反汇编的命令中就含有malloc这个关键字,我们要找首地址,就是要找当这个函数执行后的eax的寄存器内容:

我们单步调试将这句执行后,观察寄存器EAX的内容:

那么,通过这两个参数,我们就知道要将test的i设置成多少了。

3.寻找栈中的cookies的位置,这个依然还是要查找关键字,既然到了栈中了,那么肯定就是最后函数返回前的cookies的检查这一步,那么关键字应该是security_cookies_check,注意观察,找到了这个CALL这个函数这一步:

注意不要把位置弄错了,我们只要看调用这里,不要看这个验证函数的里面的内容,因为下面也有个security-check-cookies关键字,但是那是函数里面了,同时,我们可以通过,MOV,XOR,CALL这三个指令得知这里是反向进行上面第一步中的产生cookies的操作,好的,现在我们直接点一下上面的MOV指令,然后按f4,让程序运行到这里:

因为这一步就是从栈中取出security-cookies,然后再与EBP进行异或,然后再去与.data中的cookies进行比较,一致的话说明就没有问题,而且也就可以肯定这个栈中的0012FF60就是我们要找的在栈中存放cookies的位置。

 

但是呢,在调试过程中有一个问题,因为我们只为shellcode赋值为8个90,显然我们没有精心构造数据,所以如果这个时候去校验cookies是肯定不对的,而且00403000这个时候是四个90(我们shellcode的最开始4个字节的内容),但是呢,我们可以通过自己记录原先的00403000和ebp的内容,来看这两个异或后的结果和我们现在栈中的cookies的值是否与我们栈中的这个值一致,一致也就能说明现在0012FF60这个地方就是栈中放cookies的地方。

具体方法呢,就是我们重新在OD下载入程序,分别鼠标执行(F4)两个地方,第一个地方就是我们上面1中的那个地方

第二个地方就是刚才第3步这个地方:

那么计算C1DA8E87  XOR  0012FF64 = C1C871E3,ok验证成功。

 

4.寻找dest的首地址,其实当我们执行(到)第3步时,也就是test函数的内容已经执行完了,那么8个90已经复制到了dest中了,通过查看右下角栈区,我们很容易找到8个90所在的位置,那么这个地方就是dest了:

显然dest的首地址就是0012FF94

 

5.最后我们来看一看test函数的返回地址,这个地址实际上需要通过OD提供的注释来查找,当我们完成到第3步的验证时,这个时候大概函数也就快要返回了,那么我们在栈区中看一下:

注意观察栈区的0012FF68这一行的注释里面写着这样一句:

很显然,这里就是存放的函数的返回地址。

 

6.我们注意到典型的栈中的结构布局:

在security cookies后面还有一个4字节的EBP,然后才到返回地址(这个地方我们要放我们的shellcode,也就是DEST的起始地址的)。

7.计算。

栈中的security cookies位于:0012ff60

Dest(相当于BUFF)位于:0012fe94

他们之间相隔:0012ff60 - 0012fe94 = CC(204)

而shellcode最开始4个字节的内容是要给00403000的,那么剩下的shellcode还有200个字节,用于弹窗的shellcode是168个字节,那么还剩32个字节,所以从shellcode弹窗后的32个字节全部放\x90,接着放我们计算好的security cookies(4个\x90与EBP异或后的结果),接着放4个\x90掩盖EBP,接着放dest的首地址0012fe94,这就是shellcode的布局。



基本上就是这样了,主要是自己的一个学习总结,转载请注明出处以及联系方式:xujiaphp@gmail.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值