[Hack This Site] | Basic-6 | write-up

V123·2023년 10월 13일
0

Hack The Site

목록 보기
6/10
post-thumbnail

0x0 : 서비스 이해도

서비스에 대한 이해도는 'Grey-Box'로 볼 수 있을 거 같다.

0x1 : 정보 수집

문제 썸네일에서는 '암호화 프로그램이 존재한다.'라고 한다.

실제 문제에서는 공개된 암호화 프로그램이 존재하고, 그 프로그램을 이용해서 나온 암호문을 제시한다. 우리는 해당 암호문을 복호화 시켜야 한다.

0x2 : 공격 기법 마련

문제에서 비밀번호를 암호화 했다고 했지만, 프로그램을 실제로 이용해보면 이것은 암호화가 아니라 따지고보면 그냥 (인코딩/디코딩)처럼 특정 패턴에 문자를 살짝 헷갈리게 해놓은 것 이므로 패턴만 잘 파악한다면 평문 노출이 가능하다는 것을 알 수 있다. 민감한 데이터 노출에 해당하는 취약점이며, 안전한 암호화 방식을 택해야 한다.

이러한 암호화(?) 시스템의 패턴을 파악하려면 '다양한 값을 무작위로 넣어보면서 패턴을 파악'하는 방법을 생각할 수 있다.

  • 첫번째 시도

    입력값 : aaaaaaaaaa
    ->abcdefghij
    입력값 : abbaaaaaaa
    ->acddefghij

    똑같은 알파벳은 똑같은 알파벳을 쓴 개수만큼
    각 알파벳에서 +1한 알파벳에 대응시킨다.

  • 두번째 시도

    입력값 : bbbbbb
    ->bcdefg
    입력값 : aaaaaa
    ->abcdef

    첫 문자는 그냥 아무것도 대응 안시키고, 그 다음 문자부터 암호화 시킨다.
    그리고 각 [base] 알파벳을 가지고
    [base][base + 1][base + 2][base + 3].. 처럼 동작하는 거 같다.

  • 세번째 시도

    입력값 : abcde
      ->acegi
     b + 1 -> c
     c + 2 -> e
     d + 3 -> g

    첫번째 문자를 base문자로 잡는게 아니라
    그냥 각 문자 가져와서
    순서에 맞게 +1, +2, +3을 문자에 더한다.

이런식으로 다양한 입력값을 통해 암호화 프로그램의 암호 패턴을 도출했다.

0x3 : 익스플로잇

text = input("password to encrypt : ")

encrypt = text[0]
for i in range(1, len(text)):
    reverse_formula = chr(ord(text[i]) + i)
    print("[+]{0} + {1} = {2}\n".format(text[i], i, reverse_formula))
    encrypt += reverse_formula

print("[*]result : {0}".format(encrypt)) 


print("-"*15)

decrypt = ""
for i in range(len(encrypt) - 1, 0, -1):
    reverse_formula = chr(ord(encrypt[i]) - i)
    print("[+]{0} - {1} = {2}\n".format(encrypt[i], i, reverse_formula))
    decrypt += reverse_formula

print("[*]result : " + text[0] + "{0}".format(decrypt[::-1]))

위에서 발견한 패턴을 기반으로 (암호화/복호화)프로그램을 만들 수 있다.(Python 3.10.0)

#exploit code
encrypt = "0gh8;kii"
decrypt = ""
for i in range(len(encrypt) - 1, 0, -1):
    reverse_formula = chr(ord(encrypt[i]) - i)
    print("[+]{0} - {1} = {2}\n".format(encrypt[i], i, reverse_formula))
    decrypt += reverse_formula


print("[*]result : " + encrypt[0] + "{0}".format(decrypt[::-1]))

여기서 아까 전에 문제에서 제시한 암호문을 그대로 복호화 코드에 넣어주면, 복호화 된 비밀번호가 출력되는 걸 볼 수 있다. 이번 문제는 해커의 분석적 역량을 잘 보여준 거 같다.

profile
보안과 개발을 공부하는 평범한 학생입니다.

0개의 댓글

관련 채용 정보