HackCTF Web의 13번째 문제는 Cookie다.
문제 링크: http://ctf.j0n9hyun.xyz:2027/
사실 이 문제의 경우, 군대 간 그 동기가 CTF 스터디 처음 할 때 추천한 여러 문제 중 하나였다. 그니까 블로그가 생기기도 전에 먼저 풀어봤다는 것..🤣 이 문제의 경우, 다시 복습한다는 느낌으로 풀어봤다.
문제 링크로 들어가면 쿠키 사진과 함께 "개꿀맛 쿠키"라고 쓰여 있다. 이 문제의 경우 처음 풀 때, 쿠키를 해당 사진과 문구를 힌트 삼아 쿠키를 이용하는 문제겠구나 싶었다.
Cookie 값을 처음 확인했을 때는 저게 뭘까 싶었다. 해당 값이 무엇인지 생각을 하던 중 base64로 인코딩된 문자열과 유사하다는 생각이 들어서 Online base64 decoder를 활용해 디코딩을 진행했다.
WlhsS2NGcERTVFpKYWtscFRFTktNR1ZZUW14SmFtOXBXak5XYkdNelVXbG1VVDA5
⬇️
ZXlKcFpDSTZJaklpTENKMGVYQmxJam9pWjNWbGMzUWlmUT09
⬇️
eyJpZCI6IjIiLCJ0eXBlIjoiZ3Vlc3QifQ==
⬇️
{"id":"2","type":"guest"}
디코딩을 세 번하면 "{"id":"2","type":"guest"}" 값을 얻을 수 있다. 플래그를 얻기 위해 "{"id":"1","type":"admin"}" 꼴로 변경한 후, 3번의 base64 인코딩을 해서 다시 쿠키 값에 넣어줬다. (Online base64 encoder 활용)
{"id":"1","type":"admin"}
⬇️
eyJpZCI6IjEiLCJ0eXBlIjoiYWRtaW4ifQ==
⬇️
ZXlKcFpDSTZJakVpTENKMGVYQmxJam9pWVdSdGFXNGlmUT09
⬇️
WlhsS2NGcERTVFpKYWtWcFRFTktNR1ZZUW14SmFtOXBXVmRTZEdGWE5HbG1VVDA5
하지만 Password가 틀렸다는 문구와 함께 플래그가 보이지 않는다. 아마 접근 방식은 맞았는데 무언가 패스워드와 관련된 어떤 동작을 추가로 해 줘야 하는 것 같다.
이 부분에서 처음 풀 때 어떠한 방식으로 접근하는지에 관해 삽질을 좀 많이 했다. 이제는 여러 문제를 풀다 보니 관련된다고 생각하는 개념 여러 개를 적용해가며 접근할 수 있다.
개발자 도구에서 cookie값을 살펴보면 PassAdmin 값을 참이 되게 전송하면 문제가 풀리는 것 같다. 당시에는 풀지 않았지만 전에 이 사이트에서 풀었던 Input Check 문제에서 쓰인 strcmp() 취약점을 활용하면 문제가 풀릴 것 같다는 생각이 들었다. (해당 문제 링크: https://bing-su-b.tistory.com/77)
간단히 소개만 하면, php에는 strcmp() 취약점이 있다. strcmp($a, $b)를 실행할 때 $b가 크면 음수, $a가 크면 양수, $a와 $b가 같으면 0을 반환한다. 이때, php 특정 버전에서는 입력 값으로 배열을 넣으면 strcmp() 함수가 0을 리턴한다. 따라서 strcmp() 취약점을 사용하기 위해 PassAdmin[] 형태로 쿠키 값을 전달했다.
strcmp() 취약점이 적용되어 플래그를 획득할 수 있다. 이를 인증하면 문제가 풀린다.
[HackCTF-Web#15] Authenticate - 350 points (0) | 2022.01.12 |
---|---|
[HackCTF-Web#14] LOL - 300 points (0) | 2022.01.11 |
[HackCTF-Web#12] 가위바위보 - 200 points (0) | 2022.01.10 |
[HackCTF-Web#11] Home - 200 points (0) | 2022.01.10 |
[HackCTF-Web#10] Input Check - 150 points (0) | 2021.03.24 |
댓글 영역