웹 해킹 #5 (Burpsuite로 HTTP 요청 조작하기)

 

 

Burpsuite 초기 세팅은 이전 글을 참조해주세요.

 

Proxy 설정이 마무리되면, 클라이언트(브라우저)와 웹 서버가 주고 받는 HTTP 요청과 응답은 Burpsuite를 중간에서 거쳐가게 됩니다. Burpsuite에서 빼돌린 HTTP 메시지를 이용해서 다음과 같은 작업을 수행할 수 있습니다.

  • HTTP 요청 변조
  • Repeater
  • Intruder

 

1. HTTP 요청 가로채기


먼저, Proxy 모드를 활성화시켜 HTTP 메시지를 중간에서 가로챌 수 있도록 합니다. Burpsuite의 Proxy 탭으로 이동해 Intercept is off 버튼을 클릭하면 Intercept is on 모드로 전환됩니다.

 

Intercept가 활성화 된 상태에서는 브라우저에 주소를 검색해도 바로 페이지가 로드되지 않습니다. 아래 스크린샷과 같이 facebook 주소를 검색해도 브라우저 초기 화면에서 멈춰있는 것을 알 수 있죠.

https://facebook.com

 

Burpsuite 앱으로 돌아오면, 방금 전까지 빈 화면이였던 공간에 HTTP 메시지가 기록되어 있을 겁니다. 그 내용을 살펴보면, GET Request가 페이스북(www.facebook.com)이라는 호스트로 향하고 있음을 알 수 있습니다.

 

가로챈 요청을 가지고 즉시 할 수 있는 동작은 2가지가 있습니다. 요청을 브라우저에서 웹 서버로 (또는 그 반대 방향으로) 전달(Forward)하거나, 폐기(Drop)하는 것입니다.

 

Forward 버튼을 한 두번 누르다 보면 브라우저에서 facebook 첫 페이지가 나타나게 됩니다. 클라이언트(브라우저)의 접근 요청이 웹 서버에게 제대로 닿은 셈이죠.

 

다시 Burpsuite로 돌아오면 이번에는 새로운 Request가 기록으로 남겨져 있습니다. 보통 웹사이트를 방문할 때, Request는 하나가 아니라 여러 개가 연이어 발생할 수 있기 때문인데요. 본 예시에서는 기존 로그인 세션이 남아있거나 자동 완성 기능이 켜져 있어, 브라우저에서 추가적인 데이터가 전송이 이뤄지는 경우일 가능성이 높습니다.

 

Forward 버튼을 계속 클릭하다 보면, 어느 순간부터는 더 이상의 Request가 발생하지 않습니다. 웹 클라이언트와 서버 간의 메시지 교환이 잠깐 일어나지 않는 휴지 기간에 도달한 건데요.

 

물론 가만히 있더라도 시간이 지나면 또 다른 Request가 언제든지 올 수 있습니다(물론 Facebook이 아닌 다른 주체가 보내는 것일 수도 있음).

 

2. HTTP 요청 변조하기


이제 HTTP 요청을 마음대로 조작해볼 텐데요, Facebook과 같은 상용 서버로 장난을 쳐보는 건 부담스러우니까, Metasploitable2와 같이 개인이 모의 침투 학습을 위해 사용 가능한 플랫폼을 사전에 준비해둡시다.

 

Metasploitable 설치와 관련해서는 다음 링크를 참조해주세요.

 

웹 해킹 #3 (테스트베드 구축 with Kali/Metasploitable)

1. 준비물웹사이트에 대한 모의 침투 테스트(Penetration testing)를 실습하기 위해 다음의 것들이 필요합니다.Kali Linux: 공격자 역할을 할 PCMetasploitable: 타겟 사이트를 띄울 웹 서버 2. Kali LinuxKali Linux

pyromaniac.me

 

Metasploitable2가 띄워진 IP 주소(제 경우는 192.168.56.102)를 브라우저에 그대로 입력하고 DVWA 페이지로 접근합니다.

 

이제 Burpsuite에서 Intercept 모드를 활성화합니다. DVWA 로그인 페이지에서 Username과 Password에 아무 값(ex., test/test)이나 넣어보고 아래 Login 버튼을 클릭해보세요.

 

Burpsuite에 새로운 Request가 기록될텐데요. 여기서 제일 하단에 위치한 username이나 password와 같은 파라미터 값을 수정할 수 있습니다.

username=test&password=test&Login=Login

 

이 상태에서 Forward 버튼을 여러 차례 눌러보면 DVWA 사이트에 Login Failed라는 메시지가 나타날 겁니다.

 

