Be myself :: 웹 기본 프로토콜

달력

42024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

웹 기본 프로토콜

web 2014. 5. 4. 01:50

*네이버 블로그에서 쓴 글을 옮기다 보니 그림이 자꾸 깨지네요.. 뭐 일일이 그림 다시 올릴순 있는데 귀찮으니.. 궁금한 사람들은 http://blog.naver.com/rladudwls321/100209246473에서 보시길. 

 


개요

인터넷의 기반이되는 tcp의 3way-hands shaking 의 방식과 http의 프로토콜 작동원리를 파악하고, 관련 워게임을 풀어 보면서 기반을 다져보자. 


테스트 환경 (해당 될시에만)

 

 운영 체제 (OS) : Kali linux

 


 

상세 분석

HTTP(Hypertext Transfer Protocol) 프로토콜은 인터넷상에서 데이터를 주고 받기 위한 서버/클라이언트의  어플리케이션 기반의 프로토콜이다. Tcp/ip 위에서 동작한다.  따라서 http프로토콜을 제대로 알기 위해선 tcp 의 동작 원리를 알아야 한다. 지금부터 tcp동작 원리에 대해 파악해 보자.

 

 

 

 

위 그림은 tcp의 3way handshake과정을 보인다. 참고라 tcp통신과정은 4계층(세션 계층)위에서 일어나는 과정이다. 처음에 클라이언트 가 서버로 seq 값과 함께 SYN 패킷을 보낸다. 그럼 서버는 정상적으로 패킷을 잘 받았다며 SYN패킷과 ACK패킷을 클라이언트가 준 seq값+1(그림에서 1201), 자신이 설정한 seq값(그림에서 4800)과 함께 클라이언트에게 보낸다. 그 이후 클라이언트는 또 서버의 값을 잘 받았다며 seq값을 1 더한 후 ACK패킷과 함께 서버에 보낸다. 글로 표현하니 쫌 복잡하지만, 그림과 함께 이해한다면 그다지 어려운 개념은 아니다.

 

그렇다면 이러한 프로토콜 위에 HTTP프로토콜은 어떻게 동작하는가? 

간단하다. 클라이언트에서 서버로 request요청을 하고 서버는 클라이언트에 대한 반응으로 response 할 뿐이다. 

 

 

좀 더 자세히 설명하자면, 브라우저로 구글의 index페이지를 구글서버로 요청을 하고, 구글의 서버는 브라우저로 구글 페이지를 전송해 준다. 그리고 관련 이미지등이 페이지에 링크되어 있으면 브라우저는 구글서버에 이미지 파일을 요청하게 되고 구글은 파일이 있으면 전송해 준다. 

 

이 때, HTTP방식은 connectless 방식으로 동작하는데 이 방식은 서버에 연결하고, 요청한 응답을 받으면 연결은 끊는 방식이다. 이러한 특징을 stateless라 한다. 이 방식의 장점은 1서버를 여러 클라이언트가 이용할 가능성이 늘어나는 것이다. 서버도 하나의 제한된 자원이기 때문에, 서버에 요청이 많아지면 제한된 요청 외의 것은 응답을 받지 못한다. 단점은, 예를들어 로그인 문제를 들면 앞서 로그인을 했는데 응답을 끊고 연결하면 세션을 유지할 수 없는 문제가 생긴다. 따라서 이러한 단점을 쿠키 등을 이용해 해결하고 있다. 

 

HTTP프로토콜에서 클라이언트가 Request하는 방식은 여러가지가 있다. 요청 데이터는 헤더부분과 바디부분으로 구성된다.

  GET : 정보를 요청하기 위해 사용하는데 관련 인자들의 값이 URL에서 보여 보안상 취약하다.

  POST : GET방식과 달리 데이터의 바디부분에 인자값들이 전달되어 서버에 데이터를 요청하게 된다.

  PUT : 정보를 업데이트하기 위해서 사용한다. 

  DELETE : 정보를 삭제하기 위해서 사용한다. 

  HEAD : (HTTP)헤더 정보만 요청한다. 해당 자원이 존재하는지 혹은 서버에 문제가 없는지를 확인하기 위해서 사용한다. 

  등이 있다.


이러한 개념들을 워게임을 통해 확인하자. http://www.suninatas.com/ 의 16번 문제이다.




suninatas의 멤버를 위해 패스워드를 찾아 달라는 문제다.

다운로드한 파일은 .pcap파일이다. 이것은 네트워크패킷을 잡은 파일이다. 아마 SuNiNaTaS 멤버가 로그인을 시도한 패킷을 잡은것이라 짐작된다. 따라서 문제의 해결책은, 패킷 분석툴로 패킷을 분석하여 GET또는 POST로 서버에 로그인을 요청하는 부분을 잡아내고 패스워드와 아이디를 획득한 다음 키값을 얻으면 될것 같다.  패킷 분석툴은 여러가지가 있겠지만 필자는 WireShark로 덤프해 보겠다. 

 

파일을 오픈한 화면이다. 로그인한 패킷을 확인해야 하므로 tcp위에 작동하는 프로토콜을 포면 된다. 따라서 analyze-displayfilter-tcp 를 선택한다. 

 

 

빨간색 테투리 안을 보면 위에서 보았던 tcp 3-wayhandshake과정이 그대로 나타나 있다. 이제 서버에 로그인을 요청하는 GET또는 POST부분을 찾아 보자.

 

 

사진에서 보이듯이, /member/mem_action.asp 에 POST요청을 하고, 그 데이터의 body 부분에 id와 pass워드 값이 써져 있다. 좀 더 살펴보면 여러번의 로그인 시도가 있음을 확인 할 수 있고 그때마다 로그인 요청을한 id와 pass값을 이용하여 key값을 획득하면 되는 문제다.  풀이 방법을 설명하였으니 나머지는 직접 풀어보기 바란다.



'web' 카테고리의 다른 글

blind injection tool  (0) 2014.12.03
Sqli 기본 패턴  (0) 2014.11.27
DNS서버 zone 설정  (0) 2014.11.25
test page 만들기  (0) 2014.07.20
Posted by flack3r
|