문제 서버에 접속하면 위와 같이 쿠키 사진이 있습니다. 따라서 쿠키를 이용해서 문제를 풀라는 출제자의 의도를 추측할 수 있습니다. 쿠키를 확인하면 Cookie와 PassAdmin이라는 값이 있습니다.
Cookie -> WlhsS2NGcERTVFpKYWtscFRFTktNR1ZZUW14SmFtOXBXak5XYkdNelVXbG1VVDA5
PassAdmin -> j0n9hyun
쿠키값을 보면 16진수가 아닌 임의의 문자들이 있는데 대문자 소문자 숫자들로만 구성된것으로 보아 base64로 인코딩되었을 가능성이 큽니다.
base64로 복호화 3번을 반복하면 아래와 같은 값을 얻을 수 있습니다.
{"id":"2","type":"guest"}
이번에는 guest를 admin으로 바꿔준 후 다시 인코딩을 3번하겠습니다.
{"id":"2","type":"admin"}
eyJpZCI6IjIiLCJ0eXBlIjoiYWRtaW4ifQ==
ZXlKcFpDSTZJaklpTENKMGVYQmxJam9pWVdSdGFXNGlmUT09
WlhsS2NGcERTVFpKYWtscFRFTktNR1ZZUW14SmFtOXBXVmRTZEdGWE5HbG1VVDA5
인코딩한 값을 Cookie에 넣으면 패스워드가 틀렸다는 문구가 출력됩니다. 이번에는 아래 PassAdmin 조건을 통과해야 합니다.
PassAdmin -> j0n9hyun
여기서 사용할 방법은 php의 느슨한 비교 취약점입니다. 특정 php 버전에서는 strcmp에서 문자열 대신에 배열을 넣으면 오류가 발생하므로 Null이 반환되는데 Null==0 이 true를 반환하여 참이되는 취약점이 존재합니다. 따라서 PassAdmin이 아닌 PassAdmin[]을 주입하면 조건을 우회할 수 있습니다.
'웹 해킹 > CTF' 카테고리의 다른 글
XSS(Cross Site Scripting), CSRF(Cross Site Request Forgery) 개념 (0) | 2021.11.12 |
---|---|
[HackCTF] 가위바위보 (0) | 2021.10.17 |
[HackCTF] Home (0) | 2021.10.17 |
[HackCTF] Input Check (0) | 2021.09.16 |
[HackCTF] Time (0) | 2021.09.16 |
댓글