Search

Web Hacking

소프트웨어와 웹 해킹

1. 웹기반 공격의 개념 및 HTTP 구조

웹 시스템 구조:
Client(브라우저): HTTP 요청(request) 전송
Server(웹 서버): 요청 처리, HTTP 응답(response) 반환
정적/동적 페이지 제공(HTML, JS, DB 연동 등)
HTTP 특징:
메시지 기반 프로토콜(요청/응답 헤더, 바디)
무상태(stateless): 각 요청은 독립적으로 처리
평문(plaintext) 전송(기본적으로 암호화 없음)
주요 요소:
HTTP Request/Response 헤더
메서드(GET/POST 등), URL, 쿠키(Cookie/Set-Cookie), 상태 코드(2xx, 3xx, 4xx, 5xx)
쿠키(Cookie): 클라이언트 상태유지(세션·로그인) 등에 사용
Secure, HttpOnly, Domain, Path 등 속성 존재
HTML DOM:
JS, CSS, 이벤트로 조작 가능, XSS 취약점의 대상

2. 주요 웹 취약점 및 공격 기법

2.1 SQL Injection (SQLi)

개념:
웹 입력값이 SQL 쿼리문에 직접 삽입됨
악의적 입력으로 데이터베이스 명령어 조작
유형:
Union 기반, Error 기반, Blind(SQL 에러가 안 나와도 참/거짓 판별)
공격 방식:
ex) pressRelease.jsp?id=5 AND 1=1 → 참/거짓 판단으로 내부 정보 추출
데이터베이스 테이블·컬럼 추출, 인증 우회
방어:
Prepared Statement, 입력값 검증, 에러메시지 차단

2.2 Cross-Site Scripting (XSS)

개념:
공격자가 악성 JS 코드를 웹사이트에 삽입,
다른 사용자의 브라우저에서 임의 스크립트 실행
동작:
공격자가 삽입한 JS가 쿠키, 세션, 입력 폼 등 탈취·변조
Same Origin Policy(SOP) 우회
유형:
Reflected(입력값이 즉시 반영), Stored(DB·로그 등 서버에 저장), Universal(브라우저·확장 취약점)
예시:
http://example.com?name=<script>alert('xss')</script>
방어:
입력값 필터링/이스케이프, Content Security Policy(CSP)

2.3 CSRF (Cross-Site Request Forgery)

개념:
사용자가 인증된 상태에서, 공격자가 의도한 요청이 전송되도록 유도
서버는 피해자가 보낸 정상 요청으로 인식
공격 방식:
악성 웹페이지·이메일을 통해 자동 POST/GET 요청
방어:
CSRF 토큰 사용, Referer 검증, SameSite 쿠키 속성

2.4 Directory Listing

개념:
서버에서 디렉토리 목록 조회가 허용되어,
민감 파일/경로가 노출되는 취약점
공격:
URL을 통한 비인가 파일 접근

2.5 Local File Inclusion (LFI)

개념:
사용자 입력값을 통한 서버 내 파일 불법 노출
공격:
파라미터 조작, 파일 경로 노출, 다운로드 취약점 이용

2.6 Server-Side Template Injection (SSTI)

개념:
서버 템플릿 엔진에 악성 입력값을 전달,
임의 코드 실행이나 변수 노출
주요 엔진: Smarty, Jinja2, Twig 등
공격 페이로드:
템플릿 문법 삽입({{config}}, {% system('ls') %} 등)

2.7 File Upload 취약점·웹쉘

개념:
서버에 악성 파일(웹쉘) 업로드, 권한 획득
예시:
PHP 웹쉘: passthru($_POST['cmd'])
공격:
파일 확장자 우회, 검증 우회

2.8 Extract() 함수 취약점

개념:
PHP extract() 함수로 GET/POST 파라미터가 변수화
의도치 않은 변수 오버라이드·정보 탈취

2.9 Reverse Shell

개념:
공격자가 서버에서 공격자 PC로 접속하게 만들어
원격 명령 실행 및 제어 획득

3. 핵심 보안 용어

Same Origin Policy(SOP):
동일 출처(프로토콜, 도메인, 포트) 내에서만 JS DOM 접근 허용
AJAX:
비동기 통신, 페이지 새로고침 없이 데이터 교환
Popen Class (Python):
외부 프로세스 생성·명령 실행에 사용(subprocess 모듈)