소프트웨어와 웹 해킹
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 모듈)