728x90
반응형

웹 해킹을 공부하려면 먼저 웹이 정상적으로 어떻게 동작하는지 알아야 한다.

많은 초보자가 SQL Injection, XSS, CSRF 같은 취약점 이름부터 외우기 시작하지만, 실제로는 그보다 먼저 이해해야 할 것이 있다.

웹 브라우저가 서버에 어떻게 요청을 보내는지, 서버는 어떤 방식으로 응답하는지, 사용자는 왜 도메인 이름을 입력하고 서버는 왜 IP 주소를 사용하는지, 그리고 HTML과 JavaScript는 어디에서 실행되는지를 이해해야 한다.

웹 해킹은 결국 정상적인 웹 동작의 틈을 이해하는 공부다.

따라서 첫 번째 목표는 단순하다.

브라우저에 주소를 입력한 순간부터 웹페이지가 화면에 표시될 때까지 어떤 일이 일어나는지 설명할 수 있어야 한다.

이 흐름이 잡히면 이후 HTTP, Cookie, Session, 인증, 인가, API, SQL Injection, XSS 같은 주제들이 서로 연결되기 시작한다.


1. 웹이란 무엇인가

웹은 인터넷 위에서 동작하는 서비스 중 하나다.

여기서 먼저 구분해야 할 것이 있다.

인터넷과 웹은 같은 것이 아니다.

인터넷은 여러 네트워크와 장치가 서로 연결되어 통신할 수 있게 만든 거대한 네트워크 인프라다.

반면 웹은 그 인터넷을 이용해 문서와 서비스를 주고받는 하나의 시스템이다.

인터넷 위에는 웹 말고도 여러 서비스가 존재한다.

예를 들어:

웹
이메일
SSH
FTP
게임 서버
메신저
DNS

같은 것들이 모두 인터넷을 이용할 수 있다.

즉:

Internet
↓
여러 서비스 중 하나
↓
Web

이라고 이해하면 된다.

웹은 주로 HTTP 또는 HTTPS라는 프로토콜을 이용해 동작한다.


2. 웹의 가장 기본적인 구조

웹은 크게 두 부분으로 나누어 생각할 수 있다.

Client
Server

Client

Client는 서비스를 요청하는 쪽이다.

웹에서는 보통 브라우저가 Client 역할을 한다.

대표적인 브라우저는 다음과 같다.

Chrome
Edge
Firefox
Safari

사용자가 브라우저에 주소를 입력하면 브라우저가 서버에 요청을 보낸다.


Server

Server는 요청을 받아 처리하고 결과를 돌려주는 쪽이다.

예를 들어 사용자가 쇼핑몰에 접속한다면 서버는 다음과 같은 일을 할 수 있다.

상품 목록 조회
로그인 처리
주문 정보 저장
회원 정보 조회
결제 요청 처리

그리고 처리한 결과를 Client에게 응답한다.

가장 기본적인 구조는 다음과 같다.

Client
브라우저

↓ Request

Server

↓ Response

Client
브라우저

이 Request와 Response 구조가 앞으로 웹 해킹 공부의 핵심이 된다.


3. 브라우저는 단순히 화면을 보여주는 프로그램이 아니다

브라우저를 단순히 인터넷 페이지를 보는 프로그램이라고 생각하기 쉽다.

하지만 브라우저는 실제로 굉장히 많은 일을 한다.

예를 들어 사용자가:

https://example.com

을 입력하면 브라우저는 내부적으로 여러 작업을 수행한다.

대표적으로:

도메인 이름 확인
DNS 조회
서버와 네트워크 연결
HTTPS 연결
HTTP 요청 생성
서버 응답 수신
HTML 분석
CSS 적용
JavaScript 실행
화면 렌더링
Cookie 저장
추가 리소스 요청

같은 작업들이 이어진다.

즉 우리가 화면에서 보는 웹페이지는 수많은 통신과 처리의 결과다.


4. URL이란 무엇인가

브라우저에 입력하는 웹 주소를 보통 URL이라고 부른다.

URL은 Uniform Resource Locator의 약자다.

예를 들어:

https://example.com/products?id=10

이라는 주소가 있다고 해보자.

이 URL은 여러 부분으로 나누어 볼 수 있다.

https://example.com/products?id=10

여기에서:

https

는 Protocol 또는 Scheme이다.

example.com

은 Host 또는 Domain Name이다.

/products

는 Path다.

?id=10

은 Query String이다.

이 구조는 앞으로 웹 해킹에서 매우 중요하게 사용된다.


5. Scheme

URL의 가장 앞부분은 어떤 통신 방식을 사용할지를 나타낸다.

예:

http://
https://

웹에서는 대표적으로 HTTP와 HTTPS가 사용된다.

HTTP는 웹에서 데이터를 주고받기 위한 기본 프로토콜이고, HTTPS는 HTTP 통신을 암호화해서 보호하는 방식이다.

예:

http://example.com

과

https://example.com

은 통신 방식이 다르다.

현대 웹에서는 대부분 HTTPS를 사용한다.


6. Domain Name

사람은 숫자로 이루어진 IP 주소보다 이름을 기억하기 쉽다.

그래서 웹에서는 Domain Name을 사용한다.

예:

google.com
naver.com
example.com

하지만 네트워크 통신은 최종적으로 IP 주소를 사용한다.

따라서 브라우저는 먼저 Domain Name에 해당하는 IP Address를 알아내야 한다.

이 과정에서 DNS가 사용된다.


7. DNS는 왜 필요한가

사용자가:

example.com

에 접속한다고 가정해보자.

브라우저는 서버의 실제 IP Address를 알아야 한다.

그래서 DNS에게 질문한다.

example.com의 IP 주소가 무엇인가?

DNS는 해당 Domain과 연결된 IP Address를 알려준다.

구조를 단순화하면:

사용자
↓
example.com 입력
↓
DNS 조회
↓
IP Address 확인
↓
해당 서버와 통신

이전 정보보안 공부에서 DNS를 배웠다면, 이제 웹과 연결해서 이해할 수 있다.


8. 브라우저가 서버 IP를 알아냈다면

DNS를 통해 서버 IP를 알아냈다고 해보자.

예:

example.com
↓
203.0.113.10

이제 브라우저는 이 IP 주소의 서버와 네트워크 연결을 시도한다.

HTTPS 웹사이트라면 보통 TCP 443 Port를 사용한다.

따라서 개념적으로는:

203.0.113.10:443

과 통신하는 것이다.

여기서:

203.0.113.10

은 Server IP,

443

은 Port다.


9. Port가 필요한 이유

하나의 서버는 여러 서비스를 동시에 운영할 수 있다.

예를 들어 하나의 컴퓨터에서:

웹 서버
SSH 서버
데이터베이스
DNS

가 동시에 실행될 수도 있다.

그러면 IP 주소만으로는 어떤 서비스와 통신해야 하는지 구분하기 어렵다.

그래서 Port 번호를 사용한다.

대표적으로:

80 → HTTP
443 → HTTPS
22 → SSH

같은 Port를 자주 볼 수 있다.

즉:

IP
→ 어떤 컴퓨터인가

Port
→ 그 컴퓨터의 어떤 서비스인가

라고 이해하면 된다.


10. 웹 서버란 무엇인가

브라우저가 요청을 보내는 대상은 웹 서버다.

웹 서버는 HTTP 요청을 받아 적절한 응답을 돌려주는 프로그램이다.

대표적으로:

Apache
Nginx
Microsoft IIS

같은 웹 서버 소프트웨어가 있다.

하지만 현대 웹 서비스에서는 단순히 웹 서버 하나만 있는 경우보다 여러 구성요소가 함께 동작하는 경우가 많다.

예를 들어:

Browser
↓
Web Server
↓
Application Server
↓
Database

같은 구조가 매우 흔하다.


11. Web Server와 Application Server

초보자가 가장 헷갈리는 부분 중 하나다.

Web Server와 Application Server는 역할이 조금 다르다.

Web Server

정적인 파일을 제공하거나 HTTP 요청을 받아 뒤쪽 서버로 전달하는 역할을 할 수 있다.

예:

HTML
CSS
JavaScript
Image

같은 파일을 제공할 수 있다.


Application Server

실제 서비스 로직을 처리한다.

예를 들어:

로그인 정보 확인
회원가입 처리
게시글 작성
상품 주문
권한 확인

같은 작업이다.

