https://dreamhack.io/wargame/challenges/328
주어진 링크에 처음 들어갔을때
password는 암호화 되어있는 것을 볼 수 있다
sha1과 md5가 사용됨
우선 넘어가고 strcmp 함수 부분을 보자
($_POST['password'], $password) == 0
strcmp 함수는 두 문자열을 비교하는 함수로 첫 번째 문자열과 두 번째 문자열을 비교하여 같으면 0을 반환한다
$_POST['password'] : 사용자가 폼을 통해 입력한 비밀번호
$password : 비교 대상이 되는 서버 측에 저장된 비밀번호
두 문자열이 같은지 비교하고 같으면 0을 반환 -> 조건문이 true -> if 안에 코드 실행 (플래그 발견)
이 흐름으로 진행되게 만들어야함
근데 이때
php 5.3 버전의 strcmp 함수는 배열과 string을 비교하면 0을 return한다는 취약점이 있다고 함
또한 NULL과 0을 ==로 비교할 때 True를 반환
다시 말해서 PHP에서 strcmp() 함수는 strcmp($a,$b) 형식으로 인자를 받는데 이때 비교받을 대상 $a가 문자열이나 숫자가 아니라 배열(array)을 인자로 넣으면 같다고 보고 0으로 실행결과를 돌려주는 취약점이 있다.
따라서 비교 대상인 $password를 배열로 바꿔줘야한다
name="password[]"
DH{aede9e7fa4ccb8225f12040a16bdfd37c0c5d2f0}
관리자모드에서 코드를 수정한 후 비밀번호 란에 아무 숫자나 입력했더니 플래그가 나왔다 !
인자가 배열이 되어서 무슨 값을 입력해도 같다고 보고 0을 반환 -> 조건문이 true -> 코드 실행
php strcmp 취약점에 대해 알아야함
'SWUFORCE - 워게임' 카테고리의 다른 글
[써니나타스] 워게임 15 문제풀이 (0) | 2024.11.24 |
---|---|
[써니나타스] 워게임 3 문제풀이 (2) | 2024.11.17 |
[써니나타스 2] 워게임 LEVEL 2 문제풀이 (0) | 2024.11.12 |
[써니나타스 18] 워게임 Cipher I : What is it? 문제풀이 (2) | 2024.11.12 |
[드림핵 WEB] Beginner 워게임 simple-web-request 문제풀이 (0) | 2024.11.04 |