본문 바로가기

IT

Fiddler 사용법

Fiddler는 유틸 프로그램으로써 사용자 컴퓨터의 프록시 서버 역할을 함으로써 패킷을 보고 변경할 수 있다.

 

다운로드 경로 https://www.telerik.com/download/fiddler/fiddler4

 

1. 버프슈트의 Intercept == 피들러의 Breakpoint

HTTP 프록시도구를 사용하는 가장 큰 이유! 존재의 가치!인 버프슈트의 Intercept기능은 피들러에서 Breakpoint기능으로 대응된다.

요청하는 HTTP 패킷을 중간에 프록시 툴이 잡아두고 해당 HTTP Request나 Response를 브라우저에 주기 전에 확인 또는 변조를 할 수 있는 기능이다.

 

직접 피들러를 키고 한번 사용해보자.

 

막 키자마자 HTTP패킷을 잡기 시작했다.(사실 지우고 안깔아서 뭔가 나랑 좀 다를지도... 데헷;;)

아마 정상적으로 설치했다면, 실행시 피들러가 스스로 윈도우의 인터넷 프록시 설정을 일시적으로 바꾼다. ㄷㄷ 겁나 편하지 않음?..(참고로 끌때는 원래 옵션으로 돌려놓는다.)

여튼 이러한 기능을 제공하기에 별도의 브라우저 익스텐션이나 엑티브x같은걸 깔아서 프록시 설정을 바꾸는 귀찮은짓을 안해도 된다는 것!

 

그래 이제 프록시 설정을 자기 스스로하고 지가 HTTP 패킷을 캡쳐하는건 알겠는데 어떻게 껏다 켰다 함?? 분석할 때 이것저것 뜨면 ㅈㄴ 빡치잖아..

 

(요즘 GIF 이미지 넣는게 대세라던데..)

하단의 Capturing 버튼을 키고 끔으로써 패킷 캡쳐를 작동/종료 시킬 수 있다.

 

 

이제 본격적으로 피들러의 Breakpoint기능을 사용해본다. 위의 그림과 같이 피들러의 Breakpoint는 3가지 상태가 있다. Breakpoint는 단축키를 이용해서 키거나 하단의 Breakpoint 상태바를 클릭해서 킬 수도 있다.

 

  1. Before Requests (단축키 F11)
  2. After Responses (단축키 ALT+F11)
  3. Disabled (단축키 SHIFT + F11)

첫번째 상태인 Before Requests는 말그대로 HTTP Request를 보내기전에 Breakpoint를 걸어 Request를 분석하거나 변조하거나 Drop을 할 수 있다. (참고로 버프슈트 처럼 Break 걸었던 Request를 서버로 전송한 뒤에 Response에서 다시 Break를 걸 수 있다.)

두번째 상태인 After Responses는 HTTP Response가 서버에서 돌아와 브라우저에게 가기전에 Fiddler에서 Response 데이터를 조작하거나 Drop 할 수 있다.

세번째 상태인 Disabled는 기본 상태이며, 말그대로 Disabled

 