현대 웹에서는 이 둘의 역할이 겹치기도 하지만 개념적으로 구분해두면 좋다.


12. Database는 왜 필요한가

웹 서비스는 데이터를 저장해야 한다.

예를 들어 쇼핑몰이라면 다음 정보가 필요하다.

회원 정보
상품 정보
주문 정보
배송 정보
결제 기록

이러한 정보를 저장하고 조회하기 위해 Database를 사용한다.

대표적인 Database로는:

MySQL
PostgreSQL
Microsoft SQL Server
Oracle
MongoDB

등이 있다.

웹 애플리케이션은 Database에 질문을 보내고 결과를 받아 사용자에게 보여준다.


13. 전체 서버 구조

웹 서비스를 아주 단순화하면 다음과 같다.

Browser
↓
Web Server
↓
Application
↓
Database

사용자가 로그인한다고 생각해보자.

브라우저가 서버에 ID와 Password를 보낸다.

Browser
↓
Login Request
↓
Application Server

Application은 Database에서 해당 사용자를 찾는다.

Application
↓
Database 조회

그리고 비밀번호가 올바른지 확인한다.

결과에 따라:

Login Success

또는:

Login Failed

응답을 브라우저에 보낸다.

이 구조가 앞으로 SQL Injection, Authentication Bypass 같은 취약점을 이해하는 기반이 된다.


14. 정적 웹과 동적 웹

웹페이지는 크게 정적인 형태와 동적인 형태로 생각할 수 있다.

Static Content

미리 만들어진 파일을 그대로 제공한다.

예:

HTML
CSS
Image

사용자가 누구든 같은 파일을 받는다.


Dynamic Content

사용자의 요청이나 데이터에 따라 결과가 달라진다.

예를 들어:

내 프로필
내 주문 목록
검색 결과
게시판
추천 상품

같은 페이지는 사용자마다 내용이 다를 수 있다.

Application Server와 Database가 이런 동적 처리를 담당한다.


15. HTML

HTML은 웹페이지의 구조를 표현한다.

HTML은 HyperText Markup Language의 약자다.

예를 들어:

<h1>Hello</h1>
<p>Welcome</p>

같은 형태다.

브라우저는 서버에서 HTML을 받아 해석하고 화면을 구성한다.

HTML은 프로그램 언어라기보다는 문서 구조를 표현하는 Markup Language다.


16. CSS

CSS는 웹페이지의 디자인을 담당한다.

CSS는 Cascading Style Sheets의 약자다.

예를 들어:

h1 {
    font-size: 30px;
}

처럼 HTML 요소의 크기, 위치, 글꼴, 배치 등을 지정한다.

구조를 아주 단순화하면:

HTML
→ 구조

CSS
→ 디자인

이다.


17. JavaScript

JavaScript는 웹페이지에 동작을 추가한다.

예를 들어:

버튼 클릭
팝업 표시
API 요청
입력값 검사
화면 내용 변경

같은 기능을 구현할 수 있다.

JavaScript는 브라우저 안에서 실행될 수 있다.

웹 해킹에서 JavaScript가 중요한 이유는 매우 크다.

특히:

XSS
DOM
API 요청
Client-side Validation
Token
Local Storage

같은 개념들이 JavaScript와 연결된다.


18. Frontend란

사용자가 브라우저에서 보고 상호작용하는 영역을 흔히 Frontend라고 부른다.

Frontend에서 주로 사용되는 기술은:

HTML
CSS
JavaScript

다.

현대 웹에서는 React, Vue, Angular 같은 Framework도 많이 사용된다.

Frontend는 사용자에게 화면을 보여주고 사용자의 입력을 서버에 전달한다.


19. Backend란

Backend는 서버 쪽에서 동작하는 영역이다.

예를 들어:

로그인 처리
권한 검사
데이터 조회
데이터 저장
API 제공

같은 작업을 한다.

Backend에서는 다양한 언어와 Framework가 사용된다.

예:

Java
Spring
Python
Django
Flask
Node.js
PHP
.NET
Go

웹 해킹에서는 Backend 로직을 이해하는 것이 매우 중요하다.

대부분의 심각한 취약점은 서버가 사용자의 요청을 어떻게 처리하는지와 관련되어 있다.


20. Client-side와 Server-side

이 두 개념은 웹 해킹에서 매우 중요하다.

Client-side

사용자의 브라우저에서 실행되는 영역이다.

예:

HTML
CSS
JavaScript

브라우저 개발자 도구를 통해 내용을 볼 수도 있다.


Server-side

서버에서 실행되는 영역이다.

예:

Database Query
Authentication
Authorization
Business Logic

사용자는 서버 내부 코드를 직접 볼 수 없는 경우가 일반적이다.


21. 중요한 보안 원칙

여기서 아주 중요한 보안 원칙이 하나 나온다.

Client는 신뢰할 수 없다.

왜냐하면 사용자는 자신의 브라우저에서 보내는 요청을 수정할 수 있기 때문이다.

예를 들어 웹페이지에서 가격을:

10000원

으로 표시한다고 해보자.

사용자가 브라우저 개발자 도구에서 화면을:

100원

으로 바꿀 수도 있다.

하지만 단순히 화면을 바꾸는 것 자체는 서버 데이터가 바뀐 것이 아니다.

문제는 서버가 사용자가 보내는 값을 그대로 신뢰할 때 발생한다.

예를 들어 주문 요청이:

price=10000

형태로 서버에 전송되고 서버가 이를 검증하지 않는다면 사용자가:

price=100

으로 수정할 가능성이 생긴다.

그래서 중요한 보안 원칙은:

중요한 검증은 Server-side에서 해야 한다.

이다.

이 원칙은 앞으로 웹 해킹 전반에 반복해서 등장한다.


22. 브라우저에 주소를 입력했을 때 전체 과정

이제 전체 과정을 연결해보자.

사용자가 브라우저에 다음 주소를 입력했다.

https://example.com/products

먼저 브라우저는 URL을 분석한다.

Scheme
→ HTTPS

Domain
→ example.com

Path
→ /products

그다음 DNS 조회를 한다.

example.com
↓
DNS
↓
Server IP

IP 주소를 얻으면 서버와 연결한다.

Browser
↓
TCP Connection
↓
Server

HTTPS라면 암호화 연결 과정도 진행된다.

그 후 HTTP 요청을 보낸다.

예:

GET /products

서버는 요청을 처리한다.

필요하다면 Application Server가 Database를 조회한다.

Web Server
↓
Application
↓
Database

결과를 다시 HTTP Response로 보낸다.

Server
↓
HTTP Response
↓
Browser

브라우저는 응답받은 HTML을 분석한다.

그리고 필요한 CSS와 JavaScript, Image 등을 추가로 요청한다.

마지막으로 화면을 렌더링한다.

전체 흐름은 다음과 같다.

사용자 URL 입력

↓

DNS 조회

↓

Server IP 확인

↓

Server와 연결

↓

HTTP Request

↓

Web / Application Server 처리

↓

Database 조회 가능

↓

HTTP Response

↓

HTML / CSS / JS 수신

↓

Browser Rendering

↓

웹페이지 표시

이 흐름이 웹 해킹에서 가장 기본적인 그림이다.


23. Request와 Response

웹은 대부분 요청과 응답의 반복으로 동작한다.

Client가 Request를 보낸다.

Client
↓
Request
↓
Server

Server는 Response를 보낸다.

Server
↓
Response
↓
Client

예를 들어 사용자가 게시판을 연다.

게시판 보여줘

라는 요청을 서버에 보낸다.

서버는 Database에서 게시글을 조회하고 결과를 응답한다.

사용자가 글을 작성하면 또 새로운 Request가 발생한다.

즉 웹사이트를 사용하는 동안 수많은 Request와 Response가 계속 발생한다.

이후 웹 해킹에서는 거의 항상 이 질문을 하게 된다.

어떤 Request를 보냈는가?

사용자가 어떤 값을 변경할 수 있는가?

Server는 이 값을 검증하는가?

Response에는 어떤 정보가 포함되어 있는가?

24. 개발자 도구

웹 해킹을 공부하면 브라우저의 Developer Tools를 자주 사용한다.

Chrome이나 Edge에서 보통:

F12

를 누르면 열 수 있다.

여기에는 여러 기능이 있다.

대표적으로:

Elements
Console
Network
Application
Sources

가 있다.


25. Elements

Elements에서는 현재 웹페이지의 HTML 구조를 확인할 수 있다.

