[Solved in under 20 minutes]
그냥 Wargame 푸는 기계가 된 듯 하다.
다음주 월요일 부터 첫출근이다 보니 미리 Wargame좀 많이 풀어보려고 노력한다.
오늘 하루만 10시간 정도는 문제만 풀거나 공부 한거 같다..
솔직히 조금 재밌다 므흣
가보자


별 득 없는 Black Box 문제이니 코드 공유는 안하겠다.

화면에 보이는 제출을 그대로 제출 하면 저런 문구가 뜨면서 몇초 뒤 원래 페이지로 돌아간다.
근데 여기서 포인트가 있다 URL을 자세히 보면 ?id=admin 이라는 문구가 보인다.
일단은 GET으로 데이터를 요청 할 수 있다.
guest로 바꾸면

?id=guest
그냥 hello guest라 뜨고 로그인이 된다.
인자가 id 하나밖에 없어 보이니 admin' 뒤에 다 주석으로 바꾸니

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 답 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
?id=admin' %23
?id=admin' --
?id=admin'
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
예?
.
.
.
예? 테스트하는데 문제가 풀렸다.
근데 느낌이 정말 그냥 느낌이 이렇게 푸는문제가 아닌 듯 한데 이게 왜 풀렸지라는 생각이 제일 먼저 들었다.
심지어 주석처리 안해도 풀린다.
주석처리 해서 풀리는 문제라면 SQL Injection이라고 이해라도 될텐데 안해도 풀리니 이거 뭔가 문제가 이상한듯 해 문제를 풀고도 조사하기 시작했다.
다시 ?id=guest 를 삽입하고 테스트를 하던 도중
의심스러운 부분(?)이 보였는데

여기서 logout을 아무리 눌러도 logout이 안된다.
고로 쿠키를 직접 삭제하러 개발자도구를 들어가서 보았는데

YjJmNWZmNDc0MzY2NzFiNmU1MzNkOGRjMzYxNDg0NWQ3Yjc3NGVmZmU0YTM0OWM2ZGQ4MmFkNGY0ZjIxZDM0Y2UxNjcxNzk3YzUyZTE1Zjc2MzM4MGI0NWU4NDFlYzMyMDNjN2MwYWNlMzk1ZDgwMTgyZGIwN2FlMmMzMGYwMzRlMzU4ZWZhNDg5ZjU4MDYyZjEwZGQ3MzE2YjY1NjQ5ZQ==
뭔가 쿠키 값이 심상치 않다.
바로위 PHPSESSID 와 달리 엄청 무자비한 값들이 들어있어 이게 뭐지 생각하다가 맨뒤에 ==를 보고 깨달았다.
문자열 맨뒤에 =, ==가 붙어있다면 아주 높은 확률로 Base64 Encoding이다.
좋은 정보이니 기억하자 여러분
일단 디코딩을 해봤는데

b2f5ff47436671b6e533d8dc3614845d7b774effe4a349c6dd82ad4f4f21d34ce1671797c52e15f763380b45e841ec3203c7c0ace395d80182db07ae2c30f034e358efa489f58062f10dd7316b65649e
Dreamhack tools에서 Cyber Chef, Request Bin을 무료로 이용 할 수 있으니 편하게 사용하자
근데 그건 그렇고 이건 뭔데?
이렇게 접근하는게 맞는거 같은데 일단 뭔지 모르겠으니 다른걸로 로그인해서 비교를 해보자

?id=1
1로 로그인하여
쿠키값을 보니

YzRjYTQyMzhhMGI5MjM4MjBkY2M1MDlhNmY3NTg0OWI=
역시나 Base64 Encoding 이고 이거를 디코딩해주면

c4ca4238a0b923820dcc509a6f75849b
이런 값이 나온다.
output 엄청 간단하게 길이에 따라서 값이 바뀌나? 라는 생각이 들었는데 암호학의 ㅇ하나도 모르는 내가 봐도 뭔지 감도 안잡혀 그냥 구글에 검색해봤다 ㅋㅋㅋㅋ

