-
-
[原创]KCTF 2023 第六题 WP 中午吃什么
-
发表于: 2023-9-14 12:12 9574
-
1298处是发现调试器的处理函数,注入DLL,直接写入C3过掉反调试
方便理解在IDA重命名函数为g_DecodeString
分析后发现程序将输入字符串拼接后丢给140001450函数处理
重点分析这个函数sub_140002818,用于保存Ntdll.dll的ZW系列函数地址,自己写代码验证了下,Zw系列函数的数量是0x1D9,与猜想一致。
将3201382652D139C0E22132DF1BC2212EA0991650A229B36436823D0B13D51E6拆分成21组3字节的十六进制,并转成10进制整数,如(320,138,265,2D1,...)。
转成十进制后(800 312 613 721,...), 表示0列0行是8,1列2行是3,1列3行是6,......
将677116575313142309154604431859253431473963507533496829080645035455771774602058076430276921790210013736267644383505517280转成60组2字节的整数,如(67,71,16,57,...),表示传入的60个数字的顺序
获得flag:11230A2CD3C31CA32E0D707D38E0743531F80F726C1D133B3A914E2F034B1D63BB17F34428E2A31B038C25E0FA2BF2301053752062AA16E20A2FC1971730E90823D01A724B0CA19B0652811541480B80943AE27E13122C30C120
分析shellcode逻辑时发现十六进制转整数过程中允许'+','-'符号的存在,感觉可以将3位数的首位的'0'换成'+', 如"0D7"和"+D7"转出来的整数是相等的。
构造出几组多解:
11230A2CD3C31CA32E+D707D38E0743531F80F726C1D133B3A914E2F034B1D63BB17F34428E2A31B038C25E0FA2BF2301053752062AA16E20A2FC1971730E90823D01A724B0CA19B0652811541480B80943AE27E13122C30C120
11230A2CD3C31CA32E+D7+7D38E0743531F80F726C1D133B3A914E2F034B1D63BB17F34428E2A31B038C25E0FA2BF2301053752062AA16E20A2FC1971730E90823D01A724B0CA19B0652811541480B80943AE27E13122C30C120
11230A2CD3C31CA32E+D7+7D38E+743531F8+F726C1D133B3A914E2F034B1D63BB17F34428E2A31B038C25E+FA2BF2301053752062AA16E20A2FC197173+E9+823D01A724B+CA19B+65281154148+B8+943AE27E13122C30C120
整串中有11处'0'可以换成'+',理论上可以构成2^11 == 2048组多解
DWORD dwOldFlag;
VirtualProtect((void
*
)(ullModule
+
0x1298
),
1
, PAGE_EXECUTE_READWRITE, &dwOldFlag);
*
(char
*
)(ullModule
+
0x1298
)
=
(char)
0xC3
;
VirtualProtect((void
*
)(ullModule
+
0x1298
),
1
, dwOldFlag, &dwOldFlag);
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课