본문 바로가기

드림핵

[Dreamhack] php7cmp4re

php에 대한 웹 해킹 문제

알맞은 Input 값을 구해 입력하여 플래그를 획득하는 문제이다.

 

서버를 열어 웹 접속하게 되면 이러한 input1와 input2를 입력하여 제출하면 된다.

문제 파일을 받고 check.php를 메모장에 삽입해 코드를 확인해보자.

 

코드가 나오는 것을 볼 수 있다.

여기서 input 입력에 대한 힌트가 있는데 if문 조건식을 주목해보자.

 

먼저 input1에 대한 조건이다.

1. if(strlen($input_1) < 4)
2. if($input_1 < "8" && $input_1 < "7.A" && $input_1 > "7.9")
  • 길이가 4보다 작아야함
  • $input_1이 "8", "7.A" 보다 작으면서 "7.9" 보다 커야함.

"8"와 "7.A"를 아스키 코드로 변환하면 "8"은 56, "7.A"는 55, 46, 65

첫 문자부터 사전식 비교를 하기 때문에 56보다 55가 더 작다.

즉, 만족해야 할 조건은 "7.9" < $input_1 < "7.A"

 

아스키 코드로 변환해보자

'7' = 55, '.' = 46, '9' = 57
'7' = 55, '.' = 46, 'A' = 65

 

첫 문자부터 차례대로 아스키 코드 비교했을 때 세 번째 문자는 57 < 65 이므로,

세 번째 문자가 '9' < char < 'A' 범위에 있어야 만족함. (9와 A의 사잇 값)

$input_1의 세 번째 값은 58, 59, 60, 61, 62, 63, 64이다.

문자 10진수
: 58
; 59
< 60
= 61
> 62
? 63
@ 64

따라서, $input_1의 값은 7.: ~ 7.@이다.

 

다음은 input2에 대한 조건이다.

1. if(strlen($input_2) < 3 && strlen($input_2) > 1)
2. if($input_2 < 74 && $input_2 > "74")
  • 길이가 3보다 작으면서 1보단 커야함 = 2자리 수
  • $input_2이 "74"보다 크면서 74보다 작아야 함.

"74"를 아스키코드로 변환해보면 55 52이다.

조건식에서 $input_2는 74보다 작고, "74"보다 크다고 했기 때문에

만족해야 할 조건은 55 52 <  $input_2 < 74이다.

 

문자 10진수
8 56
9 57
: 58
; 59
< 60
= 61
> 62
? 63
@ 64
A 65
B 66
C 67
D 68
E 69
F 70
G 71
H 72
I 73

문자가 '8' < char < 'I' 범위에 있어야 만족함. (8와 I의 사잇 값)

따라서, $input_2의 값은 88 ~ II이다.

(이상한 점 발견한 경우 아래를 참고)

 

위에서 구한 input1와 input2의 값을 입력 후 제출하면 플래그를 획득할 수 있다.

 

하지만 input2 입력 란에 88을 입력하면 Good try라고 뜬다.

왜 88은 되지 않는 것일까? 

 

위 표대로 문자 8은 10진수로 56이지만 문자열과 숫자를 비교할 때 타입 변환이 일어난다.

$input_2가 문자열이고, 비교 대상이 숫자면 문자열을 숫자로 강제로 변환 후 숫자를 비교하기 때문이다.

즉, "88" < 74 → 88 < 74 성립 X

당연한 말이였다.

 

또 여기서 이상한 점이 있다.

PHP 특징으로 문자를 만나는 순간 종료되므로 "7=" > "74는 성립되지 않는다.

다만 PHP 문자열 안에 문자가 있어도 내부적으로 두 문자열을 사전식으로 비교하기 때문에 참이다.

두 번째 글자 '='(ASCII 61) > '4'(ASCII 52) 따라서 성립한다.

 

즉, 순자 변환 시 7로 작동하면서, 문자열 비교 시 ASCII 값 61 > 52는 조건 만족이다.

 

'드림핵' 카테고리의 다른 글

[Dreamhack] CSRF-1 및 CSRF-2  (1) 2025.12.04
[Dreamhack] XSS-1 및 XSS-2  (0) 2025.12.03
[Dreamhack] command-injection-1  (0) 2025.04.04
[Dreamhack] file-download-1 문제  (0) 2025.04.03
[Dreamhack] devtools-sources 문제  (0) 2025.04.02