본문 바로가기
웹 취약점 분석

검증되지 않은 리다이렉트- 페이스북 계정 해킹(시나리오 기반)

by 웹하는빡통 2019. 11. 3.

이번 시간에는 검증되지 않은 리다이렉트 취약점을 이용하여 페이스북 계정 해킹을 해보겠다.

 

설정 시나리오

1. A(공격자)와 B(친구)는 서로 친한 친구 사이이다. A(공격자)씨는 C(A의 여자친구)양과 오랫동안 연인 관계였다. 하지만 어느 순간 B(친구)와C양의 미묘한 관계를 눈친챈 A씨는 B의 페이스북 계정을 탈취하기로 결심한다.

 

2.  검증되지 않은 리다이렉트 취약점이 발생하는 웹사이트 URL주소에 A(공격자)씨가 만든 파밍사이트(가짜 페이스북)을 넣고 B(친구)에게 해당 링크를 보내면서 페이스북에 엄청난 이벤트를 한다고 거짓 정보를 흘린뒤 이메일을 보낸다.

 

3. B(친구)는 A(공격자)가 보낸 링크를 클릭하여 해당 가짜 페이스북으로 자신의 계정 정보를 입력.

 

4. B(친구)의 계정을 탈취한 A(공격자)는 B와 C양이 A(공격자)씨 몰래 3개월 간의 연애를 해온 사실을 알아버린다. 

 

5. 화가난 A는 B의 계정 정보를 수정하고 이런 문구를 남긴다.

" 당신의 계정은 해킹 당하였습니다"

 

※ 실습 환경

1. 칼리 리눅스(공격자 PC)

2. 윈도우(희생자 PC)

3.weeman 설치(칼리 환경)

4. 검증되지 않은 리다이렉트 취약점이 발생하는 사이트(연습용 웹 사이트)

검증되지 않은 리다이렉트란?

공격자가 리다이렉트 되는 페이지의 주소에 있는 파라미터값을 변조하여 공격자가 만든 파밍사이트, 악성코드를 배포하는 사이트로 사용자들을 유도하여 공격하는 기법.

HOW?:사용자들이 신뢰할만한 시이트로 위장하여 게시글 및 메시지,이메일 등 공격자가 만든 파밍사이트로 접속하겠금 클릭을 유도하여 계정 및 민감한 데이터를 탈취한다. 

Ex 신뢰하는 사이트) Naver,Google,Facebook

 

발생원인?

보통 웹사이트에서는 사용자 인증을 필요로 하는 페이지에 접근을 하게되면 사이트는 로그인 페이지로 이동시킨 뒤 다시 이전에 있던 페이지로 돌아가기 위해 Redirect페이지 주소를 받게 되는데 redireat페이지에 대한 적절한 검증을 하지않아 해당 redirect페이지에 대한 파라미터값을 변조하여 취약점이 발생하게 됨.

 

공격 실습

 

1. 칼리 환경에서 weeman을 설치한다.

 

 

2. help명령어를 통하여 옵션을 확인해 보자.

 

3. #1. set url에 자신이 원하는 웹 주소를 입력.

   #2. set action_url "주소"/login 을 통해 해당 사이트에서 특정 액션이 실행 되었을 때                로그인 페이지로 넘어가도록 설정 해주자 그러면 특정 액션이 동작했을 떄 실제 로그인 페        이지로 이동하게 된다.

   #3. 마지막으로 run을 실행시켜 정상적으로 처리가 되었다는 메시지가 뜬것을 알 수 있다. 

 

4. 새 터미널을 열어 ifconfig를 이용하여 공격자 IP주소를 확인한다.

 

4. 그 다음 공격자 PC(칼리) 웹 브라우저에 해당 IP를 입력하면 정상적으로 파밍 사이트(페이스 북)가 동작되는 것을 알 수 있다.

 

 

리다이렉트 취약점이 발생하는 웹사이트 

1. 해당 게시판에서 리다이렉트 취약점이 발생하는 부분이다.

2. 글 쓰기를 누르면 로그인 창으로 페이지가 이동이 되는데 여기서 로그인을 시도해보자. 

 

3. 해당 로그인 창에 계정을 입력하고 요청 패킷을 확인해본 결과 url=index.asp라는 파라미터 값이 있는데 여기가 리다이렉트 취약점이 발생하는 부분이다. 여기서 "index.asp"는 로그인 페이지이다. 

 

4. 이제 URL 창에 "index.asp" 대신 우리가 방금 weeman에서 만든 파밍IP주소를 넣어주자. 

 

 

5. 그런 다음에 이메일에 해당 링크를 넣고 B(친구)에게 메일을 보내자.

 

 

6. B(친구)가 자신의 메일을 열어 클릭을 하는 순간 공격자가 만든 페이스북 사이트로 이동하게 된다.

 

7. B(친구)는 아무것도 모른체 자신의 계정을 입력한다.

 

8. 로그인 창에 계정을 입력하고 로그인을 한 순간 정상적인 페이스북 로그인 페이지로 이동된 것을 알 수 있다.

 

8. 다시 공격자 PC에 가서 확인 해본 결과 B(친구)의 페이스북 계정이 담겨져 있는 것을 알 수 있었다.

 

9. 공격자는 탈취한 B(친구)의 페이스북 계정으로 로그인을 시도 하여 접속에 성공하였다. 

 

 

10. 마지막으로 B(친구) 계정정보를 수정(생략) 후 타임라인에 문구를 남기고 시나리오를 마친다.

 

카카오톡 메신저를 통하여 링크를 보내 해당 링크를 클릭하면 이것 또한 해당 파밍 사이트로 이동할 수 있다.

 

 

소스코드 분석(취약한 코드)

 

자 이제 리다이렉트 취약점이 발생한 사이트에 대한 소스코드 분석을 설명하겠다. 

도대체 왜?? 이런 취약점이 발생하는지 알아보자. 

 

위 소스코드를 보면

로그인 성공을 하게 될때 return_url값에 아무런 검증을 하지않는다. “index.asp?cmd=write”

이라는 url주소로 이동하게되는데 “ return_url= index.asp부분에 악의적인 URL주소를 넣어주면서 해당 URL주소로 이동하게 되는 된다. 그래서 검증되지 않은 리다이렉트 취약점이 발생하는 것이다.

 

좀 더 이해하기 쉽게 JAVA 코드로 비교하여 보자.

 

안전한 리다이렉트 소스코드.

 

 

취약한 리다이렉트 소스코드.

댓글