아임노드

주요 취약점_XSS(Cross-Site Scripting) 본문

[SK shieldus Rookies 23기] 공부 노트/취약점 진단 도구 및 활용법

주요 취약점_XSS(Cross-Site Scripting)

Noody 2025. 1. 13.

 

XSS : 웹사이트에 악성 스크립트를 삽입해 사용자 브라우저에서 실행되게 하는 공격

 


 

* 이후 사용할 스크립트를 이용했을 때 공격이 안되면 우회가 거의 불가능하다고 볼 수 있다.

 

1. dvwa XSS(Stored) (low)로 이동

2. 입력길이 제한으로 입력 길이 풀기

   f12 > 아래 사진처럼 게시판 글자 부분에서 마우스 우클릭 > 검사(Inspect)

f12에서 해당 부분으로 바로 이동

 글자 제한이 10개로 되어 있음 확인

 

100글자로 넉넉하게 수정하기

 

또는 다른 방법

burpsuite에서 패킷 잡아서 해당 부분에 강제로 데이터 넣기

 

2. 스크립트 넣기

 

- <script>alert('1')</script>

게시판에 넣기

(이때 식별가능한 문자 넣기. 여기서는 'name test')

Name을 알아보는 것이므로 name으로 수정

 

> sign Gestbook 클릭

alert 확인 - name부분에 취약점 있다는 것을 알 수 있음

3. 내가 넣은 소스코드가 잘 들어갔는지 확인

view source 또는 해당 부분에서 Inspect

 

4. message 부분도 동일하게 test

확인해보면 Message 쪽도 취약점이 있다는 것 확인

 


 

Medium에서는 <script> 구문을 필터링하므로

-> 대소문자 구분하는지, 이중으로 입력해도 필터되는지 확인해보기

대소문자 구분하는지 확인 (대소문자 위치는 상관없음)

 

> 이번엔 burpsuite에 넣어보기

 

> 소스코드 확인

 

> alert만 다시 소문자로 바꿔서 확인해보기

 

> 위와 같이 하면 팝업 뜸

-> 이로써 알 수 있는 것 : alert은 대소문자 구분(소문자 일때만 실행)

-> script의 경우 name 부분은 구분 안되어 실행, message는 구분되어 필터됨)

 

 

5. 이중 입력 확인

-> 예상 시나리오 : <srcipt>가 필터되면서 <sc + ript> 가 합쳐져 실행

 

위와 동일하게 테스트하기

구분을 위해 11, 22로 데이터 넣었다.

 

> 팝업 실행 안됨 확인

-> 소스코드를 확인해보면 뒤에 <script>는 평문으로 그냥 실행됨

 

> 따라서 다시 수정

 

> 다시 테스트 해본다.

> 앞 전 (테스트)스크립트 때문에 안될 수 있는데 그럴 경우 정상적인 데이터 입력 후 다시 테스트 한다.

 


 

그 외 테스트 해볼 수 있는 다른 코드 목록

아래 코드 중 하나임

 

mXSS(Mutant, 변종) 코드

<svg><style><a alt="</style><img src=x onerror=alert(1)>">
<style><a alt="</style><img src=x onerror=alert(1)>">
<form><math><mtext></form><form><mglyph><style></math><img src onerror=alert(1)>

 


 

보안입장에서 시큐어코딩을 직접 작성하여 유지보수하는 것은 해당 역할이 아니지만

시큐어 코딩이 필요하다면 이렇게 GPT에게 작성을 요청할 수 있음