[HackCTF] :pwn: RTL_World
두비니
·2021. 3. 15. 23:59
int __cdecl main(int argc, const char **argv, const char **envp)
{
int result; // eax
int v4; // [esp+10h] [ebp-90h]
char buf; // [esp+14h] [ebp-8Ch]
void *v6; // [esp+94h] [ebp-Ch]
void *handle; // [esp+98h] [ebp-8h]
void *s1; // [esp+9Ch] [ebp-4h]
setvbuf(stdout, 0, 2, 0);
handle = dlopen("/lib/i386-linux-gnu/libc.so.6", 1);
v6 = dlsym(handle, "system");
dlclose(handle);
for ( s1 = v6; memcmp(s1, "/bin/sh", 8u); s1 = (char *)s1 + 1 )
;
puts("\n\nNPC [Village Presient] : ");
puts("Binary Boss made our village fall into disuse...");
puts("If you Have System Armor && Shell Sword.");
puts("You can kill the Binary Boss...");
puts("Help me Pwnable Hero... :(\n");
printf("Your Gold : %d\n", gold);
while ( 1 )
{
Menu();
printf(">>> ");
__isoc99_scanf("%d", &v4);
switch ( v4 )
{
case 1:
system("clear");
puts("[Binary Boss]\n");
puts("Arch: i386-32-little");
puts("RELRO: Partial RELRO");
puts("Stack: No canary found");
puts("NX: NX enabled");
puts("PIE: No PIE (0x8048000)");
puts("ASLR: Enable");
printf("Binary Boss live in %p\n", handle);
puts("Binart Boss HP is 140 + Armor + 4\n");
break;
case 2:
Get_Money();
break;
case 3:
if ( gold <= 1999 )
{
puts("You don't have gold... :(");
}
else
{
gold -= 1999;
printf("System Armor : %p\n", v6);
}
break;
case 4:
if ( gold <= 2999 )
{
puts("You don't have gold... :(");
}
else
{
gold -= 2999;
printf("Shell Sword : %p\n", s1);
}
break;
case 5:
printf("[Attack] > ");
read(0, &buf, 0x400u);
return 0;
case 6:
puts("Your Not Hero... Bye...");
exit(0);
return result;
default:
continue;
}
}
}
너무 길어서 코드로 가져왔습니다.
문제는 간단해요
system의 주소와 /bin/sh의 주소까지 가져오고, 돈만 있으면 주소 자체를 제공해줍니다.
그리고 마지막 5번 선택지를 통해서 Binary Boss를 이기면 되는데, 0x8C짜리 buf에 0x400씩 입력받고 있기 때문에 바로 RTL을 진행해 주면 될 것 같습니다.
그럼 우선 돈을 얻어야 할 것 같은데
2번 선택지인 get_money()안에 히든 선택지가 있네요. 한번 확인해봅시다.
충분히 큰 돈을 줘서 그냥 진행해도 괜찮을 것 같네요
그리고 참고로 위에 코드를 보면 rand함수를 초기화하지 않고 사용하고있어서 항상 저 숫자를 준다는 것 또한 확인할 수 있습니다.
굳굳
+) 어디선가 똑같은 문제를 푼거같은데 기분탓인가..?
'War Games > HackCTF' 카테고리의 다른 글
[HackCTF] :pwn: poet (0) | 2021.03.18 |
---|---|
[HackCTF] :pwn: g++pwn (0) | 2021.03.17 |
[HackCTF] :web: 보물 (0) | 2021.03.14 |
[HackCTF] :web: /, Hidden, Button (All 50 pts) (0) | 2021.03.13 |
[HackCTF] :rev: Handray (0) | 2021.03.12 |