경희대학교 장대희 교수님의 정보보호 수업을 기반으로 정리한 글입니다.
HTTP 프로토콜 소개
HTTP(Hypertext Transfer Protocol)란?
HTTP는 인터넷상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜로,
애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동한다.
이러한 HTTP로 보낼 수 있는 데이터는 HTML 문서, 이미지, 동영상, 오디오, 텍스트 문서 등 여러 종류가 있다.

▶ TCP/IP 프로토콜 위에 있는 HTTP
보안 관점에서 HTTP
HTTP는 웹의 기본 프로토콜로, 많은 해킹 기법들이 HTTP를 악용한다. 때문에 HTTP를 이해하면, 웹 애플리케이션에서 발생할 수 있는 다양한 취약점(e.g, SQL Injection, XSS, CSRF 등)을 파악하고 예방할 수 있다.
HTTP 프로토콜을 해킹의 관점에서 분석하는 능력은 네트워크 트래픽을 모니터링하고 분석할 때 매우 유용하여, 이를 통해 의심스러운 활동을 식별하고 공격 시도를 빠르게 감지할 수 있따.
HTTP 해킹 기법을 이해함으로써, 이러한 공격으로부터 웹 애플리케이션을 보고하기 위한 조치(e.g., HTTPS, 입력 검증, 보안 헤더 설정 등)를 적절히 구현할 수 있다.
CSRF 공격

▶ Cross Site Request Forgery의 약자로, 사이트 간 요청 위조 공격 방법
이 방법은 주로 해커들이 어떤 사용자에게 피싱을 하여 링크를 누르게 하고, 링크를 클릭하면 사용자 모르게 사이트의 어떤 기능을 실행하는 것이다. 주로 패스워드를 변경하는 데 사용한다.
이러한 CSRF 공격의 필수 조건은 사용자가 피싱을 당하여 링크를 누르는 시점에,
사이트에 로근인이 되어 있어야 한다는 것이 있다.
※ 피싱: 이메일이나 게시판 등에서 기업 혹은 기관을 사칭하여 사람들을 낚는 공격 기법이다.
실습 환경 구성
Burp Suite
Burp SUite는 웹 애플리케이션 진단 시 사용하는 웹 프록시 툴이며,
프록시란 클라이언트와 서버의 사이에서 통신을 중개하는 서버를 의미한다.
이러한 Burp suite는 브라우저와 웹 서버 간의 요청 및 응답 패킷을 Intercept 하여,
내용을 보거나 변조하여 취약점 점검 및 해킹에 사용한다.

▶ Proxy 역할을 하는 Burp Suite
실습 진행
※ 특정 폴더에서 명령 프롬프트를 실행하길 원하면, 폴더가 있는 파일 탐색기 창에서 cmd를 통해 명령 프롬프트를 실행하면 된다.
문제 설명
주어진 웹 애플리케이션의 특정 취약점을 찾아 숨겨진 Flag를 찾는 문제
문제 풀이 흐름
개발자 도구(F12), Burp Suit 등을 이용하여 html 파일 분석, 캡쳐한 패킷 분석 진행
- 개발자 도구: 웹 개발자들이 웹 페이지를 수정하고 문제의 원인을 쉽게 파악할 수 있도록 도와주는 브라우저의 내장 도구
- Elements(요소) 패널: 웹 페이지의 구조와 스타일을 실시간으로 검사하고 수정할 수 있는 브라우저 개발자 도구(DevTools)의 핵심 기능 중 하나로, 주로 HTML과 CSS를 분석하고 디버깅할 때 사용됨
HTTP0 - Web Source code Auditing

▶ 개발자 도구에서 웹 소스 코드를 확인할 수 있음을 파악하는 문제
결론
노출되는 코드에 중요한 정보를 삽입하지 않도록 주의하는 것이 필요
HTTP1 - Web Source code Auditing

▶ 주석에 민감한 정보가 있을 수 있음을 암시하는 문제
결론
주석에도 민감한 여러 정보가 있을 수 있어 배포 시 유의해야 함
HTTP2 - Custom header with flag

▶ 개발자 도구에서도 HTTP 헤더를 볼 수 있음을 암시하는 문제
결론
노출되는 HTTP Header에 중요한 정보를 삽입하지 않도록 주의하는 것이 필요
HTTP Header
HTTP Header는 클라이언트와 서버가 HTTP 요청(Request)과 응답(Response)을 주고받을 때 사용되는 추가적인 메타데이터 정보를 담고 있는 필드로, 요청 또는 응답에 대한 다양한 정보를 전달하며, 통신하는 두 주체가 데이터를 어떻게 처리해야 할지에 대한 힌트를 제공한다.
※ 메타데이터: 다른 데이터의 구조와 내용을 정의하는 데 사용되는 데이터이다.

▶ Request Header 예시

▶ Response Header 예시
※ Burp Suite 사용법: Proxy -> Intercept on & Open browser 클릭
HTTP3 - Set a cookie with flag


