首页
社区
课程
招聘
[原创]KCTF 2023 第六题 WP 中午吃什么
发表于: 2023-9-14 12:12 9574

[原创]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直播授课

最后于 2023-9-15 15:00 被wx_孤城编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//