[모각코] 6주차
1. 강의 수강
RFC1945 : HTTP(HyperText Transfer Protocol)
HTTP는 WWW에서 사용되고 있는 하이퍼텍스트 문서 전송을 위한 프로토콜
HTTP의 Request Line은
Method SP Request-URI SP HTTP-Version CRLF
GET / HTTP/1.0 과 같이 구성됨
Method의 경우 GET, HEAD, POST 등으로 구성
GET 요청은 정보를 엔티티의 형태로 받기 위해 보냄
HEAD는 HTTP 헤더 정보를 얻기 위해 보내며 엔티티의 body를 전송하지 않음
POST는 서버의 리소스를 변경하거나 추가하는 등의 행위를 위한 요청
HTTP의 Response Line은
HTTP-Version SP Status-Code SP Reason-phrase CRLF
HTTP/1.0 200 OK 과 같이 구성됨
Status-Code는 번호에 따라 다른 의미를 가짐
1xx : Informational - 사용x, 나중에 사용될 것
2xx : Success - 성공적으로 수신됨
3xx : Redirection - 요청을 완료하기 위한 추가 동작이 행해짐
4xx : Client Error - 요청이 잘못됨
5xx : Server Error - 서버가 유효한 요청을 해결하지 못함
GET Response
HTTP/1.0 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 39
<html><body>Hello, World!</body></html>
헤더 부분에 Response Line과 콘텐츠 타입 및 길이,
바디 부분에 데이터를 가진 형태로 구성
HEAD Response
HTTP/1.0 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 39
GET과 다르게 헤더 부분으로만 구성
POST Response
HTTP/1.0 200 OK
Content-Length: 0
데이터가 따로 없이 요청 처리를 알림
2. 문제 풀이
1. babyhttp 7
curl 명령을 이용하여 특정 path로 접속하는 문제이다.
어느 path로 접속해야 하는지 모르는 상태이므로 우선
curl 127.0.0.1:80으로 인덱스 path로 접속한다.
접속하면 path가 틀렸다며 특정 path를 알려주며 error를 발생시킨다.
따라서 해당 path를 url 뒤에 추가하여 접속하면
flag를 획득할 수 있다.
2. babyhttp 8
nc 명령을 이용하여 특정 path로 접속하는 문제이다.
위와 같이 접속 path를 알아내기 위해
nc 127.0.0.1 80으로 접속 후
GET 요청을 인덱스 path로 전달한다.
요청을 보내면 접속해야 할 path 를 에러와 함께 알려준다.
nc 127.0.0.1 80으로 접속 후
GET 요청 부분의 path를 해당 path로 변경하여 요청을 보내면
flag를 획득할 수 있다.
3. babyhttp 9
python 명령을 이용하여 특정 path로 접속하는 문제이다.
path를 알아내기 위해 우선 인덱스 path로 접속한다.
이후 스크립트를 실행시키면 응답으로 에러와 함께 path 정보가 전달된다.
스크립트의 get 메소드 url 뒷 부분에 path를 추가하고
스크립트를 실행시키면 flag를 획득할 수 있다.