웹페이지에 표시된 글자나 버튼의 HTML을 볼 수 있다.

내용을 임시로 변경할 수도 있다.

다만 여기서 변경한 것은 대부분 내 브라우저 화면에만 영향을 준다.

서버 데이터가 변경된 것은 아니다.

이 차이는 매우 중요하다.


26. Network Tab

웹 해킹 공부에서 가장 중요한 기능 중 하나다.

Network Tab에서는 브라우저가 서버와 주고받는 HTTP 요청을 볼 수 있다.

예를 들어 페이지를 새로고침하면:

document
css
js
image
api

등 수많은 요청이 나타날 수 있다.

각 요청을 클릭하면:

URL
Method
Status Code
Request Headers
Response Headers
Request Body
Response Body

같은 정보를 볼 수 있다.

앞으로 HTTP 공부를 할 때 계속 사용하게 된다.


27. Application Tab

Application Tab에서는 웹 브라우저가 저장하고 있는 여러 데이터를 확인할 수 있다.

대표적으로:

Cookies
Local Storage
Session Storage

등을 볼 수 있다.

이것들은 이후 로그인, Session, Token과 연결된다.


28. 웹 해킹은 무엇을 보는 공부인가

웹 해킹은 무작정 서버를 공격하는 공부가 아니다.

핵심은 Client와 Server 사이의 신뢰 관계를 분석하는 것이다.

예를 들어 정상적인 사용자는 다음 요청을 보낸다고 하자.

/user?id=100

서버는 ID 100 사용자의 정보를 보여준다.

그렇다면 공격자는 생각한다.

id=101로 바꾸면 어떻게 될까?

이때 서버가 권한을 제대로 확인하지 않으면 다른 사용자의 데이터가 노출될 수 있다.

이것이 나중에 배우게 될 IDOR 같은 취약점과 연결된다.

즉 웹 해킹의 사고방식은 다음과 같다.

정상 Request 확인

↓

사용자가 변경 가능한 값 찾기

↓

값 변경

↓

Server가 어떻게 반응하는지 확인

↓

검증 또는 권한 통제가 제대로 되어 있는지 분석

29. Client는 조작할 수 있다

웹 해킹에서 가장 중요한 전제 중 하나는:

사용자가 보내는 데이터는 조작될 수 있다.

라는 점이다.

웹페이지에서:

<input type="hidden" value="admin">

처럼 숨겨진 값이 있어도 사용자는 개발자 도구를 이용해 볼 수 있다.

JavaScript에서:

if (user == "admin")

같은 검사를 하더라도 사용자는 JavaScript를 분석하거나 수정할 수 있다.

Request에:

role=user

가 포함되어 있다면:

role=admin

으로 변경하려는 시도를 할 수도 있다.

따라서 서버는 Client가 보내는 값을 그대로 신뢰하면 안 된다.


30. 웹 해킹의 핵심 질문

앞으로 모든 취약점을 공부할 때 아래 질문을 계속 반복하게 된다.

사용자가 무엇을 입력할 수 있는가?

어떤 Request가 서버로 전달되는가?

사용자가 Request를 수정할 수 있는가?

Server는 입력값을 검증하는가?

Server는 사용자의 권한을 확인하는가?

Response에 필요 이상의 정보가 포함되어 있는가?

Client-side 검증만 존재하는가?

Server-side 검증도 존재하는가?

취약점 이름은 달라도 결국 많은 웹 취약점이 이 질문들에서 출발한다.


31. 정상 웹 구조와 공격 지점

웹 구조를 다시 보자.

Browser
↓
Web Server
↓
Application
↓
Database

이 각각의 위치에서 서로 다른 문제가 발생할 수 있다.

예를 들어 Browser와 관련해서는:

XSS
CSRF

같은 문제가 나타날 수 있다.

Application Logic에서는:

Authentication Bypass
Authorization Failure
IDOR

같은 문제가 발생할 수 있다.

Database와 연결되는 과정에서는:

SQL Injection

같은 문제가 발생할 수 있다.

Server가 외부 시스템과 통신하는 과정에서는:

SSRF

같은 취약점이 생길 수 있다.

파일을 처리하는 과정에서는:

File Upload
Path Traversal

같은 취약점이 발생할 수 있다.

즉 취약점은 무작위로 존재하는 것이 아니라 웹 시스템의 각 구성 요소와 데이터 흐름에서 발생한다.


32. 앞으로 HTTP를 깊게 공부해야 하는 이유

웹 해킹에서는 HTTP를 제대로 알아야 한다.

왜냐하면 웹 해킹 도구들이 결국 HTTP Request를 보고 수정하는 도구이기 때문이다.

예를 들어 Burp Suite 같은 도구를 사용하면 다음과 같은 Request를 직접 보게 된다.

GET /account?id=100 HTTP/1.1
Host: example.com
Cookie: session=abcdef

처음에는 낯설어 보이지만 HTTP를 이해하면 다음처럼 읽을 수 있다.

/account 요청

id=100 전달

example.com 서버

session Cookie 전달

그리고 공격자는 여기서:

id=100

을:

id=101

로 바꾸거나,

Cookie를 변경하거나,

Header를 추가하거나,

Body를 변경하면서 서버의 동작을 분석한다.

즉 HTTP를 읽을 수 있다는 것은 웹 해킹의 기본 언어를 읽을 수 있다는 뜻이다.


33. 웹페이지와 웹 애플리케이션의 차이

예전 웹은 주로 정보를 보여주는 정적인 페이지가 많았다.

현대 웹은 단순한 페이지라기보다 프로그램에 가깝다.

예를 들어:

YouTube
Netflix
Gmail
Instagram
온라인 쇼핑몰
은행 서비스
회사 ERP

같은 서비스는 모두 복잡한 웹 애플리케이션이다.

사용자 입력을 받고, Database와 통신하고, 권한을 관리하며, API를 호출한다.

그래서 현대 웹 보안에서는 단순 HTML보다:

HTTP
API
Authentication
Authorization
Session
Token
Database
Business Logic

을 이해하는 것이 훨씬 중요하다.


34. 웹 해킹에서 가장 중요한 두 개념

앞으로 계속 반복되는 두 가지 개념이 있다.

Authentication

Authentication은:

당신이 누구인가?

를 확인하는 과정이다.

예:

ID
Password
OTP
Biometric

Authorization

Authorization은:

당신이 이 작업을 할 권한이 있는가?

를 확인하는 과정이다.

예를 들어 일반 직원과 관리자가 있다고 해보자.

둘 다 로그인할 수 있다.

즉 둘 다 Authentication은 성공했다.

하지만 관리자 페이지에 접근할 수 있는 사람은 관리자뿐일 수 있다.

이것은 Authorization의 영역이다.

앞으로 이 둘은 별도의 Day에서 매우 깊게 공부한다.


35. 웹 해킹에서 URL 하나를 보는 방법

앞으로 웹 주소를 보면 그냥 문자열로 보지 말고 구조적으로 보는 습관을 들이면 좋다.

예를 들어:

https://shop.example.com/product?id=100

을 보면:

https
→ Protocol

shop.example.com
→ Host

/product
→ Path

id=100
→ Parameter

라고 분석한다.

그리고 보안 관점에서는 다음 생각으로 이어진다.

id 값은 사용자가 변경할 수 있을까?

id=101로 변경하면?

존재하지 않는 id라면?

다른 사용자의 상품 또는 데이터가 나타날까?

아직 직접 공격하는 단계가 아니라 이런 분석 사고방식을 만드는 것이 중요하다.


36. 서버는 브라우저를 믿을 수 없다

웹 보안의 핵심을 한 문장으로 표현하면 이 말이 중요하다.

서버는 브라우저가 보내는 데이터를 신뢰해서는 안 된다.

브라우저 화면에서 보이지 않는 값도 바꿀 수 있고, JavaScript 제한도 우회할 수 있고, HTTP Request 자체도 수정할 수 있기 때문이다.

따라서 Server는 항상 다음을 해야 한다.

입력값 검증
Authentication 확인
Authorization 확인
데이터 타입 확인
허용 범위 확인

이 검증 중 하나가 빠지면 취약점으로 이어질 수 있다.


37. 웹 해킹을 공부하면서 기억해야 할 관점

웹사이트를 사용자 입장에서 보면:

버튼
메뉴
검색창
게시판
로그인

이 보인다.

하지만 보안 관점에서는 다음처럼 봐야 한다.

