1. Fiddler
Fiddler는 컴퓨터 내부에 프록시 서버를 만들어 HTTP/HTTPS 웹 디버깅을 도와주는 도구다.
우선 HTTP/HTTPS는 요청시 연결이 이루어지는 프로토콜로 서버와 클라이언트의 상태가 독립적이다. (채팅이나 음성통화 게임 등은 연결을 유지한다.)
구조는 다음과 같다.
Request
Request에서
자주 사용하는 요청 메소드로는 GET, POST, PUT, PATCH, DELETE가 있다.
Header : Key:Value 형태로 Key에는 Accept, Cookie, Content-Type, Content-Length, User-Agent 등이 있다.
Body : 일반적으로 GET, POST 방식에서는 URL에 Key:Value 형태로 보내기 때문에 Body에 정보를 실어 보내지 않는다.
POST 방식이 Body에 정보를 실어 보낸다.
Response
Content-Type과 Body : Request(요청)에 따른 Response(응답)의 정보를 알려주는 것이다.
•text/plain, text/html
•application/xml, application/json
•image/png, image/jpg
•audio/mp3, video/mp4
Response에서 application/json 구조를 예로 들면 Header와 Body에 실리는 정보는
Header : Body에 실린 데이터에 대한 정보를 알려준다. 즉, application.
Body : 그 application이 어떤 형태인지를 알려준다. 즉, json.
Fiddler로 보자
이렇게 모든 Request, Response를 잡아줍니다.
이렇게 좌측 창에는 네트워크의 Request, Response를 잡아서 보여주고, 오른쪽에는 상단에 Request, 하단에 Response를 보여줍니다.
응답 코드는 다음과 같은 특성을 보입니다.
여기서 400번대는 클라이언트 오류, 500번대는 서버 오류라는 것에 주목합니다.
2. Burp Suite
2.1 이번에는 Burp Suite를 사용해봅니다.
이 때 중요한 것은 반드시 Fiddler를 꺼야합니다! 왜냐하면 둘 다 프록시 서버를 만들기 때문이죠. 현재 Fiddler가 프록시 서버의 포트를 점유하고 있기 때문에 반드시 프록시 서버를 사용하는 도구는 한 번에 하나만 사용해야합니다.
Burp Suite는 앱을 열기 전 프록시 서버를 설정하는 작업이 필요합니다. (시스템의 프록시 서버를 활성화 하고 포트 번호를 Burp Suite와 동일하게 맞추는 작업 필요.)
사실 이 작업은 Fiddler도 해야합니다. 단, Fiddler는 실행시 자동으로 프록시 서버를 활성화 하고, 종료시 프록시 서버를 종료해주는 것입니다.
우선 설정된 포트 번호를 보기 위해 Burp Suite를 켜서 Proxy -> Options로 갑니다.
(또는 크롬 기준으로는 설정 -> 메인에서 하단으로 내려서 '고급' -> '컴퓨터 프록시 설정 열기')
호스트 주소와 포트 번호를 확인합니다.
System -> Network 에 가서 자신이 현재 사용중인 이더넷 어댑터를 선택 후 '고급'을 눌러줍니다.
'프록시'에서 HTTP, HTTPS에 Burp Suite의 서버 주소와 포트를 입력합니다.
(만약 Burp Suite가 웹의 HTTP, HTTPS를 잡고 있지 못한다면 프록시 서버 설정은 그대로 둔 채 Burp Suite를 껐다 켜준다.)
2.2 Burp Suite 사설 인증서 심어주기.
localhost:8080/cert에 접속하면 자동으로 인증서를 다운받습니다. (위에 호스트 번호가 8080이 아닌 경우 본인 호스트 번호에 맞게 입력합니다.)
윈도우는 아래 접은글 참조
Proxy -> Options에서 아래 빨간색 표시한 부분을 따라서 인증서를 발급합니다
위에서 생성한 인증서를 키체인에 심어준다.
(크롬 기준으로 설정 -> 메인에서 중간 '개인정보 및 보안'에서 '더보기' -> '인증서 관리')
인증서를 추가한 후 크롬을 다시 실행합니다. 이제 HTTPS도 사설 인증서를 신뢰하고 이동이 가능합니다.
인증서가 생성되어 다운로드됩니다. 이제 해당 파일을 실행하면 키체인에 자동으로 등록됩니다.
'PortSwigger'를 검색합니다.
인증서를 열어줍니다.
아래와 같이 인증서를 신뢰하도록 변경합니다.
이제 신뢰하는 인증서로 변경된 것을 확인할 수 있습니다.
2.3 Burp Suite를 사용해보자.
1 ) Proxy -> Intercept
Proxt -> Intercetp로 갑니다.
'Intercept is off'일 경우 프록시 서버를 거쳐 자유롭게 웹서핑이 가능하지만, 'Intercetp is on'일 경우 프록시 서버가 HTTP/HTTPS 통신 과정을 하나하나 붙잡아둡니다. 따라서 'Forward'버튼을 한 번 누를 때마다 다음 통신 단계로 진행이 되고, 통신 과정을 분석하는데 유용합니다.
따라서 Intercept는 필요한 때가 아니면 'off'로 둡니다.
2 ) Target -> Site map -> Intruder
Target -> Intercept 에 가면 우리가 위에 Fiddler에서 보던 것과 동일한 화면을 보여줍니다. 좌측 창에는 네트워크, 우측 창에는 상단과 하단에 Request, Response를 보여줍니다.
이렇게 좌측 창에는 네트워크의 Request, Response를 잡아서 보여주고, 오른쪽에는 상단에 Request, 하단에 Response를 보여줍니다.
Request 중 하나를 잡아 Intruder로 보내봅니다.
Intruder의 색이 밝아집니다. 이제 Intruder로 가봅니다.
$변수$ 가 보입니다. 여기서는 변수가 하나 밖에 없는 것을 알 수 있습니다.
'Payloads' 탭으로 이동해봅니다.
위 스샷처럼 'Numbers'로 바꾸고 '005930'부터 '005940'까지 보내봅니다. 'Start attack'을 누릅니다.
005930부터 005940까지 11개의 주소를 날린게 보입니다. 이 중 하나를 선택하고 Response -> Render를 눌러봅니다.
'005931'은 종목 코드(= 즉 주소값의 변수, 위에서 보았던 $변수$)가 없군요.
정보가 있다면 아무래도 'Length'가 길겠죠? 'Length'가 긴 것을 하나 열어봅니다.
'005940'은 종목 코드(= 주소값의 변수)가 존재하는것이 확인됩니다.
3 ) Target -> Site map -> Repeater
이번에는 Repeater로 보내고 'Repeater' 탭으로 가봅니다.
Raw, Params 등을 직접 입력해서 위에 'Send'버튼을 이용해 바로 Request를 날려볼 수 있습니다. 값을 추가할 수도 있습니다.
그리고 Burp Suite는 켤 때와 마찬가지로 종료시에는 반드시 수동으로 프록시를 꺼줘야합니다!!
'개발자 > 정보보안' 카테고리의 다른 글
HSTS - HTTP Strict Transport Security, 307 Response (0) | 2021.02.01 |
---|---|
HTTP 상태 코드 (웹 응답 코드) (0) | 2020.06.24 |
IP 주소, 서브넷 마스크 (4) | 2020.05.02 |
OWASP & Webgoat - 웹 어플리케이션 보안 (0) | 2020.05.02 |
OSI 7 Layer (계층), TCP/IP Layer (계층) (0) | 2020.04.15 |