이번 실습에서는 HTTP 4XX 에러를 의도적으로 발생시켜서 FLAG를 획득하는 방식으로 웹 해킹의 기본 원리를 학습했다. 핵심은 “정상 요청이 아니라 일부러 이상한 요청을 보내서 서버 반응을 확인하는 것”이다.
언인텐(CTF 등에서 의도하지 않은 풀이)이 있을까? 했는데 3XX, 5XX 에러는 솔브처리하지 않으신다고 했다. 나는 총 6개의 400번대 에러를 찾았다.
- 404 (Not Found)
- 403 (Forbidden)
- 400 (Bad Request)
- 405 (Method Not Allowed)
- 414 (URI Too Long)
- 417 (Expectation Failed)
각 에러는 단순히 발생시키는 게 아니라, 왜 발생하는지 이해하는 게 중요하다.
404 Not Found

해당 사이트 내 존재하지 않는 아무 페이지에 접근하면 에러 404 플래그를 얻을 수 있다.
403 (Forbidden)

개발자 도구를 열어보니 가장 먼저 /img/flag.png가 눈에 띄었다.

일반적인 웹사이트라면 일반 사용자에게 디렉토리 전체를 열람할 수 있게 하지 않고 필요 파일만 명시적으로 접근 허용할 것이다. 따라서 /img 경로는 admin(혹은 인가된 사용자)만 접근할 수 있을 것이라고 판단했다.

실제로 /img 폴더에 접근하니 권한이 없어 403 에러가 발생하였다.
400 (Bad Request)
이후에는 HTTP 요청 자체를 변형하여 다양한 에러를 유도하고자 하였기 때문에,
raw 요청을 다루기 쉬운 curl을 적극적으로 사용하였다.
먼저, HTTP 요청을 일부러 깨진 형태로 보내면 400 Bad Request가 발생할 것이라고 판단하고,
올바르지 않은 POST 요청을 생성해보았다.
HTTP/1.1에서 요청의 첫 줄(Request Line)은 다음과 같은 구조를 반드시 따라야 한다:
METHOD SP REQUEST-TARGET SP HTTP-VERSION CRLF예를 들어, 정상적인 요청은 다음과 같다:
POST / HTTP/1.1그러나 실습에서는 다음과 같은 요청을 전송하였다:
POST /HTTP/1.1이 요청을 서버 입장에서 해석해보면 다음과 같다:
- METHOD →
POST - REQUEST-TARGET →
/HTTP/1.1 - HTTP-VERSION → 존재하지 않음
즉, 공백으로 구분된 토큰이 2개뿐이기 때문에 서버는 요청 라인을 정상적인 HTTP/1.1 형식으로 파싱할 수 없다. 즉, 해당 요청은 HTTP 요청 자체가 프로토콜 규격을 만족하지 못하는 malformed request에 해당한다.
따라서 서버는 요청을 처리하지 못하고 400 Bad Request를 반환하게 된다.

405 (Method Not Allowed)
지금까지 나온 키를 입력하니, URL에 쿼리스트링을 붙여 요청하고 있는 것을 알게 되었다. 이 경우, 기본적으로 GET 메소드를 사용할 것이라고 생각하였다. postman으로 메소드를 delete로 바꿔주었더니 error 405가 발생했다.

414 (URI Too Long)
414 에러를 유도하기 위해, 파이썬을 활용하여 매우 긴 쿼리 스트링을 생성한 뒤 서버로 요청을 전송하였다.
HTTP에서 414 (URI Too Long) 에러는 클라이언트가 전송한 요청 URI의 길이가 서버가 허용하는 한도를 초과했을 때 발생한다.
특히 GET 요청의 경우, 데이터가 URL의 쿼리 스트링에 포함되기 때문에 길이 제한에 직접적인 영향을 받는다.
이를 확인하기 위해 반복 문자열을 이용해 쿼리 스트링을 비정상적으로 길게 생성하고, 해당 URL로 요청을 보냈다.
그 결과 서버는 요청을 정상적으로 처리하지 못하고 414 에러를 반환하였다.

417 (Expectation Failed)
서버에 존재하지 않거나 처리할 수 없는 기대 조건을 Expect 헤더에 포함하여 요청을 전송하면 417 에러를 유도할 수 있다.
HTTP에서 417 (Expectation Failed) 에러는 클라이언트가 Expect 헤더를 통해 특정 조건을 서버에 요구했지만,
서버가 해당 조건을 이해하지 못하거나 충족할 수 없을 때 발생한다.
예를 들어, 존재하지 않는 기대 조건을 다음과 같이 설정하면:
Expect: something-weird서버는 이를 처리할 수 없기 때문에 요청을 거부하고 417 응답을 반환한다.