Request는 무엇인가?

Parameter는 무엇인가?

Server는 어떤 값을 받는가?

어떤 Database Query가 발생할까?

사용자 권한은 어디서 확인할까?

Session은 어떻게 유지될까?

Response에는 어떤 데이터가 포함될까?

즉 화면보다 데이터 흐름을 보는 습관을 만들어야 한다.


해킹 1 핵심 요약

Web

인터넷 위에서 HTTP/HTTPS를 이용해 정보를 주고받는 서비스다.


Client

서비스를 요청하는 쪽이다.

웹에서는 주로 Browser가 Client 역할을 한다.


Server

Client의 요청을 받아 처리하고 결과를 반환한다.


Request / Response

웹 통신의 기본 구조다.

Client
↓ Request
Server
↓ Response
Client

URL

웹 리소스의 위치를 표현한다.

예:

https://example.com/product?id=10

구조:

https
→ Scheme

example.com
→ Domain

/product
→ Path

id=10
→ Query Parameter

DNS

Domain Name을 IP Address로 변환한다.

example.com
↓
DNS
↓
Server IP

Port

하나의 서버에서 어떤 서비스와 통신할지를 구분한다.

대표적으로:

80 → HTTP
443 → HTTPS

Web Server

HTTP Request를 받고 Response를 제공하는 서버 프로그램이다.


Application Server

로그인, 게시글, 주문, 권한 처리 같은 실제 서비스 로직을 수행한다.


Database

서비스가 사용하는 데이터를 저장하고 조회한다.


Frontend

사용자의 Browser에서 보여지고 실행되는 영역.

대표 기술:

HTML
CSS
JavaScript

Backend

Server에서 실행되는 영역.

대표적으로:

Authentication
Authorization
Database Access
Business Logic
API

등을 처리한다.


Client-side

사용자의 Browser에서 실행된다.

사용자가 분석하거나 변경할 수 있다는 전제로 생각해야 한다.


Server-side

Server에서 실행된다.

중요한 보안 검증은 Server-side에서 이루어져야 한다.


가장 중요한 보안 원칙

Client는 신뢰할 수 없다.

사용자는 Browser에서 보내는 값을 변경할 수 있기 때문에 Server는 반드시 입력값과 권한을 검증해야 한다.


웹 요청 전체 흐름

오늘 내용 중 가장 중요한 흐름이다.

사용자
↓
Browser에 URL 입력
↓
Domain 확인
↓
DNS 조회
↓
Server IP 확인
↓
Server와 Network 연결
↓
HTTP Request 전송
↓
Web Server
↓
Application
↓
필요하면 Database 조회
↓
HTTP Response
↓
Browser
↓
HTML / CSS / JavaScript 처리
↓
화면 표시

앞으로 배우게 될 웹 취약점들은 대부분 이 흐름 어딘가에서 발생한다.

Browser
↓
HTTP
↓
Application
↓
Database

따라서 웹 해킹을 공부할 때 중요한 것은 취약점 이름을 많이 외우는 것이 아니라 웹 시스템의 데이터가 어디에서 어디로 이동하고, 그 과정에서 무엇을 신뢰하며, 어디에서 검증하는지를 이해하는 것이다.

해킹 1에서는 이 전체 구조를 먼저 잡았다.

다음 해킹 2에서는 웹 해킹의 핵심 언어인 HTTP Request 자체를 아주 깊게 다룬다. Request Line, Method, Path, Query Parameter, Header, Body, Host, Content-Type 등이 실제로 어떤 의미인지 하나씩 분해해서 이해하게 된다.

 

728x90
반응형
728x90
반응형

보안 공부 5일차 — 네트워크는 어떻게 통신할까?

보안 공부 5일차.

지금까지는 컴퓨터 내부 구조와 Windows, 파일, 프로세스, 권한을 공부했다.

오늘부터는 컴퓨터가 다른 컴퓨터와 어떻게 통신하는지를 공부한다.

보안을 공부하면 거의 모든 분야에서 네트워크 개념이 등장한다.

웹 보안, 서버 보안, 침해사고 분석, 악성코드 분석, 클라우드 보안 모두 결국 네트워크 통신과 연결된다.

오늘은 복잡한 네트워크 장비나 프로토콜을 깊게 파기보다, 먼저 다음 흐름을 이해하는 것이 목표다.

내 컴퓨터
↓
IP
↓
Router
↓
Gateway
↓
Internet
↓
상대방 서버

그리고 이 과정에서 DNS와 Port가 어떤 역할을 하는지까지 연결해서 본다.


네트워크란 무엇인가

Network는 여러 장치가 서로 연결되어 데이터를 주고받을 수 있는 환경을 의미한다.

예를 들면 집에서 다음 장치들이 같은 공유기에 연결되어 있다고 해보자.

노트북
스마트폰
TV
태블릿
게임기

이 장치들은 하나의 네트워크 안에서 서로 통신할 수 있다.

회사에서는 더 많은 장치가 연결된다.

직원 PC
서버
프린터
Wi-Fi 장비
보안 장비

즉 네트워크는 단순히 인터넷 그 자체가 아니라 장치들이 서로 통신할 수 있도록 연결된 구조라고 볼 수 있다.


IP Address란?

네트워크에서 장치를 구분하려면 주소가 필요하다.

그 역할을 하는 대표적인 것이 IP Address다.

IP는 Internet Protocol의 약자다.

예를 들어:

192.168.0.10

같은 형태가 IPv4 주소다.

네트워크에서는 데이터를 어디로 보내야 하는지 알아야 하기 때문에 IP 주소를 사용한다.

아주 단순하게 표현하면:

집 주소
→ 사람이 사는 위치

IP 주소
→ 네트워크 장치의 위치

라고 비유할 수 있다.


IPv4

우리가 자주 보는 IP 주소는 보통 IPv4다.

예:

192.168.0.15

IPv4는 점으로 나뉜 4개의 숫자로 구성된다.

192 . 168 . 0 . 15

각 숫자는 0부터 255 사이의 값을 가진다.

지금은 왜 0~255인지까지 깊게 들어갈 필요는 없다.

오늘은 IPv4 주소 형식에 익숙해지는 것이 중요하다.


Private IP와 Public IP

IP 주소는 크게 Private IP와 Public IP로 나눠서 생각할 수 있다.

Private IP

Private IP는 집이나 회사 내부 네트워크에서 사용하는 주소다.

예:

192.168.0.10
192.168.0.20
10.0.0.5

같은 주소를 볼 수 있다.

이 주소는 내부 네트워크에서 장치를 구분하는 데 사용된다.


Public IP

Public IP는 인터넷에서 외부와 통신할 때 사용하는 주소다.

예를 들어 집에 여러 장치가 있어도 외부 인터넷에서는 하나의 공인 IP를 공유하는 경우가 많다.

구조를 단순화하면:

노트북
192.168.0.10
   \
스마트폰
192.168.0.11
    \
     Router
       ↓
   Public IP
       ↓
    Internet

처럼 볼 수 있다.


MAC Address란?

IP Address와 함께 자주 등장하는 것이 MAC Address다.

MAC은 Media Access Control의 약자다.

예를 들어:

00:1A:2B:3C:4D:5E

같은 형태로 표시된다.

MAC Address는 네트워크 인터페이스를 식별하는 데 사용된다.

IP가 네트워크 상의 논리적인 주소라면, MAC은 같은 로컬 네트워크 안에서 장치를 식별하는 데 사용되는 주소라고 보면 된다.

아주 단순하게 정리하면:

IP
→ 네트워크 상의 주소

MAC
→ 네트워크 장치 식별

정도로 이해하면 충분하다.


Router란?

Router는 서로 다른 네트워크 사이에서 데이터를 전달하는 장치다.

집에서는 흔히 공유기가 이 역할을 한다.

예를 들어 내 PC가 인터넷의 웹 서버에 접속한다고 해보자.

내 PC
192.168.0.10

↓

Router

↓

Internet

↓

웹 서버

내 PC가 인터넷으로 나가기 위해서는 Router를 거친다.

Router는 데이터를 목적지 방향으로 전달하는 역할을 한다.


Gateway란?

Gateway는 현재 네트워크에서 다른 네트워크로 나가기 위한 출구라고 이해하면 쉽다.

집에서 내 PC의 네트워크 정보가 다음과 같다고 해보자.

IP Address
192.168.0.10

Default Gateway
192.168.0.1

