Type c-j

소스코드 분석
check.php
플래그를 출력하기 위해서는 check.php 파일을 분석해야 합니다.
- (1) 35, 36라인 :
$id변수에 10글자로 구성된 문자열,$pw변수에는sha(1)결과 저장sha1함수는 16진수로 구성된 40글자 해시 값을 반환
- (2) 38번 라인 : POST 요청으로
input1, input2값 받기 - (3) 43번 라인 :
(int) $input_id == $id느슨한 비교 수행

- 1번째로, PHP에서는 문자열의 형변환이 이뤄지는 경우에 아래와 같이 동작합니다.
-
- “abcdefg12345” : 0
-
- “12345abcdefg” : 12345
- (맨 앞 값을 기준으로, 숫자로 변환 가능하면 숫자로, 불가능하면 0 반환)
-
- 2번째로, 느슨한 비교는 아래와 같은 결과를 반환합니다.

- (1)
$id값은getRandStr(...)함수에 의해 만들어지고 항상 10글자로 구성된 임의의 문자열입니다. - (2)
(int) $input_id == $id조건에서 우리가 컨트롤 할 수 있는 값은$input_id부분입니다. - 우리는 위 표에서
0 == "php"결과가 참(TRUE)인 것을 확인했습니다.- 따라서,
$input_id값이 0이 되도록 하면 됩니다.

- 따라서,
- 이렇게 말이죠?
$input_id로 입력받은 값의 길이가 10인지 확인하는 조건문도 있었기 때문에- 임의의 문자열로 10글자를 채워줬습니다.
- 모두 가능 (
abcdefghij/0bcdefghij/0000000000)

- 모두 가능 (
- 이제 패스워드 검증 로직을 통과해야 합니다.
- 패스워드로 입력받은 값과
sha(1)값이 동일한지 확인하는 로직이네요.- 여기에서도 동일하게 (int) 정수형으로 형변환이 이뤄지고 있습니다.

- 여기에서도 동일하게 (int) 정수형으로 형변환이 이뤄지고 있습니다.
sha(1)함수의 리턴 값은356a192b7913b04c54574d18c28d46e6395428ab입니다.(int) 356a192...428ab는 356 으로 값이 변환됩니다.- 따라서,
$input_pw값으로 “356abcdefg” 을 넣어주면 통과되겠죠?

- 따라서,
- Wkwks. 플래그 획득에 성공했슴다.

🐛.. 🐛.. 🐛..