본문 바로가기

보안지식/XSS

[노말틱 모의 해킹 취업반 6주차 해킹과제] XSS 정리 - reflected XSS 실습(2번,3번 풀이)

안녕하세요 이번에는 XSS에 대한 설명을 잠깐 하고 실습으로 넘어가서

 

직접 크사 공격을 해보겠습니다.

.

.

.

.

.

간단하게 설명을 하겠습니다. XSS란?

 

클라이언트 측 코드(자바스크립트, html 등)를 삽입하는 공격입니다! 그리고

클라이언트의 브라우저에서 실행을 합니다.

 

그럼 어떡해 공격을 하면 될까요?

 

저희는 전에 XSS을 정리하면서 설명드린 것은 alert 함수입니다.

alert로 공격이 되는 지 안되는지 증명용이라고 설명드렸습니다.

 

그리고 alert 함수 대신에 악성 코드를 넣으면 된다고만 했죠.

 

 

이제 이걸 이용하여 공격하는 방법을 설명해 드리겠습니다.

 

 

*XSS 에는 공격하는 방법이 크게 2가지로 나누어져 있다고 보시면 돼요

1. 서버에 스크립트를 저장.

2. 서버에 스크립트를 저장하지 않는 방식.

 

 

우선 1번부터 설명해 드리겠습니다.

 

-- Stored XSS

영어로 저장된 크사 공격이라고 합니다.

이 것은 게시물 같은데 자바스크립 트을 삽입해서 다른 사람이 들어올 때마다

악성 스크립트을 실행 합니다.

 

장점: 광역 시전 가능!!

-들어오는 사람마다 실행을 하니깐 제일 좋은 경우 거의 모든 손님의 정보를 빼갈 수 있겠죠

 

단점: 특정인을 저격하기 힘들다, 기록 또는 흔적이 남는다.

- 그렇죠 들어오는 사람 전부 실행하게 되니 특정인을 노릴 수 없습니다.

- 서버에 저장하다 보니 서버의 기록에 남으면 나중에 꼬리가 밟힐 위험도가 있습니다.

 

 

**장점인 광역 공격 시전 가능 때문에 사용은 하나 위험도가 커서 조심히 사용해야합니다.**

 

 

 

다음 2번

서버에 저장하지 않고 XSS 공격하기

 

-- reflected XSS (반사 공격)

서버에 저장을 안 하고 반사 공격을 하는 겁니다. 어떻게 하면 될까요?

간단하게 설명드리자면 링크에 악성 자바 스크립 트을 넣어서 특정인에게 보내는 겁니다.

 

그럼 html에서 악성 스크립트가 실행이 되어서 특정인의 정보만 빼오는 거죠.

 

장점 : 특정인을 공격할 수 있고 기록이 안 남죠

단점 : 광역 공격은 힘들어요.

 

그리고 실습하면서 설명을 드리겠지만

이 reflected XSS는 저희가 작성한 값이 html 코드에 그대로 나오는 곳에서만 가능하며

또한 GET 방식으로만 가능합니다. POST 방식이지만 GET 방식으로 바꾸어서 공격 가능한

사이트도 가끔 있습니다! 

 

 

 

--DOM Based XSS

화면을 잘 봐야 보이는 취약점이고

또는 자바스크립트 부분 중 객체 생성하는 코드에서 객체 생성하는 태그에 취약점을 이용한 공격입니다.

 

 

이 공격도 서버에 저장을 안 하고 공격을 하는 겁니다.

 

만약 저희가 hello을 쳐서 보냈다고 합니다. 그러니깐 웹 사이트에 hello가 출력이 됐습니다.

그런데 html 코드상 hello가 없는 경우입니다. 

 

이거는 값을 클라이언트가 가지고 있다가 클라이언트에서 실행을 할 때 그 값을 쓰는 경우입니다.

이 예시는 다음에 보여 드리고 오늘은 다른 것을 실습 먼저 하겠습니다.

알고만 있으세요!

.

.

.

.

.

.

.

.

.

이제 본격적으로 실습을 들어가겠습니다.

 

공격 방법은 script 태그 이용하거나 img 태그에 onerror을 이용하는 방법이 있습니다.

그러니깐 script 태그가 안되면 img 태그를 이용하겠습니다.

 

 

-XSS 2번

 

목표는 이 사이트의 XSS 취약점 찾고 alert문을 띄울 수 있는 링크을 만드는 겁니다

 

당연히 버프 스위트 통해 봐야 됩니다.

 

약간 꿀팁이지만 reflected XSS 이니 서버에 저장하는 게 아니잖아요?