▶ 쿠키 값을 어떻게 확인하는지 연습하는 문제
결론
노출되는 Cookie에 중요한 정보를 삽입하지 않도록 주의하는 것이 필요
Coocke
웹 서버가 클라이언트에 저장하는 작은 데이터 조각이다.
쿠키는 사용자의 상태를 유지하거나 세션을 관리하는 데 사용되며 클라이언트와 서버 간의 상태 정보를 유지하거나 사용자의 활동을 추적하는 데 중요한 역할을 한다. 이때 쿠키를 이용한 세션 관리는, 쿠키가 세션 ID를 저장해 클라이언트가 요청할 때마다 서버에 보내 세션을 식별하고 유지하도록 돕는 방식으로 이루어진다.
- 사용자가 매번 누구인지 물어보면 너무 비효율적인데, 이때 쿠키를 사용하면 인증 과정을 생략하고 계속 통신할 수 있게 된다.

▶ Cookie를 포함하여 HTTP 통신하는 과정 / Request Header 안에 들어있는 Cookie
Base64
Base64란 8비트 2진 데이터(zip파일이나 exe파일 등)을 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식이다.

▶ Base64 색인표 / Base64 디코딩을 도와주는 사이트

▶ Base64 예시 - Base64 인코딩시 input보다 output의 길이가 길어질 수 있음
HTTP4 - User-Agent check for flag

▶ Header에서 'HTTP_USER_AGENT' key 값의 value 값을 'HackerBrowser'로 만들면 flag를 주겠다는 의미
- Request 시 USER_AGENT를 수정하여 보내야 함

▶ HTTP 요청 가로채고 값 변조
- 패킷 탈취 후 값을 변경해 intercept한 데이터를 보내던 곳으로 다시 보내는 것('Forward' 클릭)으로 패킷 조작 가능

▶ Burp Suite의 패킷 탈취 및 변조하는 방법에 대해 알아보는 문제
결론
서버는 Request 패킷의 변조 여부를 확인하거나 막을 방법이 필요
HTTP5 - Flag with GET request

▶ 'showmetheflag' name의 'please' value를 갖는 GET 파라미터를 보내야 함

▶ 방법 1: Burp Suite에서 query parameter를 추가한 후 'Forward' 클릭 (패킷 변조)

▶ 방법 2: URL query parameter에 담아 전송 (쿼리 스트림)
- ?name=value
결론
GET 메소드 사용 시 민감한 정보를 파라미터로 사용하지 않도록 하고, 서버에는 적절한 검증 방식 필요
GET
웹에서 가장 많이 사용되는 HTTP 요청 메서드로, 클라이언트가 서버와 통신을 할 때 주로 사용한다.

▶ url 쿼리 파라미터에 데이터를 담아 전송
POST
웹에서 가장 많이 사용되는 HTTP 요청 메서드로, 클라이언트가 서버와 통신을 할 때 주로 사용한다.

▶ HTTP 메시지의 본문(body)에 담아서 서버로 전송
GET vs POST

▶ GET 방식과 POST 방식의 차이
- GET 방식은 캐싱이 가능하여 브라우저나 프록시 서버가 응답을 저장하고 재사용할 수 있으나, POST 방식은 캐싱되지 않기에 매 요청마다 서버에서 새로 처리해야 함
HTTP6 - Flag with POST request

▶ 'showmetheflag' name의 'please' value를 갖는 POST 파라미터를 보내야 함

▶ Burp Suite에서 body parameter를 추가 & Request attributes의 method 'POST'로 변경한 후 'Forward' 클릭 (패킷 변조)

▶ GET과 POST 동작 방식의 차이점을 알아보는 문제
결론
POST 요청의 데이터도 서버에서 철저히 검증하는 방식 필요
HTTP7 - XOR key for flag

▶ XOR을 통해 플래그가 암호화되어 있음을 확인
- XOR은 키를 알게 되면 플래그를 쉽게 복호화할 수 있음

▶ A ^ B = C 일 때, A ^ C = B 인 특징을 사용해 's' 값과 'key' 값을 xor 연산하여 전송할 파라미터인 'x' 값 계산

▶ 단순한 암호화는 안전하지 않음을 암시하는 문제
결론
단순 XOR은 안전한 암호화가 될 수 없음
※ PHP: 서버에서 실행되어 동적인 웹 페이지를 생성하는 스크립트(인터프리터, 소스 코드 한 줄씩 실행) 언어이다.
XOR
자기 자신과 같은 값을 연산하면 결과 값이 0, 다른 값과 연산하면 결과 값이 1
-> A ^ B = C 일 때, A ^ C = B (A ^ A ^ B = 0 ^ B = B)
참고자료
https://www.youtube.com/watch?v=atNmPzdvPD4
'CS > 정보보호' 카테고리의 다른 글
2. 보안을 위한 네트워크 이론 (2) | 2025.04.04 |
---|---|
해킹 문제 풀이 실습 (http_hack) - 2 (0) | 2025.04.03 |
1. Introduction (0) | 2025.04.02 |