여기서:

192.168.0.10

은 내 PC의 주소이고,

192.168.0.1

은 외부 네트워크로 나갈 때 사용하는 Gateway일 수 있다.

구조를 보면:

내 PC
192.168.0.10

↓

Default Gateway
192.168.0.1

↓

Internet

이다.

일반적인 가정에서는 공유기 주소가 Default Gateway로 설정되는 경우가 많다.


Router와 Gateway는 같은 것일까?

처음 공부할 때 Router와 Gateway가 헷갈릴 수 있다.

개념적으로 완전히 같은 말은 아니다.

Router는 네트워크 간 데이터를 전달하는 장치이고,

Gateway는 다른 네트워크로 나가기 위해 사용하는 통로 또는 출구의 개념이다.

다만 가정용 환경에서는 같은 공유기가 Router 역할도 하고 Default Gateway 역할도 하기 때문에 같은 것처럼 보이는 경우가 많다.


DNS란?

인터넷을 사용할 때 우리는 보통 IP 주소를 직접 입력하지 않는다.

예를 들어 Google에 접속할 때:

142.xxx.xxx.xxx

같은 IP를 외워서 접속하지 않는다.

대신:

google.com

이라는 Domain Name을 사용한다.

컴퓨터는 실제 통신을 위해 IP 주소가 필요하다.

그래서 Domain Name을 IP Address로 변환하는 과정이 필요하다.

이 역할을 하는 것이 DNS다.

DNS는 Domain Name System의 약자다.

구조를 단순하게 보면:

사용자
google.com 입력

↓

DNS에게 질문

"google.com IP가 뭐야?"

↓

DNS 응답

"이 IP야"

↓

해당 IP로 통신

즉 DNS는 흔히 인터넷의 전화번호부에 비유된다.


Domain Name이 필요한 이유

IP 주소만 사용해도 네트워크 통신은 가능하다.

하지만 사람이 모든 서버의 IP를 외우는 것은 불편하다.

그래서 사람은:

google.com
example.com
naver.com

같은 이름을 사용하고,

컴퓨터는 DNS를 통해 해당 이름을 IP 주소로 변환한다.


Port란?

이제 매우 중요한 개념인 Port가 등장한다.

IP Address가 컴퓨터의 주소라면, Port는 그 컴퓨터 안에서 어떤 서비스와 통신할지를 구분하는 번호다.

예를 들어 하나의 서버 안에서 여러 서비스가 동시에 실행될 수 있다.

웹 서버
SSH 서버
DNS 서버
데이터베이스

이것들을 구분하기 위해 Port를 사용한다.

예:

192.168.0.10:80

여기서:

192.168.0.10

은 IP Address,

80

은 Port다.


IP와 Port를 비유하면

IP와 Port 관계는 아파트로 비유하면 이해하기 쉽다.

IP
→ 아파트 주소

Port
→ 아파트의 방 번호

예를 들어:

203.0.113.10:443

이라면:

203.0.113.10
→ 서버 주소

443
→ 해당 서버에서 사용하는 서비스의 Port

라고 볼 수 있다.


대표적인 Port

보안 공부를 하다 보면 특정 Port 번호를 자주 보게 된다.

처음에는 다음 정도만 익숙해지면 된다.

22
53
80
443

22

SSH에서 자주 사용하는 Port다.

22 → SSH

53

DNS에서 사용되는 대표적인 Port다.

53 → DNS

80

HTTP 웹 통신에서 대표적으로 사용하는 Port다.

80 → HTTP

443

HTTPS 웹 통신에서 대표적으로 사용하는 Port다.

443 → HTTPS

지금은 포트 번호를 전부 외울 필요는 없다.

앞으로 계속 보게 되기 때문에 자연스럽게 익숙해진다.


Protocol이란?

네트워크에서는 데이터를 주고받기 위한 규칙이 필요하다.

이러한 통신 규칙을 Protocol이라고 한다.

예를 들어:

HTTP
HTTPS
DNS
TCP
UDP
SSH

모두 네트워크 통신과 관련된 Protocol이다.

사람끼리 대화를 할 때 언어와 규칙이 필요한 것처럼 컴퓨터끼리 데이터를 주고받을 때도 정해진 규칙이 필요하다.


TCP와 UDP

네트워크 공부에서 계속 보게 될 두 가지 중요한 Protocol이 있다.

TCP
UDP

오늘은 세부 동작 원리보다는 차이를 아주 간단하게 이해한다.

TCP

TCP는 데이터를 안정적으로 전달하는 것을 중요하게 생각한다.

통신 상대와 연결 상태를 만들고 데이터를 제대로 전달했는지 확인하는 방식으로 동작한다.

대표적으로 웹 통신에서 많이 사용된다.


UDP

UDP는 TCP보다 비교적 단순한 방식으로 데이터를 전달한다.

상대방에게 데이터가 제대로 도착했는지 TCP처럼 꼼꼼하게 확인하지 않는다.

대신 구조가 단순하고 빠르게 데이터를 보낼 수 있다.

DNS 같은 곳에서도 UDP가 사용될 수 있다.

아직은 다음 정도로 기억하면 된다.

TCP
→ 안정적인 전달 중시

UDP
→ 빠르고 단순한 전달

내 PC의 네트워크 정보 확인하기

Windows에서는 CMD에서 다음 명령을 사용할 수 있다.

ipconfig

실행하면 네트워크 정보가 표시된다.

대표적으로 다음 항목을 볼 수 있다.

IPv4 Address
Subnet Mask
Default Gateway

예:

IPv4 Address . . . . . : 192.168.0.15
Subnet Mask  . . . . . : 255.255.255.0
Default Gateway . . . : 192.168.0.1

지금은 Subnet Mask를 깊게 이해하지 않아도 된다.

오늘은 우선:

내 IP
Default Gateway

를 구분할 수 있으면 충분하다.


nslookup

DNS가 실제로 어떻게 동작하는지 간단하게 확인할 수도 있다.

CMD에서:

nslookup google.com

을 실행하면 Domain Name과 관련된 IP 정보를 확인할 수 있다.

즉:

google.com
↓
DNS 조회
↓
IP Address

과정을 직접 확인하는 것이다.


ping

네트워크 연결 여부를 확인할 때 자주 보는 명령어가 있다.

ping google.com

ping은 상대방에게 네트워크 메시지를 보내 응답이 오는지 확인하는 데 사용할 수 있다.

결과에서:

Reply from ...

같은 내용이 나타날 수 있다.

다만 어떤 서버는 보안 정책상 ping에 응답하지 않을 수도 있다.

따라서 ping 응답이 없다고 해서 반드시 서버가 꺼져 있다고 단정할 수는 없다.


localhost

네트워크 공부를 하다 보면 다음 단어도 자주 등장한다.

localhost

localhost는 자기 자신의 컴퓨터를 의미한다.

대표적인 IP는:

127.0.0.1

이다.

예를 들어 내 PC에서 테스트용 웹 서버를 실행하고:

127.0.0.1:8080

으로 접속한다면 인터넷의 다른 서버가 아니라 내 PC에서 실행 중인 서비스에 접속하는 것이다.

개발이나 보안 실습에서 굉장히 자주 사용한다.


전체 통신 흐름 이해하기

이제 오늘 배운 내용을 하나로 연결해보자.

Chrome에서 다음 주소를 입력했다고 생각해보자.

https://example.com

먼저 Domain Name이 있다.

example.com

컴퓨터는 DNS를 이용해 IP Address를 확인한다.

example.com
↓
DNS
↓
IP Address

그다음 해당 서버와 통신한다.

내 PC
↓
Default Gateway
↓
Router
↓
Internet
↓
Server IP

HTTPS를 사용한다면 일반적으로:

Port 443

으로 통신할 수 있다.

전체 흐름을 단순화하면:

Chrome
↓
example.com
↓
DNS 조회
↓
Server IP 확인
↓
Gateway
↓
Router
↓
Internet
↓
Server IP:443

이렇게 볼 수 있다.


보안에서는 왜 네트워크를 알아야 할까?

보안에서는 네트워크 통신 자체가 중요한 분석 대상이다.

예를 들어 수상한 Process가 있다고 해보자.

abc.exe
PID 8240

Day 1~4까지는 다음 정보를 확인했다.

무슨 파일인가?
어디에 있는가?
누가 실행했는가?
어떤 PID인가?

이제 여기에 네트워크 질문이 추가된다.

