| 구분 | HTML 엔티티 | HTML 예약어 (Reserved Words) |
|---|---|---|
| 정의 | HTML 문서에서 특수 문자를 안전하게 표현하기 위해 사용하는 특수한 코드 (예: <, &) |
HTML에서 특정한 기능을 가진 미리 정의된 태그나 속성 (예: <html>, <body>, <title>) |
| 목적 | HTML에서 문법적으로 의미 있는 특수 문자가 태그로 해석되지 않도록 안전하게 표현하기 위해 사용 | HTML 문서의 구조를 정의하거나, 특정 역할을 수행하는 태그나 속성을 구분하기 위해 사용 |
| 예시 | < → < (less than), > → > (greater than), & → & (ampersand) |
<html>, <head>, <body>, <title>, <div>, <a> 등 |
| 사용 위치 | 주로 HTML 요소의 내용 내에서 특수 문자를 표현할 때 사용 | HTML 문서 구조 내에서 태그나 속성으로 사용, 문서의 구조와 형태를 정의하기 위해 사용 |
| 역할 | HTML에서 특수 문자를 일반 텍스트처럼 취급하기 위해 사용 (태그 해석을 방지) | HTML에서 특정 구조적 의미를 가지는 요소로서 브라우저에 의해 해석되고 렌더링됨 |
| 사용 예 | < → <, > → >, & → &, " → " |
<html>, <head>, <body>, <h1>, <p>, <div>, <a> 등의 HTML 태그 |
| 주요 역할 | 특수 문자를 태그와 구별하여 화면에 표시하기 위한 보안 및 렌더링 목적으로 사용 | HTML 문서 내에서 구조적 의미와 기능을 부여하여, 브라우저가 페이지를 어떻게 렌더링할지에 대한 기준을 제공 |
| 상대적인 제약 | HTML 문서 내에서 문법적 의미를 갖지 않기 때문에 어디든지 사용할 수 있음 | 미리 정의된 역할을 가지므로, 정해진 위치(예: <body> 내에 <h1>)에만 사용이 가능함 |
| 구분 | HTML 엔티티 (HTML Entity) | HTML 이스케이프 문자 (HTML Escape Characters) |
|---|---|---|
| 정의 | HTML에서 특수 문자를 안전하게 출력하기 위해 사용하는 문자 코드 | 특수 문자를 문자 그대로 출력하기 위해 퍼센트 인코딩 방식으로 변환 |
| 형식 | &로 시작하고 ;로 끝나는 형태 (예: <, >) |
퍼센트 인코딩 (예: %3C, %3E, %26) |
| 주로 사용되는 위치 | HTML 문서 내에서 특수 문자를 안전하게 표시해야 할 때 사용 | URL 파라미터나 HTML 속성 내에서 문자 그대로 표시할 때 사용 |
| 사용 목적 | 특수 문자가 HTML 태그로 해석되지 않도록 안전하게 출력하기 위해 사용 | HTML 코드 내에서 문자가 태그나 속성으로 해석되지 않도록 문자 그대로 출력하기 위해 사용 |
| 예시 | < → <, > → >, & → &, " → " |
%3C → <, %3E → >, %26 → &, %22 → " |
| 주 사용 용도 | HTML 문서 내에서 특수 문자를 텍스트로 안전하게 렌더링 하기 위해 사용 | URL 쿼리 스트링이나 HTML 속성 내에서 특수 문자를 그대로 전달할 때 사용 |
| 구체적인 예시 | <div><script>alert("XSS")</script></div> |
<a href="https://example.com/?q=%3Cscript%3Ealert(1)%3C/script%3E">Click</a> |
| 보안 관련 사용 | XSS 공격 방어: 특수 문자를 HTML 태그로 해석되지 않게 함 | URL이나 HTML 속성 내에서 특수 문자가 해석되지 않도록 보호 |
| 구분 | 메타 문자 (Metacharacters) | HTML 엔티티 (HTML Entities) |
|---|---|---|
| 정의 | 특정 문법에서 특수한 의미를 가지는 문자. 구문을 제어하는 데 사용됨. | HTML에서 특수 문자를 안전하게 표현하기 위한 문자 코드. |
| 주 사용 환경 | 주로 정규 표현식 (Regex), 명령어 셸, 파일 시스템에서 사용 | HTML 문서 내에서 특수 문자를 표현하기 위해 사용 |
| 목적 | 패턴 매칭이나 구문 제어를 위해 사용되며, 주로 문법적 의미를 가짐 | HTML 문서에서 특수 문자가 태그로 해석되지 않도록 안전하게 출력하기 위해 사용 |
| 예시 | *, ., ^, $, ?, [, ], {, } (정규 표현식에서 사용) |
<, >, &, ", ' (HTML 특수문자) |
| 사용 목적 | 특정 문법 내에서 문자를 특별한 방식으로 해석하게 하거나 동작을 수행 | HTML 내에서 특수 문자를 일반 문자로 취급하여 화면에 표시 |
| 주요 기능 | 정규 표현식에서 패턴을 정의하거나 문자열 처리와 관련된 특수한 동작을 정의 | HTML 코드에서 특수 문자가 태그로 인식되지 않도록 변환하여 보안 및 렌더링 목적 |
| 사용 위치 | 정규 표현식, 셸 명령어, 파일 시스템에서 구문 제어 | HTML 코드 내에서 특수 문자를 표현 (예: <, >, &, " 등) |
| 상호작용 여부 | 특정 구문이나 언어에서 문법적 제어가 필요할 때 사용 | HTML 문법 내에서 문자가 태그나 구조에 영향을 주지 않도록 하기 위해 사용 |
| 보안 관련 사용 | 주로 XSS 공격 방어에 직접적인 관계는 없으나, 정규 표현식 등에서 보안 관련 필터링에 사용될 수 있음 | XSS 방어, HTML 필터링, 보안상의 이유로 HTML 코드에서 특수 문자를 안전하게 표시하기 위해 사용 |
-
절대경로 (Absolute Path):
- 파일 시스템에서 루트부터 시작하여 파일의 전체 경로를 지정하는 방식.
- 예:
/home/user/data/file.txt
-
상대경로 (Relative Path):
- 현재 위치를 기준으로 상대적으로 파일의 경로를 지정하는 방식.
- 예:
./data/file.txt
URL에서 사용되는 @, #, ?는 각각 특정한 역할을 가지고 있으며, 리다이렉션과 관련된 여러 용도로 사용.
- **
@**는 URL에서 사용자 인증 정보를 포함하는 구분자. - **
#**는 HTML 문서 내 특정 위치로 이동하는 프래그먼트 식별자. - **
?**는 쿼리 문자열을 시작하는 구분자로, 서버에 데이터를 전달하는 데 사용.
- 용도:
@는 URL에서 사용자 인증 정보를 포함할 때 사용. 주로 사용자 이름과 비밀번호를 포함한 형식에서 사용.
-
URL에서
@는 사용자 이름과 비밀번호를 호스트명 또는 도메인 앞에 배치하여 인증 정보를 전달하는 데 사용. 이 형식은 HTTP 프로토콜이나 FTP와 같은 서비스에서 기본 인증 방식으로 사용. -
하지만 보안 상의 이유로 URL에 비밀번호를 포함하는 방식은 위험할 수 있어, 대부분의 경우에는 현대적인 인증 방식에서는 이 방식을 지양.
http://username:password@www.example.com
- 이 URL에서는
username:password가 사용자 인증 정보를 나타내며,@는 이를 도메인 이름인www.example.com과 구분.
- FTP 접속:
ftp://user:password@ftp.example.com - HTTP Basic Authentication:
http://user:password@site.com
- 용도:
#는 HTML 문서 내 특정 위치로 스크롤을 이동하는 데 사용됩니다. 주로 웹 페이지의 특정 섹션으로 이동할 때 사용.
#뒤에 오는 부분은 **프래그먼트 식별자 (Fragment Identifier)**로, 웹 페이지 내에서 특정 ID를 가진 요소나 위치를 지시.- 프래그먼트 식별자는 페이지의 로딩을 새로 시작하지 않으며, 클라이언트 측에서만 처리. 즉, 서버에는 요청을 보내지 않고 브라우저에서 페이지 내 이동만 수행.
https://www.example.com/about#team
- 위 URL에서
#team은about페이지 내에 있는 **id="team"**이라는 요소로 이동하도록 함. 즉, 사용자는 해당 페이지를 열 때, 팀 섹션으로 바로 스크롤.
- 웹 페이지 내 섹션 이동:
https://example.com/page#section2 - 목차 이동: 긴 문서에서 특정 항목으로 스크롤 이동 (
#section1등)
- 용도:
?는 쿼리 문자열을 URL에 포함시킬 때 사용. 쿼리 문자열은 서버에 데이터를 전달할 때 키-값 쌍으로 전달.
?는 URL에서 쿼리 문자열의 시작을 나타내며, 파라미터를 서버에 전달하는 데 사용. 쿼리 문자열은 URL에 동적 정보를 전달하거나 검색 및 필터링 같은 기능을 구현하는 데 사용됩니다.- 쿼리 문자열은 **
&**로 여러 파라미터를 구분.
https://www.example.com/search?q=keyword&sort=asc
- 이 URL에서
?는 쿼리 문자열의 시작을 나타내며,q=keyword는 검색어를,sort=asc는 정렬 방식을 전달합니다. 서버는 이 데이터를 받아서 검색 결과를 필터링하거나 정렬할 수 있음음.
-
Reflect XSS란?
- GET 요청에 비해 POST 요청에서는 URL에 직접적으로 삽입된 악성 스크립트가 반영되는 방식.
- POST 방식에서는 데이터가 URL에 포함되지 않지만, 요청 본문에서 데이터가 그대로 반환되는 경우에도 XSS 공격이 발생할 수 있음.
-
HTTP.sys란?
- Windows 운영체제에서 HTTP 요청을 처리하는 HTTP 서버.
-
헤더 정보 삭제 이유:
- HTTP.sys에서 일부 민감한 정보(서버 버전 등)를 헤더에 포함하는 것을 방지하여 보안성을 강화함.
HTTP 요청 매개변수는 웹 브라우저에서 서버로 전송되는 데이터. 주로 URL의 쿼리 스트링(query string) 형태로 전달되며, 이 데이터를 통해 클라이언트가 서버에게 특정한 정보를 요청하거나 서버가 클라이언트에게 제공할 리소스를 결정.
HTTP 요청 매개변수는 웹 주소(URL) 뒤에 ?로 시작하여, &로 구분된 키-값 쌍으로 구성. 이러한 매개변수들은 서버에서 처리할 특정 데이터를 제공하거나, 서버의 동작 방식을 결정하는 데 사용.
https://example.com/search?q=python&page=2
위 URL에서 q=python과 page=2는 HTTP 매개변수. 각각 검색어와 페이지 번호를 나타내며, 서버는 이 정보를 이용해 검색 결과와 페이지를 반환.
-
검색 기능:
https://example.com/search?q=python여기서
q=python은 사용자가 검색창에 입력한 값으로, 서버는 이 검색어를 사용해 데이터베이스에서 관련된 정보를 찾아 클라이언트에 반환합니다. -
페이지네이션 (페이지 나누기):
https://example.com/products?page=3&category=electronicspage=3은 현재 페이지 번호,category=electronics는 제품 카테고리를 의미합니다. 서버는 이 매개변수들을 기반으로 적절한 제품 목록을 해당 페이지에 맞게 반환합니다. -
로그인 세션 유지:
https://example.com/dashboard?user_id=123&session_token=abcd1234user_id=123과session_token=abcd1234는 사용자가 로그인한 후 세션을 추적하는 데 사용됩니다.
리다이렉션은 서버가 클라이언트를 다른 URL로 자동으로 이동시키는 과정. 리다이렉션은 주로 웹 페이지의 위치를 변경할 때, 또는 사용자가 요청한 리소스를 다른 위치로 안내할 때 사용.
-
리다이렉션의 과정: 서버는 클라이언트에게
3xx상태 코드(예:301 Moved Permanently,302 Found)와 함께 새로운 URL을 전달. 이때 URL 매개변수가 포함되어 있을 수 있음. -
리다이렉션과 매개변수: 리다이렉션 과정에서도 HTTP 매개변수가 사용될 수 있음. 예를 들어, 사용자가 로그인한 후 특정 페이지로 리다이렉션할 때, 사용자 정보를 포함한 매개변수가 전달.
예시:
HTTP/1.1 302 Found
Location: https://example.com/dashboard?user_id=123&redirected=true
위와 같은 리다이렉션이 발생하면, user_id=123과 redirected=true라는 매개변수가 새로운 URL에 포함. 서버는 이 정보를 받아들여, 사용자가 로그인 후 리다이렉트된 것인지, 또는 다른 추가적인 동작을 해야 하는지 등을 처리 가능.
- 헤더(Header): 요청이나 응답에 대한 추가 정보를 제공.
- 메소드(Method): 서버에서 수행할 작업을 정의.
-
정의: HTTP 요청이나 응답의 일부로, 클라이언트와 서버가 서로 주고받는 메타 데이터를 포함하는 부분입니다.
-
목적: 요청 또는 응답에 대한 추가적인 정보(예: 콘텐츠 타입, 인증 정보 등)를 전달합니다.
-
예시:
Content-Type: 서버가 전송하는 콘텐츠의 유형을 정의합니다.Authorization: 인증 정보를 포함합니다.User-Agent: 클라이언트의 브라우저 및 시스템 정보가 포함됩니다.Accept: 클라이언트가 받아들일 수 있는 콘텐츠 유형을 지정합니다.
예시 HTTP 헤더:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html,application/xhtml+xml-
정의: HTTP 메소드는 클라이언트가 서버에서 원하는 동작을 지정하는 방법입니다.
-
목적: 서버에 요청할 때 어떤 종류의 작업을 하기를 원하는지 정의합니다.
-
주요 메소드:
- GET: 서버에서 리소스를 가져옵니다 (데이터 조회).
- POST: 서버에 데이터를 제출합니다 (주로 양식 제출).
- PUT: 서버에 리소스를 생성하거나 수정합니다.
- DELETE: 서버에서 리소스를 삭제합니다.
- PATCH: 리소스의 일부만 수정합니다.
- OPTIONS: 서버가 지원하는 HTTP 메소드와 옵션을 확인합니다.
- HEAD: 서버에서 리소스의 헤더 정보만 가져옵니다 (데이터 조회, 본문 제외).
예시 HTTP 메소드:
GET /index.html HTTP/1.1
POST /submit-form HTTP/1.1
PUT /update-data HTTP/1.1
DELETE /delete-item HTTP/1.1- 헥사(16진수) 숫자엔티티:
https://www.naver.com
- 십진수 숫자엔티티:
https://www.naver.com
설명:
%3A→:→:또는:%2F→/→/또는/
-
싱글쿼터 (Single Quote)와 백틱 (Backtick):
- 싱글쿼터 (''): 문자열을 구분하는 기호로 사용.
- 백틱 (`): 템플릿 리터럴에서 변수와 표현식을 문자열에 삽입할 때 사용 (JavaScript에서).
- 즉, 백틱은 HTML에서 스크립트 코드 내에서 변수나 표현식을 사용할 수 있도록 해주는 특수한 문법. 그러나 XSS 공격에서는 이러한 특성을 악용하여 스크립트를 삽입하거나 우회할 수 있음.
-
백틱 사용 XSS 예시:
<script>alert`xss`</script> -
악성 스크립트 삽입 예시:
“><script>alert`xss`</script>
-
템플릿 리터럴에서 문자열의 끝을 나타내는 백틱이 있을 경우
`\`<script>alert('XSS')</script>\``
-
SQL Injection 유형:
- Boolean Base: SQL 쿼리에서 논리적 참/거짓 값을 이용하여 데이터를 추출하는 기법.
- Time Base: SQL 쿼리에서 시간 차이를 이용해 데이터베이스 정보를 추출.
- UNION Base:
UNION쿼리를 이용하여 다른 테이블 데이터를 결합해 추출. - Error Base: SQL 오류 메시지를 통해 데이터베이스 정보를 유추하는 기법.
-
SQL Injection의 존재 여부 확인 방법:
- 입력 값에 특수 문자를 삽입하여 예상치 못한 오류 메시지가 반환되는지 확인.
-
요청 메소드가 없을 때 HTTP API 버전 정보 누출 이유:
- 서버가 요청 메소드(GET, POST 등)와 상관없이 API 버전 정보를 응답에 포함할 수 있는 설정이 되어 있는 경우.
-
정상적인 요청일 때 Server 헤더 값에서 IIS 버전 정보가 누출되는 이유:
- IIS 서버가 기본적으로 버전 정보를 응답 헤더에 포함하는 설정이 되어 있어, 이를 통해 공격자가 서버 버전 정보를 알 수 있음.
- 해결 방법: IIS 설정 내에서 헤더 정보 삭제 또는 수정.
C2 서버는 Command and Control Server의 약어로, 해커나 공격자가 감염된 시스템을 원격으로 제어하고 명령을 전달하는 서버다. 보통 봇넷이나 악성 코드, 랜섬웨어 등에서 사용되며, 공격자는 이 서버를 통해 **감염된 시스템(봇)**에 명령을 보내 특정 동작을 수행.
- 명령 전달: 공격자는 C2 서버를 통해 여러 감염된 시스템에 명령을 내려 DDoS 공격, 데이터 탈취, 파일 암호화 등의 악성 작업을 수행.
- 감염된 시스템 제어: C2 서버는 봇(감염된 시스템)과 지속적으로 연결되어, 봇에게 명령을 전달하고 봇의 상태를 실시간으로 추적.
- 정보 수집: C2 서버는 감염된 시스템에서 민감한 정보나 데이터를 수집하여 공격자가 이를 활용할 수 있도록 함.
- 봇넷에서의 사용: C2 서버는 봇넷의 중앙 제어 서버 역할을 합니다. 봇들은 주기적으로 C2 서버와 연결하여 명령을 받고, 서버는 여러 대의 봇을 동시에 제어할 수 있음.
- 악성 코드 및 랜섬웨어에서의 사용: 악성 코드나 랜섬웨어는 C2 서버와 통신하여 암호화 키를 받거나, 공격자의 명령을 실행.