Webhacking.kr

Prob60




60번 문제입니다. 들어가자마자 Access Denied를 뱉어내면서 우릴 밀어냅니다.

소스를 한번 확인해보도록 하죠.




PHPSESSID 값에 숫자가 들어있을 때 해당 문구를 뱉으면서 종료시키는 소스였네요.

그리고 아래 부분을 보면 세션id의 이름으로 파일을 하나 생성하는데, 내용 역시 세션id입니다.

그런데 접속하는 주소가 127.0.0.1일 경우 1초간 슬립 후 해당 파일을 삭제시킵니다.

중요한 점은 가운데 if문인데, mode 변수가 auth로 들어올 경우 해당 파일을 읽어 이름과 내용의 일치 여부 파악 후 일치할 경우 클리어 되는 부분입니다.

하지만 파일은 만들어지고 1초 뒤에 삭제가 되기 때문에 그 사이에 파일을 읽어줄 필요가 있습니다.

이 때 알아야 되는 개념이 레이스 컨디션입니다.

레이스 컨디션이란 말 그대로 경주, 경쟁자 상태를 말합니다. 서로 경쟁하는 사람들처럼 2개 이상의 프로그램이 동시에 돌아가며 서로 영향을 끼치는 상태를 의미합니다.

웹 해킹에서의 레이스 컨디션 뿐만 아니라 시스템 해킹에서도 사용되는 개념입니다.

그럼 차례대로 문제를 해결해보도록 하겠습니다.



크롬의 확장프로그램인 EditThisCookie를 이용하여 PHPSESSID를 변조시키겠습니다. 현재 PHPSESSID의 값에는 숫자가 포함되어있기 때문에 이를 없애줘야합니다.



숫자만 제거하고 영문은 그대로 놔두고 적용시키겠습니다.



세션에 해당하는 쿠키 값을 변조했기 때문에 이 바꾼 쿠키 값을 서버에 다시 저장해줄 필요가 있습니다. 다시 로그인 해 줍시다.



숫자를 제거한 세션ID로 로그인 되었습니다. Access Denied 메시지가 뜨지 않고 정상적으로 웹페이지에 접속 된 것을 확인 할 수 있습니다.



문제를 해결하기 위해 mode 변수를 auth로 GET요청을 통해 날려줍시다. 하지만 앞서 말했듯이, 1초 뒤에 파일은 삭제되기 때문에 레이스컨디션을 이용해 동시에 접속할 필요가 있습니다. 이를 위해 시크릿모드로 새 세션을 열어주었습니다.



새 세션에서도 위와 동일하게 쿠키 값을 바꾼 후 로그인 해줍니다. 그 후 두 윈도우에서 연속으로 refresh를 해주면 생성되는 파일을 read하면서 문제가 클리어됩니다.



이번 문제는 레이스컨디션에 대한 사전지식이 없을 경우 풀이하기 어려움이 있었던 문제입니다.

레이스컨디션에 대한 상세한 정보는 구글링을 통해 알아보시면 될 것 같습니다.

'Wargame > Webhacking.kr' 카테고리의 다른 글

Webhacking.kr old-01(200)  (0) 2019.09.22
Webhacking.kr Prob40  (0) 2016.05.13
Webhacking.kr Prob53  (0) 2016.05.11
Webhacking.kr Prob48  (0) 2016.05.11
Webhacking.kr prob59  (0) 2016.05.11

SuNiNaTaS

Web Level6




6번째 문제입니다. Hint와 reference 글을 읽어보면 README 글을 열람하라는 내용과, 인코딩 및 디코딩을 지원해주는 http://tools.web-max.ca/encode_decode.php 웹페이지 URL이 적혀있습니다. README 글을 클릭 해 보면 아래와 같은 창이 나타납니다.



파란 글씨로 SQL Query가 써져있는데, Single Quotation을 이용한 SQL Injection을 통해 간단하게 인증을 우회 할 수 있을 것 같았습니다.

그래서 위 그림과 같이 query를 날려주었습니다.(1' or 1=1#과 같은 쿼리를 날려 줄 수도 있지만, =과 # 필터링으로 인해 like와 --을 사용했습니다.)




Congratulation!!

Auth_key를 뱉어내길래 이 키로 바로 Auth 메뉴에 넣어줬더니 계속 틀린 값이라고 합니다... reference 글에 나타나있는 대로 뭔가 인코딩이 필요할 것 같아 base64, sha1, md5 등 인코딩을 해서도 날려봤지만 역시 인증이 되지 않았습니다.

한참 고민하던 중, 몇 번 다시 돌려보니 위 팝업창이 뜬 이후 http://suninatas.com/Part_one/web06/view.asp?idx=3&num=3&passcode=wkdrnlwnd 이라는 URL로 요청을 때리는데, 접근 거부 팝업이 뜨는 것을 확인했습니다.

그래서 한 단계가 더 있는 것을 깨닫고, 쿠키를 확인 해 봤더니 쿠키 중 auth_key라는 값이 있었습니다.

이 곳에 우리가 찾아낸 key값을 집어 넣는 듯 합니다.



이 auth_key 값을 suninatastopofworld!로 넣어주었더니 그래도 안되길래... base64, sha1, md5 등 인코딩을 하다 보니 md5 hash 값을 넣어 주었을 때 해당 글이 읽혔습니다.



저는 크롬 확장프로그램 중 하나인 EditThisCookie 툴을 이용하여 쿠키를 변조 해 주었습니다.



접근 거부가 뜨던 웹페이지가 정상적으로 접속이 되고, KeyFinding^^라는 본문 내용을 담고 있는 페이지가 나왔습니다.



소스를 확인 해 보니, 시작 부분에 KEY_HINT가 Rome's First Emperor 라고 주어져있습니다.

찾아보니 로마의 첫 번째 황제는 아우구스투스였습니다.



구글링을 통해 아우구스투스의 라틴 이름을 Auth 메뉴에 박아주니 인증 되는 것을 확인하였습니다.



이번 문제는 게싱이 많이 포함되어 있는 문제였습니다. 힌트가 없었다면 풀이하기 많이 어려웠을 것 같습니다...

'Wargame > SuNiNaTaS' 카테고리의 다른 글

SuNiNaTaS Web Level8  (0) 2016.05.09
SuNiNaTaS Web Level7  (0) 2016.05.09
SuNiNaTaS Web Level5  (0) 2016.05.09
SuNiNaTaS Web Level4  (3) 2016.05.07
SuNiNaTaS Web Level3  (0) 2016.05.06

+ Recent posts