메인화면입니다.

소스보기입니다.

[소스해석]

[소스 해석]

1. id에 특수문자 입력시 '\'가 앞에 붙음

2. pw입력시 md5로 해시 후 binary코드로 변환

3. admin의 id를 출력하면 성공

인터넷을 뒤지다보니 md5 true 취약점이 있다고 하네요 ~

md5('string');은 기본 옵션이 false이고 hex값을 반환합니다.

하지만 md5('string', true); 이렇게 true옵션을 주었을 경우 바이너리 형태로 반환됩니다.

echo 명령어를 통해 웹브라우저로 해당 내용을 띄울 경우 true옵션을 준상태이면 hex값 두자리를 아스키코드로 표시한 것과 같습니다. 즉, 8비트씩 읽습니다. 예를 들면 소문자 'q' 는 '0x71'이고 대문자'L'은 '0x4c'입니다.

이제 true옵션을 준 출력결과를 어떻게 이용하는지 살펴보겠습니다.

쿼리 테스트를 위해 아래와 같이 구성하였습니다.

pw를 기준으로 pw='1'='2'='3' 과 같은 조건을 만들면 어떠한 현상이 발생하는지 3가지 경우를 살펴보겠습니다.

[pw에 해당하는 값이 없을 경우]

모든값이 출력됩니다.

[pw에 해당값이 앞에 있을 경우]

해당 값을 제외한 값이 출력됩니다.

마찬가지로 해당 값을 제외한 값이 출력됩니다.

[해당값이 뒤에 있을 경우]

모든 값이 출력됩니다.

대략 원리는 이렇습니다.

이를 이용해 pw는 전체의 결과값이 나오게만들고 id 뒤에 and문을 이용하여 조건을 걸어 id를 뽑아보겠습니다.

보시다 시피 원하는 값이 출력되었습니다.

이제 pw부분에 인젝션 쿼리를 보내기위해 md5('string', true);를 할시 '='가 포함된 결과를 찾으면 될 것 같습니다.

[소스코드]

이제 저 숫자 중 하나를 골라 pw에 입력하면 되겠습니다.

id: admin

pw : 1839431

위와 같이 입력하였습니다.

결과는!

챌린지 51 성공!

'WAR GAME > Webhacking.kr' 카테고리의 다른 글

[webhacking.kr] Level53 (old)  (125) 2020.04.28
[webhacking.kr] Level52 (old)  (173) 2020.04.28
[webhacking.kr] Level50 (old)  (311) 2020.04.28
[webhacking.kr] Level49 (old)  (304) 2020.04.28
[webhacking.kr] Level48 (old)  (311) 2020.04.28

+ Recent posts