끝나지 않는 프로그래밍 일기


5번을 풀기위해 http://webgame.wowhacker.com/UhaveToAuth에 접속합시다. 접속하자마자 인증 필요라는 창이 뜨며 사용자 이름과 비밀번호를 입력할수 있는 칸이 보입니다. 취소를 눌러봅시다.



그랬더니 아래와 같은 페이지를 볼 수 있습니다.


Authorization Required


This server could not verify that you are authorized to access the document requested. Either you supplied the wrong credentials (e.g., bad password), or your browser doesn't understand how to supply the credentials required.


Apache Server at webgame.wowhacker.com Port 80


401 Authorization Required 에러를 사용자에게 되돌려주고 있습니다. 즉, 이 링크로 접속하려면 사용자가 액세스 할 권한을 취해야 정상적인 페이지를 볼 수 있음을 의미합니다. 이것은 HTTP 기본 인증(HTTP Basic Authentication) 기능이 사용됨을 확인할 수 있습니다. 더 자세히 확인하기 위해, 프록시 툴을 이용해서 날아가는 데이터를 잡아보도록 합시다. (프록시 서버는 중계 기능을 하며 정보를 일시적으로 보관하여 사용자가 그 정보를 보고싶어 할때 정보를 제공해줍니다)


많이 알려진 프록시 툴인 파로스, 버프슈트, 아킬레스 등을 이용합시다. 저는 파로스를 택했습니다. 프록시 서버 설정을 끝내고 파로스를 실행합니다. 그리고 Trap 탭으로 이동하여 Trap request를 체크하여 웹 브라우저에서 웹 서버로 넘어가는 데이터를 잡아봅시다. 다시 사이트로 돌아가 인증 필요창이 뜨면 로그인을 눌러 데이터를 잡읍시다.


GET http://webgame.wowhacker.com/UhaveToAuth HTTP/1.1

Host: webgame.wowhacker.com

Proxy-Connection: keep-alive

Cache-Control: max-age=0

Authorization: Basic Og==

User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.75 Safari/537.1

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Encoding: sdch

Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4

Accept-Charset: windows-949,utf-8;q=0.7,*;q=0.3


파로스에 잡힌 데이터를 봅시다. 거기서 유심히 보셔야 할 부분이 있습니다. Authorization 부분이 있습니다. Basic Og==, 여기서 Og==는 base64로 인코딩 된 값입니다. 디코딩 해보시면 :란 값이 나옵니다. 그리고 이번엔 한번 사용자 이름과 비밀번호란에 아무것이나 넣어 로그인을 시도해봅시다. 저는 사용자 이름에 admin, 비밀번호에도 admin을 넣어보았습니다. 이번엔 Authorization가,


Authorization: Basic YWRtaW46YWRtaW4=


위와 같이 잡힙니다. 이걸 다시 디코딩을 해봅시다. 디코딩 하면 admin:admin라는 결과값을 얻으실 수 있습니다. 여기서 사용자 이름과 비밀번호 사이에 :가 들어가 base64로 인코딩 됨을 확인하실 수 있습니다.


이제 여기서, HTML 메소드를 아시는 분들도 있겠지만 모르는 분들도 있을것 같기에 따로 설명을 해드리겠습니다.


우리가 기본적으로 알고있는, 보아왔던 메소드는 GET, POST가 있습니다. GET 메소드는 서버의 URL가 지닌 정보를 요청하는 기능을 하고, POST 메소드는 GET 메소드와는 달리 대용량 데이터를 처리할 수 있으며, 내용을 변경시킬때 주소창에 요청 정보가 뜨지 않습니다. 그 밖에도 OPTIONS 메소드는 허용된 메소드를 출력하거나, PUT 메소드는 파일 업로드에 관한 기능을 가지고 있습니다. 또한, HEAD, DELETE, LINK, UNLINK 등등 여러 메소드가 존재합니다.


인증 설정 중 Limit을 설정하면 메소드를 제한할 수 있다는 것. 알고계시나요? 일반적으로 GET과 POST 메소드만을 제한해 두는데, 그 외의 메소드를 이용하면 아파치 웹서버의 웹 인증을 우회할 수 있다는 말이 됩니다. 그리고 방금 배운 OPTIONS, PUT 메소드 같은 경우는 잘못 사용되면 오작동이 일어나 GET 메소드와 같은 역할을 하게 됩니다.

예를 들어서 PUT 메소드 같은 경우, 파일 업로드에 쓰이는 메소드인데 업로드 할 파일이 없을때는 어떤일이 발생할지 생각해봅시다.


OPTIONS를 사용해서 웹 인증을 우회해보도록 하겠습니다. 사용자 이름과 비밀번호에 각각 admin을 넣고 이 데이터를 파로스로 다시 잡읍시다. 그리고 수정합시다. (GET -> OPTIONS)


OPTIONS http://webgame.wowhacker.com/UhaveToAuth/ HTTP/1.1

Host: webgame.wowhacker.com

Proxy-Connection: keep-alive

Authorization: Basic YWRtaW46YWRtaW4=

User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.75 Safari/537.1

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Encoding: sdch

Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4

Accept-Charset: windows-949,utf-8;q=0.7,*;q=0.3


그리고 Continue를 누르면 


Hi Admin!


* key: ISayDDaeYouSayMireoyo!


라는 글을 볼수 있습니다. 여기서 키 값이 나왔네요. 답은 'ISayDDaeYouSayMireoyo!'입니다.