参考: https://paper.seebug.org/692/#1
原文作者的分析环境是:Windows 10 x64 + Microsoft Edge 42.17074.1002.0
我的分析环境是:Windows 10 X86_1803_march + Microsoft Edge 42.17134.1.0
poc地址 : https://github.com/bo13oy/ChakraCore
1. 环境准备
1.1 验证环境
创建好虚拟机,拷贝好poc.html 与 poc.js 。 首先用edge 打开 poc.html ,看一看是否会发生异常(不停的刷新,最后出现“此页无法加载”)。出现异常说明我们的环境是正确的,可以正常触发漏洞。
1.2 为edge 开启页堆:
(powershell 下执行)
PS C:\Users\Mr.wang> gflags.exe -I MicrosoftEdgeCP.exe +hpa +ust
1.3 启动调试
由于edge 是uwp 包, 不能使用一般的附加形式进行调试,需要在命令行下 windbg 使用参数启动调试。
可以看我的另外一篇博客: https://blog.csdn.net/m0_37921080/article/details/83097979
调用方式如下:
windbg.exe -plmPackage <PLMPackageName> -plmApp <ApplicationId> [<parameters>]
主要是第一个参数 Package fullname 的获得。下面是使用powershell 命令的方法获取packagefullname, 即:Microsoft.MicrosoftEdge_42.17134.1.0_neutral__8wekyb3d8bbwe
PS C:\Users\Mr.wang> Get-AppxPackage *MicrosoftEdge
Name : Microsoft.MicrosoftEdge
Publisher : CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US
Architecture : Neutral
ResourceId :
Version : 42.17134.1.0
PackageFullName : Microsoft.MicrosoftEdge_42.17134.1.0_neutral__8wekyb3d8bbwe
InstallLocation : C:\Windows\SystemApps\Microsoft.MicrosoftEdge_8wekyb3d8bbwe
IsFramework : False
PackageFamilyName : Microsoft.MicrosoftEdge_8wekyb3d8bbwe
PublisherId : 8wekyb3d8bbwe
IsResourcePackage : False
IsBundle : False
IsDevelopmentMode : False
IsPartiallyStaged : False
SignatureKind : System
Status : Ok
第二个参数Appid 是:MicrosoftEdge
第三个参数是edge 要打开的url, 即我们的poc.html
最终通过下面的命令调用 windbg 进行调试:
PS C:\Users\Mr.wang> windbg -plmPackage Microsoft.MicrosoftEdge_42.17134.1.0_neutral__8wekyb3d8bbwe -plmApp MicrosoftEd
ge file:///C:/Users/Mr.wang/Desktop/ChakraCore-master/poc/poc.html
2. 开始分析
2.1 定位到异常函数
输入g, 执行几次之后,捕捉到下面的异常:
(1a50.1a40): C++ EH exception - code e06d7363 (first chance)
(1a50.1a40): C++ EH exception - code e06d7363 (first chance)
(1a50.1a40): C++ EH exception - code e06d7363 (first chance)
(1a50.1a40): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=1567e064 ebx=0000fefa ecx=18010130 edx=5aa91858 esi=000fefa0 edi=1567e010
eip=5a7f9b1e esp=0a1bc580 ebp=0a1bc5a4 iopl=0 nv up ei pl nz ac pe nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010216
chakra!Js::DynamicProfileInfo::RecordCallSiteInfo+0x3e:
5a7f9b1e 66837c060200 cmp word ptr [esi+eax+2],0 ds:0023:1577d006=????
查看一下栈调用历史:
1:060> kb
# ChildEBP RetAddr Args to Child
00 0a1bc5a4 5a62f1a5 18010130 0000fefa 5aa91858 chakra!Js::DynamicProfileInfo::RecordCallSiteInfo+0x3e
01 0a1bc5e8 5a947097 0000fefa 000009e9 01000002 chakra!Js::ProfilingHelpers::ProfiledNewScObjArray+0x83
02 0a1bc610 5a85089f 18675c75 0a1bc720 18010130 chakra!Js::InterpreterStackFrame::OP_NewScObjArray_Impl<Js::OpLayoutT_CallI<Js::Layout