XSS/XSS

Reflected XSS

ragdo11 2024. 6. 21. 02:40

Stored XSS에 대해 먼저 올리고자 했으나 비교 설명하기에 Reflected를 먼저 작성하는게 좋아서 올린다!

해석하자면 반사형 XSS로 해석할 수 있겠으나 이러면 무슨 공격인지 느낌이 잘 오지 않는다.

XSS에 대해 전체적으로 간략하게 작성한 글에서 reflected 공격은 사회공학적 기법이 같이 사용되어야 한다고 했다.

 

XSS

Cross-Site Script, 즉 XSS는 클라이언트 측 스크립트를 삽입하는 공격이다. (Cross인데 X를 쓰는 이유는 css하고 헷갈리기 때문!) 이 취약점이 발생하는 이유는 공격자의 입력값(파라미터)이 그대로 서버

ragdo11.tistory.com

 

reflected 공격은 왜 사회공학적 기법까지 사용되어야 할까?? 공격이 성공하기 위해서는 2가지 조건이 만족되어야 하기 때문이다.

1. 피해자가 악성 링크를 누르거나, 검색하거나, 웹 애플리케이션에 특정한 어떤 행위를 해야 한다.

2. 피해자는 악성 링크를 누르는 시점에 로그인되어 있어야 한다.

 

그렇기 때문에 이미 로그인한 상황에서 확인하게끔 할 수 밖에 없는 상황을 만들거나(회원게시판 등에서의 XSS), 불특정 다수에게 악성 링크를 전송하여 그 중에서 걸리게끔 하는 상황을 만들어야 한다.

 

Reflected XSS의 공격 단계는 어떤 식으로 이루어질까? 우선 말했듯이 피해자는 이미 로그인 된 상황이라고 가정해본다.

그럼 악의적인 사용자가 악성 링크를 전달한다. 그냥 링크를 전달하면 의심스러울 수 있으니 링크를 누르게 만들 만큼 매력적으로 포장을 한다. ( 피싱 )

만약 피해자가 이에 넘어가서 악성 링크를 누르게 되면 웹 어플리케이션으로 악성 request를 전달하게 되고 그럼 웹 어플리케이션은 악성 스크립트와 함께 response를 해준다.

피해자는 자신이 원하지 않는 악성 스크립트를 실행한 꼴이 된다. 악의적인 사용자는 실행된 스크립트로 피해자의 쿠키값을 받아올 수 있고 웹 어플리케이션에 피해자인 척 가장한다.

 

dvwa에서 실습 과정이다! XSS는 사용자의 응답이 어떻게 나오는 지를 봐야한다고 했다. 응답이 어떻게 파라미터에 나오는 지가 중점. 우선 저기에 이름을 집어 넣어보자.

페이로드에 특수문자들이 인코딩되기는 했지만 온전히 전송되는 것을 확인할 수 있었다. POC 코드로 1을 띄워보자.

POC 코드가 잘 작동하는 걸로 XSS 취약점이 있다는 것을 보여줄 수 있다.

 

XSS는 사용자 입력을 받는 폼에서 스크립트를 삽입하여 발생하는 공격으로 대표적으로 게시판 같은 곳에서 빈번하게 일어난다.

이와 같이 게시판 검색 파라미터 부분에 검색을 해본다.

burpsuite로 지나가는 패킷을 본다. request로 ragdo11이라는 문자열을 검색했고, 사용자가 입력한 ragdo11이라는 문자가 그대로 응답에 나온다. XSS 취약점을 이용하기 위해 우선 XSS를 사용하기 위한 특수문자를 검색해본다.

특수문자 < ' " >가 전부 응답에 그대로 출력되는 것으로 보아 XSS 취약점을 하는데에 문제가 없을 것 같다.

사용자가 입력한 스크립트가 응답에 그대로 들어가면서 script 태그가 동작해 alert가 실행된다.

이러한 alert가 아니라 외부의 악성 스크립트가 어떠한 행동(링크 클릭 등)에 의해 XSS 취약점이 있는 웹서버로 전달되고, 웹서버의 응답 페이지에 해당 악성 스크립트가 삽입되어 희생자 측에서 동작하는 방식을 Reflected XSS라고 한다.

서버에 스크립트가 저장되는 방식이 아님!