Challenge(old)_19
이렇게 푸는게 맞는지 모르겠지만..
다 풀고나서 구글링했더니 당연히 이게 아니었다ㅋㅋㅋㅋ
정석 방법은 아니지만 그냥 적은게 아까우니까
구글링으로 찾은 방법도 맨 아래 추가를 해두었다.
제출을 누르면 you are not admin이라고 뜬다.
처음에는 sql injection인줄 알고 0, 1부터 넣어봤다.
0일때는 아무것도 안뜨지만 url에 get방식으로 id=0이라고 파라미터가 전달되는 것을 볼 수 있다.
1을 입력하면 아래와 같이 나온다.
다른 입력을 해봐도 hello 입력값 이런식으로 뜬다.
인증을 뭐로 하는지 모르겠어서 쿠키값을 확인했더니 userid라는 쿠키값이 생성되어 있었다.
다른 값의 쿠키값
admin에 해당하는 쿠키값을 찾아서 설정해주면 solve일 것같은데
저 문자열이 어떻게 나온는건지 감이 안왔다.
길이가 불규칙해서 해쉬 함수는 아니고..
그러다가 규칙을 찾았는데 1과 10의 해쉬값을 비교해보면
앞부분이 동일하다.
다른 입력값으로 실험을 해 본 결과 글자마다 특정 문자열이 정해져 있었는데 그게 자리마다 다르다.
예를들면 첫번째자리 a는 123, 두번째자리 a는 ㄱㄴㄷ....
그래서 나는 bdmin 의 결과값과 ad의 결과값을 알아낸 다음 bdmin의 앞부분에 ad에 해당하는 부분을 바꿔넣었다.
위가 bdmin, 아래가 ad인데
보면 두번째 d에 해당하는 값이 동일한 것을 알 수 있다.
따라서 아래 값에서 d 앞부분 값을 위에 d 앞부분 값에 넣어주면 된다.
완성된 값을 쿠키값 userid에 넣어주고 새로고침하면 끗
인코딩 규칙때문에 저런식으로 규칙을 노가다로 찾아도 맞아 떨어져서 웃겼다
이게 맞는 풀이 방법..
끝자리가 =이 아니라서 base64는 당연히 아닌줄 알았는데 %3D는 =이 인코딩된 값이다ㅋㅋㅋㅋ
%3D만 =으로 바꿔서 base64 디코딩을 하면 MD5로 인코딩된 값이 나온다.
MD5는 32자리값이 나오기 때문에 끊어서 디코딩을 하면 된다.
admin의 각 자리를 MD5로 인코딩하여 연결하고 base64로 인코딩하면 끗