wargame ๐Ÿด‍โ˜ ๏ธ write-up/pwnable.kr

collision

Kortsec1 2025. 5. 2. 23:55

0x01 ๋ฌธ์ œ ์„ค๋ช…

scp -P 2222 col@pwnable.kr:[๋Œ€์ƒ ํŒŒ์ผ] [๋ฐ›์„ ์œ„์น˜]

๋ช…๋ น์„ ํ†ตํ•ด ๋กœ์ปฌ๋กœ col ๊ณผ col.c ํŒŒ์ผ์„ ๋ฐ›์•„์™”๋‹ค.

๋˜ํ•œ, ๋กœ์ปฌ์—์„œ pwntools ๋ฅผ ์‚ฌ์šฉํ•ด ์ ‘์†ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

from pwn import *

argv = [b"AAAA"]
s = ssh("col", "pwnable.kr", port=2222, password="guest")
p = s.process(["/home/col/col"] + argv)

0x02 ํ’€์ด ๊ณผ์ •

#include <stdio.h>
#include <string.h>
unsigned long hashcode = 0x21DD09EC;
unsigned long check_password(const char* p){
    int* ip = (int*)p;
    int i;
    int res=0;
    for(i=0; i<5; i++){
        res += ip[i];
    }
    return res;
}

int main(int argc, char* argv[]){
    if(argc<2){
        printf("usage : %s [passcode]\n", argv[0]);
        return 0;
    }
    if(strlen(argv[1]) != 20){
        printf("passcode length should be 20 bytes\n");
        return 0;
    }

    if(hashcode == check_password( argv[1] )){
        setregid(getegid(), getegid());
        system("/bin/cat flag");
        return 0;
    }
    else
        printf("wrong passcode.\n");
    return 0;
}

argv[1] ๋ถ€ํ„ฐ 4byte์”ฉ ์ด 20byte์˜ ๊ฐ’์„ ๋”ํ•ด, 0x21DD09EC ์™€ ๋น„๊ตํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์ฝ”๋“œ๋‹ค.

์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๋”ํ•ด์„œ 0x21DD09EC ๊ฐ€ ๋˜๋Š” 5๊ฐœ์˜ ์ •์ˆ˜๋ฅผ ์ž…๋ ฅํ•ด ์ฃผ๋ฉด ๋œ๋‹ค.

์ด๋ ‡์‹์œผ๋กœ ์ธ์ž๋ฅผ ๊ตฌํ•ด ๋ณด๋‚ด์ฃผ๋ฉด ์ž˜ ํ•ด๊ฒฐ๋  ๊ฒƒ์ด๋‹ค.

from pwn import *

key = 0x21DD09EC
a = key // 5
b = key - a*4

argv = []
pay = p32(a) * 4
pay += p32(b)
argv.append(pay)

s = ssh("col", "pwnable.kr", port=2222, password="guest")
p = s.process(["/home/col/col"] + argv)
# p = process(["./col"] + argv)
p.interactive()

0x03 ๊ฒฐ๊ณผ ํ™•์ธ


0x04 ํšŒ๊ณ  ๋ฐ ์ฐธ๊ณ  ๋‚ด์šฉ

c์–ธ์–ด ์ฝ”๋“œ๋ฅผ ์ž˜ ์ดํ•ดํ•˜๊ณ , argv๋ฅผ ํ†ตํ•ด ์ธ์ž๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋‚ด์šฉ์ด์—ˆ๋‹ค. ํŠนํžˆ ๊ฐ•์ œ ํ˜•๋ณ€ํ™˜ ๋ถ€๋ถ„๊ณผ int(4byte)๋Š” ์ž˜ ๊ธฐ์–ตํ•ด์•ผ๊ฒ ๋‹ค.

'wargame ๐Ÿดโ€โ˜ ๏ธ write-up > pwnable.kr' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

bof  (0) 2025.05.03
1. fd  (0) 2022.02.15