ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 4팀_박윤진 write-ups (ctf-d_플래그를 얻어라!)
    2021/Write-Ups 2022. 1. 25. 23:54

     

    파일명: google.png

    이미지 파일이 너무 깨끗하고(스테가노그래피X)

    HxD로 열어도 파일 자체의 내용이 적어서 그 안에 뭘 숨겼을거라고 생각되지 않는다

     

    그래서 라이트업을 봤더니 점이 찍혀있다고 한다

    (처음에는 모니터에 뭐가 뭍은 줄 알았다)

    1) 점의 위치

    각 점의 위치가 단서가 될 수 있지 않을까 하여 이어볼 수 있다.

    마땅한 단서는 나오지 않는다

     

    또한 각 점의 위치를 (x, y) 좌표로 나타내보면 어떤 단서가 나올 수 있지 않을까?

    → 그래봤자 (100, 250) (320, 500) 이런식으로 나올텐데 이 숫자의 조합이 무의미할 것임을 추측할 수 있다

    아니면 추가적인 단서가 주어졌다면 이 시도가 유의미했을 수도 있다

     

    그런데 애초에 각 점을 추출하기 위해서 특징을 찾아내야하는데

    이 과정에서 위치 정보가 아닌 색상값의 Blue 정보가 핵심임을 알 수 있다
    (FLAG가 문자열 text라고 했으니 변환 가능성도 충분하다)

     

    아무튼, 찾아낸 특징 (r==255, g==0)을 통해 각 점의 위치값을 찾아낸다

    from PIL import Image
    FLAG = []
    target = Image.open("google.png")
    width, height = target.size
    for i in range(width):
        for j in range(height):
            r, g, b, a = target.getpixel((i, j))
            if r == 255 and g == 0:
                data = (i, j)
                FLAG.append(data)
    print(FLAG)

    [(100, 100), (150, 220), (200, 650), (250, 1300), (300, 300), (300, 700), (400, 900), (450, 400), (500, 600), (600, 1000)]

    예상했다시피 규칙성이나(발견했어도 조합을 못했을듯) 특별한 의미가 보이지는 않는다

     

    2) 각 픽셀의 색상(rgb)

    1) 진행 과정에서 부가적으로 발견하게 된 특징 정보인 Blue를 잘 살펴보면

    많이 봐서 외우게된 0x30(=49)(숫자)~0x7A(=122)(영어소문자) 까지의 범위 내에서

    Blue 값이 변하는 것을 확인 가능하다

     

    따라서 이 Blue값을 추출해내서 ASCII 코드로 변환하면 플래그가 나올 것임을 예상해낼 수 있다.

    from PIL import Image
    FLAG = ""
    target = Image.open("google.png")
    width, height = target.size
    for i in range(width):
        for j in range(height):
            r, g, b, a = target.getpixel((i, j))
            if r==255 and g == 0:
               FLAG += chr(b)
    print(FLAG)

    출제자의 실수인지 python2015가 플래그이다.

    이정도 실수는 출제 당시 년도를 통해 유추 가능하니 큰 실수는 아니다