외부로 통신하고 있는가?

어떤 IP와 통신하는가?

어떤 Port를 사용하는가?

어떤 Protocol을 사용하는가?

DNS 요청은 어디로 보내는가?

즉 네트워크를 이해하면 단순히 Process를 보는 것에서 더 나아가 그 Process가 외부와 어떤 행동을 하고 있는지까지 볼 수 있다.


Day 5 핵심 요약

Network

여러 장치가 서로 데이터를 주고받을 수 있도록 연결된 구조.

IP Address

네트워크에서 장치를 구분하기 위한 주소.

IPv4

대표적인 IP 주소 방식.

예:

192.168.0.10

Private IP

내부 네트워크에서 사용하는 IP 주소.

Public IP

인터넷에서 외부와 통신할 때 사용되는 주소.

MAC Address

네트워크 인터페이스를 식별하는 주소.

Router

서로 다른 네트워크 사이에서 데이터를 전달하는 장치.

Gateway

현재 네트워크에서 다른 네트워크로 나가기 위한 출구.

DNS

Domain Name을 IP Address로 변환해주는 시스템.

Port

하나의 컴퓨터 안에서 어떤 서비스와 통신할지 구분하는 번호.

Protocol

컴퓨터끼리 데이터를 주고받기 위한 통신 규칙.

TCP

안정적인 데이터 전달을 중요하게 생각하는 Protocol.

UDP

비교적 단순하고 빠른 데이터 전달 방식.

localhost

내 컴퓨터 자신을 의미한다.

대표 주소:

127.0.0.1

오늘 꼭 기억할 Port

22
→ SSH

53
→ DNS

80
→ HTTP

443
→ HTTPS

오늘 꼭 기억할 명령어

ipconfig

현재 PC의 IP와 Gateway 등 네트워크 정보 확인.

nslookup google.com

Domain Name에 대한 DNS 조회.

ping google.com

상대방과 네트워크 통신 가능 여부를 간단하게 확인.


Day 1부터 Day 5까지 연결하기

지금까지 공부한 내용을 하나로 연결하면 다음과 같다.

파일
program.exe

↓

실행

↓

Process
PID 부여

↓

특정 User 권한으로 동작

↓

CPU / RAM 사용

↓

Network 사용

↓

IP Address

↓

Gateway

↓

Router

↓

Internet

↓

Server IP : Port

보안에서는 결국 이 흐름을 따라가면서 확인하게 된다.

무슨 파일인가?

무슨 Process인가?

누가 실행했는가?

어떤 권한인가?

어떤 IP와 통신하는가?

어떤 Port를 사용하는가?

어디로 데이터를 보내는가?

Day 5에서는 처음으로 컴퓨터 내부를 넘어 다른 컴퓨터와의 통신 구조를 공부했다.

앞으로의 네트워크 공부에서는 오늘 배운 IP, Gateway, DNS, Port를 기반으로 TCP/UDP와 실제 패킷이 어떻게 이동하는지 더 자세히 살펴보게 된다.

728x90
반응형
728x90
반응형

보안 공부 3일차 — CMD와 PowerShell, 명령어로 Windows 다뤄보기

보안 공부 3일차.

1일차에는 컴퓨터의 기본 구조와 Process, PID를 공부했고,
2일차에는 Windows의 주요 폴더, 사용자 권한, UAC, Service, Registry, PATH를 공부했다.

오늘은 Windows를 명령어로 직접 다루는 방법을 공부한다.

보안을 공부하다 보면 GUI보다 CLI를 사용할 일이 많다.

예를 들어 다음과 같은 작업을 명령어로 할 수 있다.

  • 현재 위치 확인
  • 파일과 폴더 확인
  • 실행 중인 Process 확인
  • 사용자 확인
  • 네트워크 정보 확인
  • 특정 프로그램 위치 찾기

오늘은 공격 도구를 사용하는 것이 아니라, Windows에서 기본 명령어를 읽고 사용할 수 있는 능력을 만드는 것이 목표다.


1. GUI와 CLI

컴퓨터를 사용하는 방법은 크게 두 가지로 볼 수 있다.

GUI

GUI는 Graphical User Interface의 약자다.

우리가 평소 Windows를 사용할 때처럼 마우스로 아이콘과 버튼을 클릭하는 방식이다.

예를 들면:

  • 파일 탐색기
  • 작업 관리자
  • 설정
  • 제어판

등이 GUI 방식이다.

CLI

CLI는 Command Line Interface의 약자다.

명령어를 직접 입력하여 컴퓨터를 조작하는 방식이다.

예:

dir
tasklist
whoami

내가 이해한 내용

GUI는 화면에서 마우스로 조작하는 방식이고, CLI는 명령어를 직접 입력해서 시스템을 조작하는 방식이다.


2. Shell이란?

CLI를 공부하면 Shell이라는 용어를 만나게 된다.

Shell은 사용자가 입력한 명령어를 받아 운영체제에 전달하고 결과를 보여주는 프로그램이라고 볼 수 있다.

Windows에서는 대표적으로 다음 두 가지를 사용할 수 있다.

CMD
PowerShell

큰 흐름은 다음과 같다.

사용자

↓

명령어 입력

↓

Shell

↓

Operating System

↓

결과 출력

내가 이해한 내용

Shell은 사용자가 입력한 명령어를 해석하고 운영체제와 연결해주는 환경이다.


3. CMD란?

CMD는 Windows의 전통적인 명령 프롬프트다.

정식 이름은:

Command Prompt

이다.

Windows 검색창에서 다음을 검색하면 실행할 수 있다.

cmd

실행하면 이런 형태의 화면을 볼 수 있다.

C:\Users\사용자이름>

여기서 명령어를 입력한다.

예:

dir

4. PowerShell이란?

PowerShell도 Windows에서 사용하는 Shell이다.

CMD보다 더 다양한 기능을 제공하며 Windows 관리와 자동화에서도 많이 사용된다.

Windows 검색에서:

PowerShell

을 검색해서 실행할 수 있다.

PowerShell에서는 이런 형태의 명령어를 사용할 수 있다.

Get-Process

현재 실행 중인 Process를 확인하는 명령이다.

CMD의:

tasklist

와 비슷한 목적의 작업을 할 수 있다.

오늘은 PowerShell의 복잡한 기능까지 공부하지 않고,

CMD와 PowerShell은 둘 다 Windows에서 명령어를 사용하기 위한 환경이다.

정도로 이해한다.


5. 현재 위치 확인하기

CLI를 사용할 때 가장 먼저 알아야 하는 것은 내가 지금 어느 폴더에 있는지다.

PowerShell에서는:

pwd

를 입력할 수 있다.

결과 예:

Path
----
C:\Users\Kim

pwd는 현재 위치를 확인하는 명령이다.

CMD에서는 프롬프트 자체에 현재 경로가 표시된다.

예:

C:\Users\Kim>

핵심 개념

현재 내가 위치한 폴더를 Current Directory, 즉 현재 디렉터리라고 한다.


6. 파일과 폴더 목록 확인하기

현재 폴더 안에 어떤 파일과 폴더가 있는지 확인해본다.

CMD와 PowerShell 모두 다음 명령을 사용할 수 있다.

dir

결과로 현재 위치에 있는 파일과 폴더 목록을 볼 수 있다.

예:

Desktop
Documents
Downloads
Pictures

내가 이해한 내용

dir은 현재 폴더에 어떤 파일과 폴더가 있는지 확인하는 명령이다.


7. 폴더 이동하기

폴더를 이동할 때 사용하는 대표적인 명령어가 있다.

cd

cd는 Change Directory의 약자다.

예를 들어 현재 위치가:

C:\

이고 Users 폴더로 이동하고 싶다면:

cd Users

를 입력한다.

그러면:

C:\Users>

로 이동한다.


8. 상위 폴더로 이동하기

현재 폴더의 한 단계 위로 이동하려면 다음을 입력한다.

cd ..

예를 들어:

C:\Users\Kim\Downloads

에서:

cd ..

를 실행하면:

C:\Users\Kim

으로 이동한다.

..은 상위 Directory를 의미한다.


9. 절대 경로와 상대 경로

파일 경로에도 두 가지 개념이 있다.

Absolute Path

절대 경로는 처음부터 전체 위치를 지정한다.

예:

C:\Users\Kim\Downloads

현재 내가 어디에 있든 위치가 명확하다.

Relative Path

