12558网页游戏私服论坛

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

[翻译]launchd中消息队列逻辑问题允许任意的mach message控制

[复制链接]

63

主题

63

帖子

136

积分

实习版主

Rank: 7Rank: 7Rank: 7

积分
136
发表于 2020-2-9 01:58:51 | 显示全部楼层 |阅读模式
首发看雪:http://bbs.pediy.com/thread-216587.htm

来自yaren的寄语

我通常凌晨三点就起床,然后开始查收邮件,晨跑5英里达到我的办公室,开始我一天的工作。人生没有捷径,我的座右铭是do more、know more、ne more。
上文对于陆奇的介绍,我们发现天才不是来自germ cell而是来自勤奋,只要努力我们足够努力,我们一定能脱贫致富、成为陆奇一样的人,突破职场天花板,致敬埃洛普成为微软的高级木马。

正文

2016年 八月二十日 星期六

Launchd升级为10.10版本。旧版本的(10.10之前)launchd是开源的,但是新的版本是封闭源、被剥离出来的单独版本,所以甚至没有function名字

然而...

新版本的launchd与xpc的事物紧密集成,这样就给了我们一个良好的着力点去了解发生了什么。此PoC中的所有function地址均基于OSX 10.11.6装载的launchd。

10002F3A1是引导端口上的处理程序 - 当接收到消息时,它从libxpc中调用xpc_pipe_try_receive,用来检查接收的mach message的msgh_id:如果它是0x10000000,那么这是一个xpc message,它会尝试反序列化一个xpc对象;如果它是一个旧版本的MIG message,则xpc_pipe_try_receive将调用其第4个参数通过xpc_pipe_handle_mig来处理MIG消息。 10002ED33是launchd进程的旧版本的mig处理程序,它通过在100018ADE中注册的几个旧版本MIG子系统来进行检验(请注意,对10002E3EE的调用是指添加了旧版本的mig子系统到它们的数组。)(100018ADE还注册了launchd 的XPC子系统(ipc系列)的处理程序)。

这是很好的,但有趣的是,实际上存在两个调用路径,一个是到xpc_demuxer(10002EE87)/ mig处理程序(10002ED33),而另一个是10002EC25。除了不存在对xpc_pipe_try_receive的调用,此function的逻辑与10002F3A1几乎相同。稍稍回顾一下可以发现,当邮件由launchd接收时,此function不负责直接解析信息,而是用于“重新解析”“搁置”信息。

在某些情况下,当launchd无法立即服务请求时,它会将此请求排入调度队列稍后再试,并且该请求最终将在此处结束。

此function(10002EC25)只直接接受xpc dictionary,而且它会通过检查来发现该dictionary是否具有“mig-request” key/value pair。如果有,则它会在xpc_dictionary之外读取一个xpc_data_t并将其转换成一个mach_msg_header_t,并将其通过xpc_pipe_handle_mig来传递到10002ED33(旧版本MIG处理程序)。

我找不到任何可以设置一个“mig-request”值的地方,所以我猜这是一个调试功能,又或者是因为意外留下?因为xpc是一个无模式的ipc机制,我们实际上可以只设置一个具有完全受控制的xpc_data_t有效负载的“mig-request”键(其值将被视为被launchd接收的有效的mach message)。唯一的先决条件是,我们要找出如何获取一个我们发送到launchd的被搁置的XPC信息的方法——而似乎子系统 3的例程804(xpc_look_up_endpoint)有时将被搁置,这意味着如果我们修改这些请求中的一个,我们可以通过旧版本的MIG处理管道发送一个完全受控制的伪造的mach message。

这是一个惊人的野生的exploitation ——当伪造的mach message能够传递到mach_msg_destroy来摧毁它的权限和内存时,这个PoC会发送一个带有OOL数据的信息,而这会导致读取一个在0x414141410000的内核端口成为一个崩溃的尝试(这个指针稍后也会被传递到vm_deallocate)。但是一个像这样的bug可以使你做更多的事,例如扰乱launchd的端口的引用计数(因为我们可以在我们的信息中指定任意端口号,使其被看作是launchd的端口命名空间中的有效端口)。我们还可以取消映射任意页面,并将无效的事物传递给传统MIG处理程序。

就影响方面而言,launchd是系统上权限最大的进程,你可以从任何进程涉及到它:-)

这个PoC会hook目标xpc请求的发送,并注入一个“mig-request”xpc_data_t —— 如果它不工作,尝试关闭所有打开的浏览器,或使用干净的启动重新开始。

译者:赤(看雪ID:呜呼哀哉)
校对:yaren
来源:http://www.12558.net
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
楼主热帖
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 08:22 , Processed in 0.114258 second(s), 30 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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