실제 DVWA 로그인 계정과 패스워드는 admin/password인데요. 아까와 마찬가지로 로그인 화면에 아무 입력 값이나 넣어본 다음에, Burpsuite에서 이를 원래 그 값 그대로 수정하여 Forward를 해봅니다.

username=admin&password=password&Login=Login

 

그러면 이제 DVWA 페이지에 관리자 계정으로 제대로 접속이 된 것을 볼 수 있습니다.

 

3. Repeater를 이용하여 동일한 요청 여러 번 보내기


로그인 테스트를 할 때, HTTP Request를 한 번 Forward하면 그 다음 Requset/Response가 연쇄적으로 발생하면서 지나간 Request가 묻혔습니다.

 

그러나, Burpsuite에서 ‘Repeater’라는 기능을 이용하면 동일한 Request를 원하는 만큼 반복적으로 전송할 수 있습니다. 방금 전 튜토리얼과 마찬가지로 로그인 동작을 수행한 뒤,

 

Burpsuite의 Proxy 탭에서 ActionSend to Repeater 를 선택합니다.

 

상단 ‘Repeater’ 탭을 선택하면 앞서 확인한 Request가 그대로 옮겨져 있을 것입니다. 탭 바로 아래 Send 버튼으로 해당 Request를 여러 번 Forwarding 할 수 있는데요.

 

여기서 잠깐 우측 Response의 내용에 집중을 해보면, HTTP/1.1 302 Found 메시지가 헤더에 걸려있는 것을 발견할 수 있습니다. 302라는 HTTP 응답 코드는 다른 URL로 일시적인 전환(Redirection)이 일어날 것을 의미합니다.

 

Follow redirection 버튼을 클릭하면 전환될 페이지의 HTML 코드를 얻을 수 있습니다.

 

스크롤을 아래로 내려보면 ‘Login Failed’라는 메시지가 눈에 들어올텐데요. 로그인에 실패했을 경우 브라우저에서 표시되는 화면의 내용과 동일한 것임을 알 수 있습니다.

 

4. Intruder로 로그인 페이지 뚫기


Intruder는 Brute-force 공격 테스트를 위해 제공되는 Burpsuite의 기능입니다. 아까 HTTP 요청에서 username 또는 password와 같이 수정할 수 있는 파라미터가 있었는데요. 이 파라미터에 이 값, 저 값 막 대입하여 한 번에 보낼 때 Intruder를 이용할 수 있습니다.

 

가령 password0000부터 9999까지 가능한 모든 4자리 숫자를 자동으로 입력하여 무수히 많은 로그인 요청을 보낼 수 있습니다.

 

Intruder 실습을 위해 Target 탭으로 넘어가 DVWA가 띄워진 호스트(ex., http://192.168.56.102)를 찾습니다. 우측 목록에서 /dvwa.login.php를 찾아 우클릭한 뒤, ‘Send to Intruder’를 선택합니다.

 

이제 상단의 Intruder 탭으로 이동합니다. 중간에는 자주 봤던 로그인 Request 메시지가 보일 겁니다.

 

조작할 파라미터인 password= 부분을 클릭하고, 우측 Add 버튼을 클릭하면 선택한 영역이 초록색으로 표시됩니다.

 

이제 Payloads 탭을 선택하고, Payload settings 항목에서 password로 추정되는 후보를 이것저것 추가해봅니다. 뭐 예를 들면 admin, 1234, password 등, 기본 패스워드 또는 대게 비밀번호를 어렵게 짓기 귀찮아하는 사람들이 사용할만한 것들을 말이죠.

 

비밀번호 후보들을 적당히 추가하였으면, 우측 상단의 Start attack 버튼을 클릭해봅니다. 목록에서 아무 행이나 우클릭한 뒤, Show response in browser를 선택합니다.

 

팝업 창이 나타나면서 어떤 주소가 나타납니다. 이걸 복사하여 브라우저에 검색해봅시다.

 

열린 페이지를 보면 로그인 시도가 총 7번 연달아 일어났고, 앞서 패스워드 후보로 설정한 admin, 1234, asdf1234 등이 순서대로 파라미터로 적용되어 HTTP 요청이 발생하였음을 알 수 있습니다.

 

그 중에서도 실제 패스워드와 일치하는 password만이 입력 파라미터로 주어졌을 때, 로그인 성공 메시지(You have logged in as ‘admin’)가 나타난 것도 알 수 있습니다.

반응형