본문 바로가기

보안공부/XCZ 풀이

xcz.kr 21번 문제 풀이 - 뜨개질

XCZ.KR PROB 21 풀이

[ 뜨개질 ]


XCZ.KR의 21번 문제를 풀어보자.


제목부터가 "PHP 난독화 깨기"여서 처음에는 "뭐 별거 아니겠지"라 생각했는데

이뭐병....


https://www.unphp.net/를 통해  한번 디코딩해보니 다음과같이 변했다.


않이.... 대체 왜 변수 이름까지 저렇게 선언해둔거야,,,,,,

한땀한땀 저 퍼즐을 맞춰보면 다음과 같이 짧은 코드로 변한다.


지금 이 조금의 코드를 저만큼으로 늘여둔거???

(솔직히 좀 허무했어ㅇ...ㅛ....)


암튼 이제 원하던 원본 코드를 얻어냈으니 저 코드를 분석해보았다.

기본 설정 / 조건

  • 받은 key값이 소문자 / 대문자의 영문 또는 숫자가 아닐 경우 "Error"을 출력하며 exit.
  • 받은 key값을 - 를 기준으로 분할하여 $a에 배열의 형태로 저장한다.

h함수

파라메터로 넘겨받은 $a의 0번째부터 4번째까지의 아스키코드를 추출하여 그 합을 return해줌.

위의 조건을 만족하고 다음 조건들도 만족하면 플래그(인증값)이 출력되고 exit된다는 결과가 도출되었다.


$a[0] : 각 자리의 아스키코드 변환값의 합이 312 초과 333 미만

0 숫자

1 숫자

3 숫자 X


$a[1] : 각 자리의 아스키코드 변환값의 합이 300 초과 326 미만


$a[2] : 각 자리의 아스키코드 변환값의 합이 349 초과 407 미만

0 숫자 X

1 숫자


$a[3] : 각 자리의 아스키코드 변환값의 합이 357 초과 359 미만

0 숫자 X

1 숫자 X

2 숫자

3 숫자


$a[0] ~ $a[4]의 아스키코드 변환값의 합의 반올림 값이 $a[4]의 아스키코드값과 같음.


따라서 이제 도출된 조건에 부합된 값을 GET 메소드를 통해 key 파라메터로 전달해주면 플래그가 나온다.



XCZ.KR 21번 문제 클리어!

근데 전 대체 이문제 풀려고 얼마나 오래 걸린건가요... 그리 어려운 문제는 아니었네요.... ㅠㅠㅠㅠ