Kali에서 curl로 웹 서비스 살펴보기

WiresharkBeginner
지금 연습하기

소개

웹 테스트는 일반적인 HTTP 동작을 이해하는 것에서 시작합니다. 연결 성공, 상태 코드, 응답 메타데이터, 페이지 내용은 각각 전체 상황의 다른 부분을 제공합니다.

이 실습은 curl로 GET과 HEAD 요청을 살펴볼 수 있도록 로컬 웹 서비스를 제공합니다. 디렉터리 추측, 인젝션, 인증 우회 없이 응답을 읽고 유용한 헤더와 내용을 보존합니다.

HTTP 리소스와 상태 읽기

이 단계에서는 curl로 로컬 HTTP 리소스를 살펴보고 애플리케이션 상태와 연결 성공을 구분합니다.

Kali에 들어가 공유 작업 공간을 선택하세요.

kali
cd /home/labex/project

http://127.0.0.1:8080/scope.txt 같은 URL은 스킴(http), 호스트(127.0.0.1), 선택적 포트(8080), 경로(/scope.txt)를 식별합니다. 호스트와 포트는 서비스를 선택하고 경로는 그 서비스 안의 리소스를 선택합니다.

Curl은 URL에 요청을 보냅니다. 기본 HTTP 메서드는 리소스의 표현을 요청하는 GET입니다. 교육용 페이지를 요청하세요.

curl http://127.0.0.1:8080/

응답 본문은 제목 Kali Training Welcome이 포함된 HTML 페이지입니다. Curl은 본문을 텍스트로 출력하며 웹 브라우저처럼 페이지를 렌더링하지 않습니다.

-i 옵션은 표시되는 출력에 응답 헤더를 포함합니다. 범위 리소스를 확인하세요.

curl -i http://127.0.0.1:8080/scope.txt

상태 줄은 200 OK를 보고하며, 그 뒤에 헤더, 빈 줄, 본문 Authorized local training only.가 나옵니다. HTTP 헤더는 응답을 설명하고 본문은 내용을 담습니다.

제공된 서버에 없는 경로를 요청하세요.

curl -i http://127.0.0.1:8080/missing

짧은 본문과 함께 404 Not Found가 반환됩니다. TCP 연결과 HTTP 통신은 여전히 성공했으며, 애플리케이션이 요청한 리소스가 없다고 보고하는 것입니다. 상태에 따라 실패하는 옵션이 없는 curl은 HTTP 404에도 성공적으로 종료할 수 있습니다. 완료된 요청이 모두 유효한 리소스라고 가정하지 말고 응답 상태를 읽으세요.

-o는 본문을 지정된 파일에 씁니다. -s는 진행 표시를 숨기고 -S는 전송 실패 시 오류를 계속 표시합니다. 둘을 -sS로 결합할 수 있습니다. 범위 텍스트를 저장하세요.

curl -sS -o scope.txt http://127.0.0.1:8080/scope.txt
cat scope.txt

예상 출력:

Authorized local training only.

직접 입력한 설명 대신 응답 본문을 저장했습니다.

응답 헤더를 본문과 분리해 저장하기

이 단계에서는 GET과 HEAD를 비교하고 서버의 헤더와 페이지를 별도 결과물로 보존합니다.

-I 옵션(대문자 I)은 curl에 HEAD 요청을 보내도록 합니다. HEAD는 리소스 본문을 전송하지 않고 응답 메타데이터를 요청합니다.

curl -I http://127.0.0.1:8080/

200 OK, Content-Type: text/html, 교육 사이트 헤더를 찾아보세요. 응답에는 HTML 본문이 없습니다. content-length 헤더는 여전히 해당 GET 본문의 크기를 설명할 수 있습니다.

실제 내용이 필요하면 GET을 사용하세요. Curl의 -D 옵션은 뒤의 파일 이름에 응답 헤더를 쓰고 -o는 다른 파일에 본문을 씁니다.

curl -sS -D response-headers.txt -o page.html http://127.0.0.1:8080/

저장한 메타데이터를 읽으세요.

cat response-headers.txt

성공 상태, HTML 콘텐츠 유형, X-Training-Site: guided-web이 포함되어야 합니다. 서버와 날짜 필드는 달라질 수 있습니다.

본문을 따로 읽으세요.

cat page.html

예상 내용:

<html><title>Kali Training Welcome</title><body>Local practice site.</body></html>

헤더와 본문은 다른 질문에 답합니다. 전자는 서버가 어떻게 응답했는지 설명하고 후자는 요청한 리소스를 포함합니다. 분리해 두면 이후 비교와 텍스트 처리가 쉬워집니다.

요약

URL 구성 요소를 해석하고 GET과 HEAD 요청을 보내고 HTTP 상태와 연결 성공을 구분하고 헤더와 본문을 살펴봤습니다. 이후 분석을 위해 원래 응답 메타데이터와 페이지 내용을 따로 저장했습니다.