그러니깐 게시물에 저장할 이유가 없습니다.

 

 

여기 있는 코드을 버프 스위트로 보겠습니다.

 

일단 간단하게 검색을 해보겠습니다. hello!

 

앗!

 

 

 

제가 작성한 hello! 이 alert 문으로 나오네요 한번 버프 스위트를 통해 보겠습니다.

 

저기 있네요

 

제 쿠키값은 모자이크 처리 했어요!

 

일단 reflected XSS는 링크로 공격하는 거라 GET 방식으로 보내져야만 공격이 통하게 됩니다.

그러니 이 POST 방식을 GET 방식으로 바꾸고 보내보겠습니다.

 

request 문에 우클릭-> Change request method  하시면 됩니다.

 

그리고 바로 send 해보겠습니다.

 

되네요!

 

그리고 이제 특수문자가 통하는지 해보겠습니다.

 

간단합니다. <'"> 을 입력하시면 돼요 작은따옴표, 큰 따옴표 랑 꺾세 입력하는 겁니다.

 

되긴하는데..

 

꺾세가 필터링이 되어서 &lt 로 바뀌어졌네요.. 그럼 꺽세는 필터링을 한다는 이야기인데 자세히 보니 필요 없네요

 

왜냐하면 이미 alert 문은 script문 안에 있으니깐요! 그러니깐 ' " 만 되면 해결이 됩니다.

 

그럼 저희가 SQLi 때 하는 것처럼 문법 오류 안 일으키면서 alert문을 넣어보겠습니다.

 

hello'); 이렇게 입력해서 보내볼게요

 

 

저기에 hello alert문이 완성된 게 보이세요?

 

그럼 XSS가 통하는 겁니다 이때 저는 악성 스크립트 대신 alert(1); 을 넣어서 1이 나오게 만들겠습니다.

 

 

좋아요

 

근데 뒤에 원래 있었던 내용 들이 뒤로 밀리게 되어서 문법이 이상하게 됐잖아요?

그럼 // 이걸로 주석처리 해줍니다.

 

 

이제 이 링크를 가져오겠습니다. request 든 response에 우클릭 후 Copy URL 하시면 돼요

 

http://ctf.segfaulthub.com:4343/xss_2/notice_list.php?option_val=hello&board_result=hello%27);alert(1);//&board_search=%F0%9F%94%8D&date_from=&date_to=

 

그러면 이렇게 링크가 나옵니다

 

한번 이 링크를 들어가 보겠습니다

 

 

hello 나오고?

 

 

 

 

1 까지 나오네요!

 

만약 악성 스크립 트을 넣고 싶으시면 alert(1) 대신에 넣으시면 되겠죠?

 

 

 

좋아요! 2번 문제는 이렇게 해서 마치겠습니다.

 

 

 

 

다음 문제 3번입니다.

이번에는 어디에 숨어있을까요?

 

똑같이 게시물에 보내 보고 버프스위트로 확인해 보겠습니다.

 

아..

 

이번에는 꺽세 뿐만아니라 ' " 이것도 필터링을 했네요 그럼 안 되는 겁니다!

다른 option_val, board_result,board_search,date_from,date_to 에 해봐도 안됐습니다.

 

그러니 여기 게시물에서는 XSS 할 취약점이 없네요

 

이번에는 마이페이지로 가볼게요

 

 

어!

 

저기 김성언이라 적혀 있는 곳이 수상하네요! 제가 작성한 데이터가 반환해서 나온 거잖아요? 로그인 정보이니

 

버프 스위트로 가보겠습니다.

 

그리고 user을 hello로 바꿔보겠습니다

 

!!

 

한번 특수문자도 되나 넣어 보겠습니다.

 

<'"> 대입!

 

 

되네요

 

좋아요! 이제 alert(1)을 문법 오류 안 나게 넣어 보겠습니다.

 

hello"/><script>alert(1)</script>// 

 

이렇게 하면 되겠네요 자바 스크립트의 기본 문법은 공부해야지 XSS가 수월해져요

 

대입하고 send 해보겠습니다.

 

 

저기 placeholder 보세요

 

보시면 저희가 넣은 자바 스크립트가 깔끔하게 들어간 것을 볼 수 있습니다.

 

이제 Copy URL 하고 

 

http://ctf.segfaulthub.com:4343/xss_3/mypage.php?user=hello "/><script>alert(1)</script>// 

 

링크 누르면?

 

잘 나오네요

 

이렇게 해서 alert(1) 나오는 링크를 만들었습니다.

 

 

 

 

다음 문제는 다른 포스팅에 풀이해드리겠습니다!

 

긴 글 읽어 주셔서 감사해요