???????????
이게 왜 나오노
봤는데 1을 MD5로 해싱하면 c4ca4238a0b923820dcc509a6f75849b 이 값이 나오는게 아니냐 와이 씨
그럼 즉 내가 1로 로그인했으니 1 -> MD5 -> Base64 형식으로 저 값이 나오는거라면
반대로 guest를 MD5 해주면
b2f5ff47436671b6e533d8dc3614845d7b774effe4a349c6dd82ad4f4f21d34ce1671797c52e15f763380b45e841ec3203c7c0ace395d80182db07ae2c30f034e358efa489f58062f10dd7316b65649e
이 값이 나올게 분명하다 바로 해봤다.

echo -n "guest" | md5sum
엥? 아 ㅋㅋㅋㅋㅋㅋㅋ 내가 바보였습니다.
어떤값을 MD5 변환해도 32자리다 전제가 잘 못 됐다.
저 값은 위로 올려서 사진을 보면 총 160자리이다.
g -> MD5 -> 32자리
u -> MD5 -> 32자리
e -> MD5 -> 32자리
s -> MD5 -> 32자리
t -> MD5 -> 32자리
이렇게 총 160자리 인것이다.
하나 하나 개별로 MD5가 되어 있다고 가정하고
다시 돌려보니

b2f5ff47436671b6e533d8dc3614845d
빙고 앞에 자리가 똑같은 걸 볼 수 있다.
이론이 맞아 떨이지니 반대로 생각해보자.
우리는 admin으로 로그인 해야한다.
admin도 결국에는 admin -> MD5 -> Base64 형식으로 되어 있을거니 역으로 해보자
a -> MD5 -> 32자리
d -> MD5 -> 32자리
m -> MD5 -> 32자리
i -> MD5 -> 32자리
n -> MD5 -> 32자리
돌리면

0cc175b9c0f1b6a831c399e2697726618277e0910d750195b448797616e091ad6f8f57715090da2632453988d9a1501b865c0c0b4ab0e063e5caa3387c1a87417b8b965ad4bca0e41ab51de7b31363a1
값이 나오는데 이거를 Base64 Encoding을 한다면?

MGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2NjE4Mjc3ZTA5MTBkNzUwMTk1YjQ0ODc5NzYxNmUwOTFhZDZmOGY1NzcxNTA5MGRhMjYzMjQ1Mzk4OGQ5YTE1MDFiODY1YzBjMGI0YWIwZTA2M2U1Y2FhMzM4N2MxYTg3NDE3YjhiOTY1YWQ0YmNhMGU0MWFiNTFkZTdiMzEzNjNhMQ==
값이 나온다
그리고 이 녀석을 쿠키로 삽입하면?

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 답 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
MGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2NjE4Mjc
3ZTA5MTBkNzUwMTk1YjQ0ODc5NzYxNmUwOTFhZDZmOGY1Nz
cxNTA5MGRhMjYzMjQ1Mzk4OGQ5YTE1MDFiODY1YzBjMGI0Y
WIwZTA2M2U1Y2FhMzM4N2MxYTg3NDE3YjhiOTY1YWQ0YmNh
MGU0MWFiNTFkZTdiMzEzNjNhMQ==
ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
풀린다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
그런데 아까전에 ?id=admin' %23 이녀석으로 인해서 이미 풀어버려서 already solved 문구가 나온다 ㅋㅋㅎㅎㅎㅋㅋㅎㅎㅋㅎㅎㅋ 이거 문제 잘 못 된거 맞죠?
SQL Injection으로 20분 만에 풀고 이 방식으로 1시간 30분 걸렸는데 허허 ㅋㅎㅋㅎㅎㅋ? 에라~ 모르겠다
Webhacking.kr Old-19 Write-up
이상 보고 끝!