실제로 Breakpoint 기능을 사용해보기에 Fiddelr에서 제공하는 Sandbox 웹 사이트(http://webdbg.com/sandbox/shop/)에서 테스트해본다.

웹 사이트에서 Before Requests 상태로 만든 뒤 [Check out] 버튼을 눌러보자.

 

버프슈트와 같이 리퀘스트를 일시적으로 잡은 뒤, 해당 리퀘스트의 여러가지 정보를 조회/수정 할 수 있다. 오른쪽 탭의Inspectors의 기능은 따로 설명하지 않겠다. 써보면 금방 알 것이기 때문에 ㅋ_ㅋ

 

피들러를 처음 사용하는 사용자가 가장 많이 헷갈려하는게 Breakpoint를 잡았을때 하나의 요청이 아니라 동시에 보내는 요청은 모든 요청이 한번에 Breakpoint되는 것인데, 이때 상단의 [Go] 버튼을 이용해서 잡았던 브포(아 귀찮아 이제 브포로..)를 한번에 보낼 수 있다. 혹은 리퀘/리스폰스를 다중 선택하고 delete하면 drop시킬 수 도 있다.

 

 

Rules > Automatic breakpoints 메뉴 

 

Before Requests -> 패킷 Requests 전에 breakpoints 을 한다. 파라미터 변조 등을 할 때 사용 
After Response -> 응답을 받은 직 후 
Disabled -> 사용안함 
Ignore Images -> 이미지 요청은 무시 

옵션을 설정한 후 어떠한 요청을 날리게 되면 피들러에 요청이 break 되며 표시된다. 해당  row 를 들어가 Inspectors > WebForms 를 확인해보면 어떠한 요청으로 보내려고 하는지가 테이블 형태로 확인할 수 있다. 중요한 점은 이 요청에 대한 Value 들을 변경 할 수 있다는 것이며 추가도 가능하며, 지우기도 가능하다. 

 

 

2. 버프슈트의 Repeater == 피들러의 Composer

버프슈트의 Repeater는 비슷한 요청을 자주 반복할때 사용된다. 특정 요청을 매번 브라우저에서 클릭클릭하며 브포걸어서 보는 것보단 한번 보냈던 요청을 다시 재전송하면 편하기 때문이다.

 

아까 잡았던 리퀘스트를 마우스 드래그를 통해서 Composer로 보낸다. 이후 내용을 수정도 가능하다. 오른쪽 상단의 Execute를 누르면 반복적인 요청을 보낸다.

Composer의 Options탭에서 다른 설정도 가능하며, Tear off 기능을 이용해서 새창을 띄워놓고 조금 더 편하게 사용이 가능하다.

 

3. 버프슈트의 Match and Replace == 피들러의 AutoResponder

가끔 반복적으로 Response의 내용을 바꿀필요가 생긴다. JS 우회 라던가.. 라던가.. 라던가.. 몰라 여튼 가끔 생김;;

버프슈트에서는 Match and Replace을 사용해서 직접 내용을 바꾸지 않아도 자동으로 바꿀 수 있다. 피들러도 역시 이 기능을 제공하고있다.

 

아까 요청했던 checkout.asp의 response 내용을 변경하고 요청하는 checkout.asp의 내용을 바꿔보겠다.

왼쪽 리스트에서 수정할 checkout.asp을 오른쪽 클릭한뒤 Unlock For Editing을 누르거나 F2 단축키를 누른다.

 

Response의 HTML 내용을 수정한다.

 

Composer때와 같이 AutoResponder로 수정된 패킷을 끌어다 놓고 rules를 키고 다시 한번 checkout.asp에 접속해본다.

 

 

정상적으로 리스폰스가 변경되었다. AutoResponder에 대해 간단히 설명한 예시이고 rule 만드는 방법은 링크에서 좀 더 알아가면 된다. 

 

4. 버프슈트의 Decoder == 피들러의 TextWizard

웹의 특성상 인코드/디코드를 할일이 조금 있다. 버프슈트의 Decoder는 말그대로 인코드된 문자열을 디코드하거나 인코드 하는 기능을 제공한다. 이 기능에 대응하는 기능은 피들러의 TextWizard이다.

 

[Tool - TextWizard] 혹은 [Ctrl -E]를 통해 실행 시킬 수 있다.

 

사용법은 설명 안해줘도... ㅋㅋㅋ;

 

 

별도로 Inspectors 탭에서도 특정 문자열을 TextWizard로 보낼 수 도 있다.

 

 

1. Filter 기능

우리는 분석을 하면서 페이스북을 하거나 유튜브를 본다. 혹은 특정 서비스를 분석할 때 특정 도메인을 거를 필요가 있다.(예를들어 페이스북의 업데이트를 위한 polling 리퀘스트 들..)

그럴때 사용하는것이 필터!

사용법은 따로 설명하지 않겠다..... 그냥 저렇게 쓰면 된당. ㅎ

 

2. Mark 기능

많은 리퀘스트들 중 의미있는 리퀘스트에 Mark 하는 기능이다. 

 

리퀘스트를 클릭한 뒤 단축키 [Ctrl + 1~6 or -] 혹은 오른쪽 클릭 [ Mark - 선택 ]을 통해 특정 리퀘스트에 마킹을 할 수 있다. 많은 내용을 분석 할 때 유용하게 사용 할 수 있따.

 

3. Save 기능

말그대로 저장 기능. 현재 상태를 그대로 저장한다. 물론 마크나 코맨트를 달아놨던 내용이 그대로 저장된다. 분석한 내용을 타인에게 주거나 까먹지 않게 저장해둘 수 있다.

[File - Save] 버튼을 통해 저장할 수 있다.

 

4. HTTPS 설정

Tools -> Fiddler Options -> HTTPS -> Capture HTTPS CONNECTs 옵션만 켜주면 알아서 인증서 설치하고 알아서 MITM하여 HTTPS 패킷도 볼 수 있게 된다.


 

 

캡처된 트래픽이 너무 많을 경우에는 원하는 사이트의 세션을 찾기가 어렵다.

이 때, Edit-Find Session (Ctrl+F) 를 이용한다.

네이버에 관련된 세션을 보기위해 naver.com을 입력하면 네이버에 관련된 세션들만 마킹되어 알아보기 쉽다.

 

세션을 클릭하고 오른쪽 패널의 inspector을 선택하면 요청 값과 응답메시지를 확인할 수 있다.

 

 

비슷한 요청을 반복할 경우가 생길 수 있는데,

특정 요청을 매번 브라우저에서 클릭하는 것 보다 한번 보냈던 요청을 재전송 하는 것이 편하다.

이 때, 사용하는 기능이 Composer이다.

 

반복요청을 하기위한 세션을 드래그하여 가져온 후 값을 변조할 수 있는데,

값을 변조한 후 Execute를 누르면 변조된 값으로 Request 할 수 있다. (단, 버튼을 누른 횟수만큼 생성된다.)

 

나는 3번 눌렀고, TestTest라는 값을 추가해 변조한 3개의 요청이 생겼다.

여러개의 요청을 한번에 실행하기 위해서는 위의 Go 버튼을 누르면 된다.

 

웹에서는 인/디코딩을 하는 경우가 많은데, Fiddler는 인/디코딩 하는 기능도 제공한다.

Tools-TextWizard(Ctrl+E)

 

Testing 이라는 문자열을 Base64로 암호화해보니 아주 잘 된다.

아주 다재다능한 툴이다.

 

또한, 더 대단한 것은 특정 URL에 대한 세션만 확인할 수 있도록 하는 Filter 기능도 제공한다.

 

네이버에 대한 세션만 확인하기 위해 www.naver.com에 대한 필터링을 걸어주었더니,

www.naver.com에 대한 세션만 캡쳐되는 것을 확인할 수 있다.

필터링을 하는 다양한 옵션이 존재하는데, 필요한 옵션을 잘 선택해서 필터링하면 더 유용하다.

 

 

 

Fiddler의 기능중의 하나가 특정 URL 패턴으로 들어오는 request를 가로채서, 특정 Response를 보내게 만드는 기능이 있다.





바로 AutoResponder라는 기능인데, 위의 그림과 같이 설정할 수 있다.

RuleEditor에서 /jsonproxy 라는 URL로 설정해놓으면, 모든 사이트로 가는 Request에 대해 /jsonproxy라는 URI를 가지면 모두 이 Rule을 적용 받는다.