XSS 공격
(준비된 웹과 DB연동 과정 생략)
게시판에서 글을 작성
글 내용은 자바 스크립트를 이용한
네이버로 리다이렉트 되는 게시글
게시글에서 링크로 된 복권당첨 글
클릭 시 네이버로 리다이렉트 됨
이번엔 글 내용에 이미지 링크 복사하여
글 내용에 자바스크립트로 링크 코드 작성
이미지 링크를 걸어
이미지가 표시되는 게시글을 확인
<a> : 웹페이지간 연결을 해줌
(하이퍼 링크를 생성)
이미지를 올리고 이미지를 클릭할 때
다른 웹페이지로 연결시켜줌
이미지를 클릭시 해당 유튜브
영상으로 리다이렉트가 됨
해당 동영상의 퍼가기 기능에서
자바스크립트의 코드를 그대로 복사함
게시판에 복사한 코드를
그대로 내용에 붙여넣기 해줌
게시글에 그대로 등록한 코드를
바탕으로 해당 영상을 찾아 띄우게
되고 영상을 시청할 수 있음
세션 하이재킹
공격자에서 getcookie.php 생성
이 코드는 사용자로부터 URL 쿼리
파라미터를 통해 전달된 쿠키 값을 저장
해커가 게시판에 글을 작성
해당 코드는 쿠키 정보를 공격자의
서버로 전송하는 악성스크립트(XSS)
해커가 악성 스크립트로 작성한
글이 게시판에 올라옴
hina라는 계정으로 로그인 후
해커가 작성한 게시글을 접속함
공격자에서 해당 hina 계정의 세션
쿠키가 업데이트되는 것을 확인함
받아온 hina의 세션 쿠기 값을
해당 웹에서 Storage → cookies
Value에 값을 넣어 변조함
쿠키의 value를 바꾸면
해당 세션 ID가 변경
(사용자의 계정 정보로 인증)
(세션 하이재킹 공격을 발생)
로그인 된 계정으로
해당 계정의 비밀번호를 바꿈
[쿠키 토큰 세션]
쿠키 : 클라(cookie 요청내용추가) => 서버(set-cookie 저장소 세션 호출을 저장)
세션 : 서버에저장 (식별 값에 의한 연결 값 저장), 계정 정보 연결
토큰 : 토큰안에 유저정보가 저장(사용자 정보 암호화), 쿠키/세션방식을 보안하기 위해서 나옴
header payload와 verify signature의 암호화 방식, type 등 정보가 저장
payload ID/PW와 같은 사용자 정보
verify signature : base64인코딩한 header,payload,secret key를 더하여 서명
1. 로그인
2. ID 및 PW 계정 정보를 payload에 입력
3. 토큰 유효기간 설정 (JWT) json web token(refresh token)
4. 암호화할 secret key를 사용해 access token 발급
5. 사용자는 access token을 저장하고 인증때마다 헤더에 실어서 보냄
6. 서버는 해당 토큰의 서명 값을 secret key로 복호화 하여 조작여부 유효기간 판단
7. 검증이 완료 되면 payload 디코딩하여 사용자 정보를 가져옴
장점 : 간편 확장성 뛰어남
단점 : payload 자체에는 base64 디코딩이 가능함
길이가 길어져서 인증이 많아질수록 서버의 자원낭비 심해짐
보안
URL에도 XSS 공격이 실행됨
XSS는 모든 입력 값에 대한 공격이 가능
<script> 태그를 찾아 공백으로 교체
사용자가 입력한 악성 스크립트를 제거
악성 스크립트 게시글 작성시
<script>태그를 찾아 공백으로 교체하여
공격이 수행되지 않음
하지만 리눅스는 대소문자를
구별하기 때문에 대문자를 섞어서 작성시
보안이 뚫리는 것을 확인할 수 있음
i 플래그를 사용하여 모든
대소문자 조합을 처리함
대소문자 구분 없이 처리하여
보안이 된 것을 확인할 수 있음
<script> 태그를 찾아 필터링했을 때
이를 우회하기 위해 태그 일부를 삽입
<scr<script>ipt>에서 <script>는 필터링
하지만 <script> 전체 검사가 아닌
일부만 검사했기 때문에 다시 <script>
태그가 완성되어 뚫리는 것을 확인
태그 일부를 삽입해도 모든
< 문자가 포함된 부분을 제거하여
우회하지 못하게 막음
CSRF
공격자는 개발자 도구에서
회원정보 페이지가 hidden이
아닌 것을 파악함
비밀번호를 1로 바꾸도록
악성 스크립트를 작성함
대박 로또 당첨을 클릭하게되면
해당 계정의 비밀번호가 1로 변경됨
CSRF는 로직이 필요하기 때문에
서버 구조를 알아야함 (사용 잘안함)
이런 이유로 SSRF가 많이 사용
SSRF
공격자가 file://127.0.0.1을 이용해
서버의 내부 시스템에 접근함
보안상 노출되지 않아야 할 자원에 접근
구분 | CSRF (Cross-Site Request Forgery) | SSRF (Server-Side Request Forgery) |
목표 | 사용자 대신 악의적인 요청을 보내는 것 | 내부 네트워크나 외부 서버에 요청을 보내는 것 |
공격 주체 | 사용자에게 악성 요청을 보내도록 유도 | 서버를 이용해 요청을 보냄 |
공격 대상 | 사용자가 인증된 사이트 | 서버의 외부 또는 내부 시스템 |
요청 방식 | 사용자가 로그인한 상태에서 요청을 위조 | 서버가 보내는 HTTP 요청을 조작 |
위협 | 사용자 계정 탈취, 금전적 손실, 서비스 변경 | 내부 시스템 정보 노출, 원격 서버 공격, 데이터 유출 |
방어 방법 | CSRF 토큰, SameSite 쿠키 설정 등 | 요청 대상 필터링, 내부 서버 보호 등 |
'수업 및 해킹실습' 카테고리의 다른 글
[Linux/Web] Blind-Injection 및 파일 취약점 공격 (0) | 2025.03.24 |
---|---|
[Linux/Web] Non-Blind-Injection 공격 (0) | 2025.03.21 |
[Linux] 프록시(Proxy)와 브루트포스(Brute force) 공격 (2) | 2025.03.11 |
[Linux/Network] DNSSEC 및 DNS Spoofing (0) | 2025.03.05 |
[Linux] 로그인 크래킹 및 브루트포스 공격 (1) | 2025.02.06 |