InformationSecurity-Study

[webhacking.kr] prob 22 문제풀이 본문

웹 해킹

[webhacking.kr] prob 22 문제풀이

-Shinwoo- 2019. 3. 4. 22:12

오랜만에 풀어야겠다는 생각이 들었다. 그동안 IOS PROJECT를 하느라 웹 해킹 문제를 풀 겨를이 없었다.


1. 문제 해석



22번 문제를 클릭해서 들어가보면 ID, PASS를 입력하는 칸과 로그인/회원가입 버튼이 있다. 

그리고 그 아래에는 HINT 라며 ID가 admin일 경우 $solution 변수에 해당하는 값을 노출시킨다고 되어 있다. 




그렇다면 username에 admin을 넣어서 해보면 될까 싶지만, Wrong이라고만 뜬다. 

일단 소스 코드부터 보아야 겠다.





uuid라는 변수에 ID값을 넣고, pw라는 변수에 PASSWORD를 입력한다. 로그인 버튼을 누르면 로그인이, join 버튼을 누르면 해당 url+?mode=join으로 이동한다. 소스코드에는 별게 없어 보인다. 


2. 문제풀이


떠오르는 아이디어 없어 문제의 url + ?mode=join을 입력하여 회원가입을 막 해보았다.


회원가입한 아이디로 로그인을 하면 다음과 같다. 



결과를 보면 알 수 있듯이, id는 "admin"이어야 한다. ID가 admin이어야 비밀번호 $solution값을 알아낼 수 있고, 문제를 풀 수 있는 것이다. 

또한 user key 비밀번호는 md5 인코딩된 것인데, 이를 디코딩 하여 보면 pw값에 zombie가 더해진 값의 인코딩인 것을 알 수 있다. 


(위와 같이 임의의 문자열이 덧붙여 진 것을 솔트라 한다. 솔트란 해쉬함수 레인보우테이블 공격에 대응하기 위해 원래의 값 뒤에 임의의 문자열을 덧붙혀 해쉬를 계산해내는 방법을 의미한다.)


어차피 핵심은 uuid니까 username에 admin' and 1=1 # 을 넣어주고 pw에 아무값이나 넣어본다. (주석의 종류는 --, //, # 등이 있다.)

==> 반응은 Wrong Password! (아이디는 True라고 반응하는 것이다. 


비밀번호를 알아내기 앞서, 먼저 비밀번호의 길이를 알아내기 위해 1부터 순차적으로 증가시켜 보았다.  ==> admin' and length(pw)=1~ #

결과적으로 pw의 길이는 32임을 알아내었고, 일일이 비밀번호를 알아낼 방법이 나에게는 생각이 나지 않아 소스코드를 참조하였다. 




참조한 소스코드는 위와 같다. 



이를 실행하여 보자. 



소스코드를 돌려 알아낸 MD5 값은 2a93a7cea083c6e9e02c97ec5a5d715a이다. 이를 MD5 복호화한 다음 마지막의 zombie 솔트값을 떼어내면 답을 얻어낼 수 있다. 

따라서 username에는 admin' and 1=1 #을, pw에는 얻어낸 rainbow를 입력하면 풀린다. 







- 출처

https://blog.naver.com/PostView.nhn?blogId=timtaeil&logNo=221312817349&parentCategoryNo=&categoryNo=21&viewDate=&isShowPopularPosts=false&from=postList