zoukankan      html  css  js  c++  java
  • CVE-2012-0158个人分析

    CVE-2012-0158是一个比较有名的老漏洞了,这次从论坛上找到一个poc文件,利用这个poc来分析CVE-2012-0158漏洞的形成。

    http://bbs.pediy.com/showthread.php?t=207638

    参考自此帖子,但是分析是个人独立完成的,只是参考了poc并没有抄袭思路。

    本文步骤:重现漏洞-->漏洞分析-->漏洞利用-->总结

    1.重现漏洞

    打开poc文件,结果如图

    环境如下

    如图可见漏洞复现成功,弹出一个计算器。

    2.漏洞分析

    通过已有的POC找出漏洞产生的原因。

    首先定位shellcode在内存中的地址,这里使用的是通过对api下断点找到shellcode的地址。

    如图。可见此时shellcode已在栈中。00121461即为栈中空间,从3个nop起为shellcode

    在此时看一下栈的整体结构,如下图

    4个byte的nop之后接的便是shellcode,根据栈溢出的特点我猜测,7FFA4512为覆盖栈返回地址的地方。跟一下发现如图

    原来7FFA4512处是一个jmp esp

    这是一个常见的栈溢出跳板。据此我判断这是一个使用跳板地址覆盖栈返回地址的栈溢出,而且此时的esp正好指向shellcode的起始位置,4个byte的nop用来

    抵消retn 0x8造成的esp下移。据此栈示意图如下

    接下来查找是哪里发生的覆盖,因为是当前函数的栈祯发生溢出,说明肯定是子函数或者当前函数导致的覆盖。但是本栈祯已经被覆盖的一塌糊涂了,怎么知道这个函数的地址呢?

    那么就只能对栈进行回溯,正好可以发现一个已经用过的函数返回地址,找到发生溢出的这个栈祯。经过单步跟进最终发现产生问题的语句在这里,如图

    可见是一个rep movs导致的溢出。

     

    如图可知溢出函数处于mscomctl模块

  • 相关阅读:
    从四个数字中选出三个,一共有多少组合?不重复的
    几何检测 (四)
    DEDECMS织梦信息发布员权限发布文章自动由“未审核”变成“审核
    pgpool 后台运行方法
    PLSQL带参数的CURSOR
    对PLSQL程序块自动提交的验证
    PRAGMA EXCEPTION_INIT
    PLSQL 传递异常的小例子
    PLSQL使用SQLCODE和SQLERRM的小例子
    pgpool 指定配置文件运行
  • 原文地址:https://www.cnblogs.com/Ox9A82/p/5306711.html
Copyright © 2011-2022 走看看