상대 경로는 현재 위치를 기준으로 경로를 표현한다.

현재 위치가:

C:\Users\Kim

이라면:

cd Downloads

라고만 입력해도 된다.

내가 이해한 내용

절대 경로는 전체 위치를 표시하고, 상대 경로는 현재 내가 있는 위치를 기준으로 경로를 표현한다.


10. 폴더 만들어보기

새로운 폴더를 만들 때는 다음 명령을 사용할 수 있다.

mkdir

예를 들어:

mkdir security-study

를 실행하면 현재 위치에 다음 폴더가 만들어진다.

security-study

그다음:

cd security-study

를 입력해서 해당 폴더로 이동할 수 있다.


11. 화면 정리하기

CLI를 사용하다 보면 화면에 명령 결과가 계속 쌓인다.

화면을 정리할 때는 다음 명령을 사용한다.

cls

화면에 출력된 내용이 지워지고 깨끗한 화면에서 다시 시작할 수 있다.


12. 파일 내용 확인하기

텍스트 파일의 내용을 CMD에서 확인할 수도 있다.

예를 들어 현재 위치에:

test.txt

라는 파일이 있다면:

type test.txt

를 입력한다.

그러면 텍스트 파일의 내용이 화면에 출력된다.

내가 이해한 내용

type 명령은 텍스트 파일 안의 내용을 CLI에서 바로 확인할 때 사용할 수 있다.


13. 실행 중인 Process 확인하기

Day 1에서 작업 관리자를 이용해 Process를 확인했다.

이번에는 CMD에서 확인해본다.

tasklist

결과에는 다음과 같은 정보가 표시된다.

Image Name
PID
Session Name
Memory Usage

예:

chrome.exe       8124
explorer.exe     4520
notepad.exe      10324

여기서 Day 1에서 공부한 PID가 다시 등장한다.

내가 이해한 내용

tasklist는 현재 Windows에서 실행 중인 Process와 PID를 확인할 수 있는 명령이다.


14. 특정 Process 찾기

Process가 너무 많다면 특정 이름이나 PID를 검색할 수 있다.

예를 들어 Chrome만 찾고 싶다면:

tasklist | findstr chrome

를 사용할 수 있다.

findstr은 결과에서 특정 문자열을 찾는 명령이다.

여기서 | 기호도 처음 등장한다.

이 기호를 Pipe라고 부른다.

예:

tasklist | findstr chrome

의 의미를 간단하게 표현하면:

tasklist 결과
     ↓
findstr에 전달
     ↓
chrome이 들어간 줄만 출력

오늘은 Pipe를 깊게 공부하지 않고,

앞 명령의 결과를 다음 명령에 넘길 수 있다.

정도로 이해하면 된다.


15. 내가 누구인지 확인하기

현재 Windows에서 어떤 사용자로 로그인되어 있는지 CLI에서도 확인할 수 있다.

whoami

예:

mycomputer\kim

Day 2에서 공부했던 User와 Permission 개념과 연결된다.

보안에서는 어떤 명령이나 Process가 어떤 사용자 권한으로 실행되고 있는지 확인하는 것이 중요하다.


16. 실행 파일 위치 찾기

다음 명령어를 사용할 수 있다.

where

예:

where notepad

또는 Python이 설치되어 있다면:

where python

Windows가 어떤 실행 파일을 찾아서 실행하고 있는지 경로를 확인할 수 있다.

이 내용은 Day 2에서 공부했던 PATH와 연결된다.

예를 들어:

where python

을 입력했을 때 Python 실행 파일의 경로가 나타난다면, Windows가 해당 경로에서 Python을 찾았다는 뜻이다.


17. 명령어의 기본 구조

CLI 명령어는 보통 다음과 같은 구조를 가진다.

명령어 + 옵션 + 대상

예를 들어:

taskkill /PID 1234

를 구조적으로 보면:

taskkill
→ 명령어

/PID
→ 옵션

1234
→ 대상 값

오늘은 실제 Process 종료 실습은 하지 않고 구조만 이해한다.

명령어 공부에서 중요한 용어는 다음과 같다.

Command
Argument
Option
Parameter

각 도구마다 사용 방식이 조금씩 다를 수 있다.


18. 도움말 보는 습관

명령어를 전부 외울 필요는 없다.

CMD 명령어는 도움말을 확인할 수 있다.

예:

tasklist /?

또는:

dir /?

PowerShell에서도 명령에 대한 도움말을 확인하는 기능이 있다.

예:

Get-Help Get-Process

보안 공부를 하면서 가장 중요한 습관 중 하나는:

명령어를 무조건 외우는 것보다 도움말과 문서를 읽는 것

이다.


19. 오늘의 실습 1 — 폴더 이동하기

CMD 또는 PowerShell을 실행한다.

먼저 현재 위치를 확인한다.

PowerShell:

pwd

현재 파일 목록 확인:

dir

그다음 Documents 또는 Downloads 폴더로 이동해본다.

예:

cd Downloads

다시 상위 폴더로 이동한다.

cd ..

실습 결과

시작 위치:

이동한 위치:

cd .. 실행 후 위치:

20. 오늘의 실습 2 — 공부용 폴더 만들기

사용자 폴더 안에서 다음과 같은 폴더를 하나 만들어본다.

mkdir security-study

이동한다.

cd security-study

현재 위치를 확인한다.

pwd

결과

내가 만든 폴더 경로:

21. 오늘의 실습 3 — Process 확인하기

CMD에서:

tasklist

을 실행한다.

현재 실행 중인 Process 중 3개를 골라 기록한다.

Process 이름PID내가 아는 프로그램인가?

     
     
     

22. 오늘의 실습 4 — 특정 Process 검색하기

Chrome을 사용하고 있다면 다음을 실행한다.

tasklist | findstr chrome

Chrome이 없다면 다른 Process 이름을 사용해도 된다.

예:

tasklist | findstr Teams

확인한 결과

검색한 Process:

검색 결과:

23. 오늘의 실습 5 — 사용자 확인하기

다음 명령을 입력한다.

whoami

결과

내 결과:

이 결과가 Day 2에서 확인했던 Windows 사용자와 어떻게 연결되는지도 생각해본다.


24. 오늘의 실습 6 — 프로그램 위치 찾기

다음 명령을 실행한다.

where notepad

가능하다면:

where python

도 실행한다.

Python이 설치되어 있지 않다면 결과가 나오지 않아도 된다.

결과

notepad 위치:

python 위치:

25. 오늘의 실습 7 — 도움말 읽어보기

다음을 실행한다.

tasklist /?

스크롤을 내려보며 어떤 옵션들이 있는지 살펴본다.

전부 이해할 필요는 없다.

그중 하나를 골라 적어본다.

내가 발견한 옵션:

이 옵션의 역할:

26. 오늘 내용을 보안과 연결해보기

보안 담당자가 한 PC를 조사한다고 생각해보자.

GUI를 하나하나 열지 않고도 CLI를 이용하면 빠르게 정보를 확인할 수 있다.

예를 들면:

whoami

현재 사용자 확인.

tasklist

현재 Process 확인.

where 프로그램명

실행 파일 위치 확인.

즉 이런 질문에 답할 수 있다.

나는 지금 어떤 사용자 권한인가?

어떤 Process가 실행되고 있는가?

해당 Process의 PID는 무엇인가?

실행 파일은 어디에 있는가?

Day 1~3의 내용이 여기서 연결된다.

Program

↓ 실행

Process

↓ PID 부여

Windows가 관리

↓
User / Permission

↓
CLI를 이용해 상태 확인

27. GUI와 CLI를 함께 사용할 수 있어야 한다

GUI와 CLI 중 하나만 좋은 것은 아니다.

예를 들어 Process를 확인할 때:

작업 관리자

를 사용할 수도 있고:

tasklist

를 사용할 수도 있다.

중요한 것은 같은 시스템 정보를 여러 방법으로 확인할 수 있다는 것이다.

보안 업무에서는 상황에 따라 GUI보다 CLI가 더 빠른 경우도 있고, CLI 사용만 가능한 경우도 있을 수 있다.

그래서 앞으로는 명령어를 봤을 때 겁먹지 않는 것이 목표다.


Day 3 핵심 키워드

오늘 알아야 할 용어를 정리하면 다음과 같다.

GUI

그래픽 화면과 마우스 등을 이용해 컴퓨터를 조작하는 방식.

CLI

명령어를 입력해 컴퓨터를 조작하는 방식.

