首页
社区
课程
招聘
[原创]2021 KCTF 秋季赛 第一题 身在何处[签到题] wp
2021-11-16 08:38 2697

[原创]2021 KCTF 秋季赛 第一题 身在何处[签到题] wp

2021-11-16 08:38
2697

IDA打开,直接定位到check部分的代码,简单处理一下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
int __cdecl sub_401340(HWND hDlg)
{
  int nLenUser; // ebx
  int v2; // ebx
  int v3; // eax
  signed int nLenPass; // [esp+Ch] [ebp-260h]
  char v6[200]; // [esp+10h] [ebp-25Ch] BYREF
  CHAR strUserName[200]; // [esp+D8h] [ebp-194h] BYREF
  CHAR strPassword[200]; // [esp+1A0h] [ebp-CCh] BYREF
 
  memset(strUserName, 0, sizeof(strUserName));
  memset(v6, 0, sizeof(v6));
  memset(strPassword, 0, sizeof(strPassword));
  nLenUser = GetDlgItemTextA(hDlg, 1000, strUserName, 201);
  if ( nLenUser
    && (nLenPass = GetDlgItemTextA(hDlg, 1001, strPassword, 201),
        v2 = sub_401260(strUserName, nLenUser),
        strspn(strPassword, "0123456789") == strlen(strPassword))
    && nLenPass <= 0xA
    && (v3 = sub_40307F((int)strPassword)) != 0
    && (sub_4042B3(v2 ^ v3, (int)v6, 16), sub_401260(v6, 8) == 0x13B88C77) )
  {
    SetDlgItemTextA(hDlg, 1001, "Success!");
    return 1;
  }
  else
  {
    SetDlgItemTextA(hDlg, 1001, "Wrong Serial!");
    return 0;
  }
}

通过动态调试,sub_401260是自写的查表函数,sub_40307F是atoi函数,
sub_4042B3是itoa函数
整个验证只需要满足以下条件:
sub_401260(v6, 8) == 0x13B88C77
其中
v6:sub_4042B3(v2 ^ v3, (int)v6, 16)
v2 = sub_401260(strUserName, nLenUser)
v3 = atoi(strPassword);

 

通过输入正确的用户名、序列号,通过动态调试获取正确的V6是字符串‘52a1ed5a’的指针,即v2^v3 = 0x52a1ed5a
再次输入用户名KCTF,通过动态调试获取v2 = 0x5EE54F4C
因此v3 = v2 ^ 0x52a1ed5a = 0xC44A216
所以 flag = 205824534


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回