Shell

사용자의 명령을 받아 운영체제와 상호작용할 수 있게 하는 프로그램.

CMD

Windows에서 사용할 수 있는 전통적인 Command Line 환경.

PowerShell

Windows 관리와 자동화 등에 사용할 수 있는 강력한 Shell.

Directory

파일이나 다른 Directory를 저장하는 폴더.

Path

파일이나 폴더가 위치한 경로.

Absolute Path

전체 위치를 표시한 경로.

Relative Path

현재 위치를 기준으로 표현한 경로.

Command

컴퓨터에 수행할 작업을 지시하는 명령.

Option

명령의 동작 방식을 지정하는 값.

Pipe

한 명령의 출력 결과를 다른 명령으로 전달하는 기능.


오늘 꼭 기억할 명령어

dir

현재 폴더의 파일 및 폴더 확인.

cd

Directory 이동.

cd ..

상위 Directory 이동.

mkdir

폴더 생성.

cls

화면 정리.

type

텍스트 파일 내용 확인.

tasklist

실행 중인 Process 확인.

whoami

현재 사용자 확인.

where

실행 파일 위치 확인.

findstr

문자열 검색.


오늘의 최종 질문

자료를 보지 않고 답해본다.

1. GUI와 CLI의 차이는?

 

2. Shell은 어떤 역할을 하는가?

 

3. CMD와 PowerShell은 무엇인가?

 

4. dir 명령어는 무엇을 하는가?

 

5. cd는 무엇을 의미하는가?

 

6. cd ..은 어떤 작업을 하는가?

 

7. 절대 경로와 상대 경로의 차이는?

 

8. tasklist를 사용하는 이유는?

 

9. whoami를 사용하면 무엇을 알 수 있는가?

 

10. where 명령어는 무엇을 확인하는가?

 

11. 다음 명령의 |는 어떤 역할을 하는가?

tasklist | findstr chrome

 

12. 보안 공부에서 CLI 사용법을 알아야 하는 이유는 무엇이라고 생각하는가?

 


Day 3 공부를 마치며

오늘은 Windows를 마우스가 아닌 명령어를 통해 직접 확인하고 조작하는 방법을 공부했다.

오늘 가장 중요한 흐름은 다음과 같다.

사용자
  ↓
명령어 입력
  ↓
CMD / PowerShell
  ↓
Windows
  ↓
파일 / Process / 사용자 / 시스템 정보

아직 명령어를 전부 외울 필요는 없다.

오늘 목표는:

명령어가 나와도 당황하지 않기

현재 위치를 확인할 수 있기

폴더를 이동할 수 있기

Process를 확인할 수 있기

현재 사용자를 확인할 수 있기

도움말을 확인할 수 있기

정도다.

보안 공부에서는 앞으로 수많은 명령어를 사용하게 되겠지만, 결국 기본은 내가 지금 어디에 있고, 어떤 사용자이며, 어떤 Process와 파일이 존재하는지 확인하는 것에서 시작한다.

728x90
반응형
728x90
반응형

Day 1. 개인사업자란 무엇인가?

웹앱을 하나 만들었다고 가정해보자.

처음에는 그냥 개인 프로젝트였다.

내가 필요해서 만들었거나, 재미로 만들었거나, 포트폴리오에 넣으려고 만든 서비스일 수도 있다.

그런데 어느 순간 이런 생각이 든다.

“이거 사람들이 돈을 내고 사용할 수도 있지 않을까?”

그래서 무료 회원과 유료 회원을 나누고, 월 4,900원짜리 요금제를 만들고, 카드 결제 기능을 붙인다.

그리고 처음으로 누군가가 4,900원을 결제한다.

이 순간부터 상황이 꽤 많이 달라진다.

나는 이제 단순히 프로그램을 만든 개발자만이 아니다.

서비스를 제공하고 그 대가로 돈을 받는 사람, 즉 사업을 하는 사람이 된다.

웹서비스를 실제로 운영해보려고 한다면 개발뿐 아니라 이런 변화가 무엇을 의미하는지도 알아야 한다.

그래서 가장 먼저 공부해야 할 것이 바로 개인사업자다.


1. 사업자란 무엇일까?

개인사업자를 이해하려면 먼저 '사업자'라는 말부터 이해해야 한다.

일상에서는 보통 이런 사람들을 사업자라고 생각한다.

  • 음식점을 운영하는 사람
  • 쇼핑몰을 운영하는 사람
  • 카페 사장
  • 회사를 운영하는 사람

하지만 웹서비스도 본질적으로는 크게 다르지 않다.

국세청은 사업상 독립적으로 재화 또는 용역을 공급하는 사람은 사업자등록을 해야 한다고 안내한다.

여기서 중요한 단어가 세 개 있다.

사업상, 독립적으로, 재화 또는 용역을 공급한다는 것이다.

조금 어렵게 느껴질 수 있으니 하나씩 살펴보자.


2. '사업상'이라는 것은 무슨 뜻일까?

친구에게 중고 키보드를 한 번 팔았다고 생각해보자.

10만 원을 받고 키보드를 넘겼다고 해서 곧바로 키보드 판매업자가 되는 것은 아니다.

반면 키보드를 계속 사와서 인터넷에서 반복적으로 판매한다면 이야기가 달라진다.

단순히 내 물건을 한 번 처분한 것이 아니라 계속적인 수익 활동이 되기 때문이다.

웹서비스도 마찬가지다.

예를 들어 내가 친구에게 부탁을 받고 간단한 프로그램을 만들어주고 5만 원을 받은 것과,

웹사이트를 만들어놓고 누구나 가입해서 매달 5,900원을 내면 사용할 수 있게 한 것은 성격이 다르다.

후자는 처음부터 다음과 같은 구조를 가지고 있다.

사용자 모집
→ 서비스 제공
→ 결제
→ 반복적인 서비스 이용
→ 지속적인 매출

즉, 사업의 형태를 갖추고 있다.

그래서 단순히

“얼마를 벌었느냐?”

만 가지고 사업 여부를 판단하는 것은 적절하지 않다.

오히려

어떤 활동을 계속적이고 반복적으로 하고 있는가?

를 보는 것이 중요하다.


3. '독립적으로' 사업한다는 것은?

다음으로 중요한 말이 독립적으로다.

예를 들어 내가 어떤 회사에 취업해서 개발자로 일한다고 해보자.

회사가 나에게 월급을 지급한다.

나는 회사의 지시에 따라 일을 하고 그 대가로 급여를 받는다.

이 경우 나는 그 회사의 서비스를 판매하는 사업자가 아니라 근로자다.

반면 내가 직접 웹서비스를 만들고,

  • 가격을 내가 정하고
  • 서비스 내용을 내가 정하고
  • 사용자에게 직접 제공하고
  • 운영 비용도 내가 부담하고
  • 사업에서 손실이 나도 내가 책임진다면

나는 독립적으로 사업을 운영하고 있는 것이다.

이 차이는 생각보다 중요하다.

개인사업자는 단순히 '돈을 받는 사람'이 아니라 자기 책임으로 사업을 운영하는 사람에 가깝다.


4. 재화와 용역

법이나 세금 공부를 하다 보면 계속 등장하는 단어가 있다.

재화와 용역이다.

쉽게 말하면 다음처럼 이해하면 된다.

재화

물건이다.

예를 들어

  • 노트북
  • 옷
  • 가구
  • 음식
  • 책

등이 있다.

용역

서비스를 제공하는 것이다.

예를 들어

  • 디자인
  • 개발
  • 컨설팅
  • 교육
  • 구독 서비스

등이 있다.

웹앱이나 SaaS는 일반적으로 물건을 넘겨주는 형태라기보다는 서비스를 제공하는 사업에 가깝다.

예를 들어 월 9,900원을 내면 어떤 기능을 계속 사용할 수 있게 해주는 서비스라면 사용자는 물건을 산 것이 아니다.

서비스를 이용할 권리를 얻은 것이다.

그래서 앞으로 웹서비스 사업을 공부하면서는 용역이라는 단어를 자주 만나게 된다.


5. 개인사업자는 무엇인가?

이제 본론으로 들어가보자.

개인사업자는 말 그대로 개인이 자신의 이름과 책임으로 사업을 운영하는 형태라고 이해하면 된다.

예를 들어 내가 ExampleApp이라는 서비스를 만든다고 하자.

개인사업자로

728x90
반응형

+ Recent posts