1. XSS 크로스 사이트 스크립트(크사)란?
=> 다른 취약점에 비해 우선순위가 낮다
왜냐면 서버를 향한 공격이 아닌 이용자들을 공격하는 것이기 때문.
---> 이용자의 브라우저에서 실행됨
클라이언트 스크립트를 삽입하는 공격!!
-서버 측 코드
PHP, JSP, ASP -
-클라이언트 측 코드
HTML, javascript -
---> 크사 발생 이유
:공격자의 스크립트가 그대로 서버에서 응답되기 때문이다. (Dom Based XSS 제외)
:이용자의 입력(파라미터)이 서버에서 그대로 응답되기 때문이다.
---> 크사 : 영원한 우리의 친구
피라미터가 너무 수많이 존재하기때문에 찾으면 나옴.
---> 분류
서버에 저장: Stored XSS
서버에서 반사: Reflected XSS
클라이언트 측에서 조립: DOM based XSS
*XSS POC(Proof Of Concept)
어떤 스크립트를 삽입할지
alert. prompt 등을 사용해 확인한다.
<script>alert('xss'); </script>
alert 안에 아무 코드나 넣을 수 있다.
키로거, 세션아이디훔치기, 암호화페채굴 등 브라우저에서 할수있는 건
다 할 수 있다.
자바는 보통 인터프리터 언어로 내장, 컴파일이 필요없다. 브라우저는 자바가 내장.
유의사항은 자바나 익스플로 엣지나 내장이 달라 조금씩 모양이 다를 수 있다. 그 중 실행되는 브라우저에서 하면 된다.
=========================================================================
*실습환경 세팅
@Burpsuite 설치
@XAMPP 설치
@XVWA 다운로드(깃허브)
https://www.youtube.com/watch?v=lqcaNxF0Ky0
2. Stored XSS
게시판, 댓글 창 등 내가 쓴 정보가 저장되는 곳에서 실행가능하다. 내가 어떤 'abc'를 게시글로 저장했을 시 그 게시글엔 abc라는 글자가 저장되며, 페이지 요청시 그 글자를 서버가 응답해서 보여줄것이다.
즉 원리는 ' 저장되어서 응답되는 것. ' 특징으로는 스크립트를 삽입하는 곳과 응답되는 곳이 다르다.
예시로 게시판 글 작성시는 다음과 같이 다를 수 있다.
write.php <- 스크립트를 삽입하는 곳.
view.php <- 스크립트가 응답되는 곳.
보통 Stored는 서버에 저장되는 거니까.
이곳저곳 다니다가 때리고 때려맞고 하느라
?????? 어디서 공격당했는지도 모른다.
<처리 순서>
(1) Check
내가 삽입한 글자가 서버에 응답되는지 확인
게시글 제목이나 본문에 글자 입력 후 Burp suite 로 확인.
My name is myungju kim!
(2) HTML 특수 문자 체크
<, >, ;, ', ",
이렇게 사용해본다. >> myungju('xss');
확인은 버프스윗을 활용한다. 응답값에서 myungju 검색시 일부 특수 문자가 삽입되는 것을 볼 수 있다.
<script>alert('myungju_xss');</script>을 해서 알림창이 뜨는지 확인한다.
(3) POC 날림
입력 : myungju_xss<script>alert('xss');</script>
실습 공격 성공!
*Stored 크사 시 주의할 점.
1) 테스트 서버를 주고 거기서 모의해킹하는게 정석인데 보통은 실서버에서 한다. 예를 들어 게시판 제목에 <script>alert('Nomartic is best!');</script>이런거 넣으면 실시간으로 들어와있는 모든 사용자에게 이게 실행된다.
보통은 제목에 테스트임을 알려줘 클릭하지 못하도록 알린다.
게시글 제목: 보안점검 테스트
내용:<script>alert('Nomartic is best!');</script>
2)HTML 태그 깨질 수 있음에 주의한다.
<div>
<p>
<input type=~~ value = "myungju_xss"><script></script>' 시 <<'가 문제된다.
</p>
</div>
</div>
myungju_xss<p></div></div><script>alert('xss');</script>
이런식으로 앞 뒤로 넣다가 페이지가 깨질 수 있다.
<script></script>"'<< 삽입 시 뒤에를 맞춰야한다.
2. Reflected XSS
서버에서 반사를 이용하는 XSS 공격이다. 대상은 검색어 jeisdfs 시 'jeisdfs(내가 입력한 문자)에 관한 게시물이 없습니다'로 값이 그대로 내게 반사되어 보여지는 곳이여한다.
Stored XSS와 달리 스크립트를 삽입하는 곳과 스트립트가 응답되는 곳이 같다. 그래서 burp suite에 repeater 사용하기 편하다.
<처리 순서>
(1),(2),(3) 의 원리는 동일하다.
(1) Check
내가 삽입한 글자가 서버에 응답되는지 확인
응답에서 해당 데이터를 찾음. [ myungju ] 같은 나만의 키워드 삽입 => 반사되는 것을 확인
(2) HTML 특수 문자 체크
<, >, ;, ', ", 체크를 위해서 이렇게 >>> myungju('xss'); 사용해본다.
입력 myungju('xss');시 가능한 것을 확인하면
<script>alert('myungju_xss');</script> 삽입 후 burp suite로 해당 부분 우측클릭 Copy URL해서 직접 URL타고 실제로 알림 창이 되는 지 확인(필수)해본다. 실행이 되면 다음 차례로 넘어간다.
** URL 확인하기
Copy URL 값으로 나온 값을
http://127.0.0.1/xvwa/vulnerabilities/reflected_xss/?item=%3Cscript%3Ealert%28%27myungju_xss%27%29%3B%3C%2Fscript%3E
사이트로 타고 들어가본다. 실행 = 성공 !!!!!
(3) POC
myungju_xss<script>arter('xss')</script>
실습 공격 성공!
4. DOM Based XSS
> 클라이언트 측에서 조립된다.
기존 대응 방안과 다름. 서버에서 핸들링 불가.
*시나리오
공격자가 뿌린 링크를 클릭하면 자동으로 A사이트에 서버 요청을 하게되고 그 A사이트에서 응답된(반사) 코드를 공격자에게 제공해 공격자는 코드 속 정보 탈취하게 된다.
실제 공격자들은 기업관리자들을 타겟으로 삼아 이런 키워드가 좋다.
- 연봉 협상('연봉 재조정 공지드립니다.')
- 추석 보너스 , 경품
- 혹은 코인 떡상! 기간만료로 인한 비밀번호 변경 요청
=> 악성 메일 훈련
지원나갈때가 있음. 사람들이 링크를 클릭하도록 뿌려서 누가 클릭했는지확인.
*주의
<<<<<<링크로 만들 수 있어야함>>>>>>>>
post xss 찾고 오른쪽 change requst method로 get 바꿀 수 있는지 확인
get방식으로 바꾼 다음 URL로 만들어서 보고해야함.
DOM, reflected XSS는 URL로 공격한다.
다른말로 URL이 없으면 공격 안됨.
파라미터에 옮기고 테스트하기.
<처리 순서>
1. check
삽입한 문자가 조립되는지 확인한다. 리피터로 확인이 불가하기 때문에 f12 개발자 도구를 이용해야한다.
element ctrl + f 로 입력한 myungju를 검색해 입력이 되었는지 확인한다.
2. HTML 특수 문자 체크
myungju_"xss" 이런 예제를 넣어보고 정상적인 삽입이 확인되면 공격코드를 삽입해본다.
입력: myungju_xss<script>alert('xss');</script>
출력은 되지만 알림창이 뜨지 않는 것을 확인할 수 있다.
3. POC
서버에서 응답받은 스크립트 태그는 또 다른 스크립트 태그를 <><> 만들어낸다. 이엔 각각의 타이밍이 존재한다.
돔베이스는 이 타이밍! 중에 하나에 만들어진다. 실행이 안되는 것은 해당 스크립트 태그가 실행되는 때를 놓치고 나서 코드를 삽입하여 죽은 태그가 된다.
더 쉬운 설명.
example.HTML
(1) HTML 태그들을 인식
(2) script 태그 코드를 실행한다.
(3) HTML 태그를 화면에 그린다.
(4) img 소스를 가져온다.
..
<script>alert('xss')</script>
여기에 위의 코드를 삽입하면 (2)번때 실행되야하는데 시기를 놓침!
* 이때 Event Handler에 다른 태그 사용 가능
l--> 이벤트가 발생했을때 처리하는 코드
<script></script>는 절대적. <img>, <form>, <button>같은 곳에서 사용할 수 있는 태그가 있다.
예) <img src=x (이벤트 발생시켜서) onerror="alert('xss')"(요고 띄움)>
넣어서 실행시켜 본다. myungju_xss<img src=x onerror="alert('xss')"> 시 안된다.
URL을 보면 +가 있는 거 확인. URL에서 이를 %20으로 바꾸면 실행이된다.
Copy URL : http://127.0.0.1/xvwa/vulnerabilities/dom_xss/?search=myungju_xss%3Cimg%20src%3Dx%20onerror%3D%22alert%28%27xss%27%29%22%29%3E
=> DOM이랑 Reflected XSS는 URL로 공격한다. GET방식이 되어야한다.
5. XSS 찾는법
보통 루틴이 있다.
WackoPickocom에서 실습을 해본다. 로그인해보면 과정이 나옴. 그걸로 페이지가 어떻게 돌아가는 지 파악하게 된다.
1. Check
안에 글자넣으면 글자가 그대로 나오네?
파라미터 파일 가서 123123 넣어보고 auto 스크롤 하고 응답 확인해서 안되면 다른 곳으로 넘어가고,
어디서 또 123123 넣었을때 응답에서 내 코드가 삽입된 것을 발견하면 테스트해볼만한 곳인것이다.
2. HTML 특수문자
(1) ""'볼때는 이렇게 보임. 근데 코드로 보면 다른 글자인 경우가 있다.
이는 HTML entities로 마크업언어(태그 등 구조에 관련된 언어)와의 충돌을 막기위해 특정 캐릭터들을 예약해 사용하는 것이다.
&1t; -> "<"
이렇게 만들어주면 악성 - 못씀.
그럼 우회 다른거 시도해보고 안되면 손뗌.
(2) 응답 위치 확인
내가 입력한 스크립트가 input value 큰따옴표 안에 들어가있을 시
"를 반드시 사용해야 밖으로 나올 수 있다. 그래야 "/><script>이렇게 코드입력할 수 있다.
그렇지만 혹시나 다른 곳에선 될 수있기 때문에 포기하지 않고 더 찾아본다.
만약 내가 입력한 스크립트가 본문에 삽입될 시 <>,"' 사용가능. 그대로 alert(1)해서 넣는다.
copy URL하고 알림창 뜨면, 되는 곳을 발견! 거기다 크사 넣을 수 있음.
* 수없이 존재하는 피라미터들 중에 '내가 입력되는 값이 응답에 나타나는 파라미터'에만 테스트
* 생각보다 흔함. 보고서 데코용으로 쓰기도 함.
* 정리: XSS는 클라이언트 서버에서 발생!!!! 분류, 특징, 위험도, 찾는 법 복습. <repeater 시험대에 올려놓고 돌려보장>
================================
다음시간엔
*XSS 필터링 우회 기법
*XSS 공격 시나리오
>> 시나리오는 품격을 높여준당!!!!! HTML 삽입
틈틈히 하기
보고서 + 파이썬 자동화 도구 분석.
LordSQL풀기
'Web hacking > Nomaltic) 웹 해킹 수업 노트 👩💻' 카테고리의 다른 글
[6주차]XSS 키로커 삽입과 대응방안 (0) | 2021.11.20 |
---|---|
[6주차]XSS 공격 벡터와 대응방안 (0) | 2021.11.18 |
[5주차]XSS(Cross-Site Scripting)이란? (0) | 2021.11.10 |
Burp suit 유투브 강의 듣기 (0) | 2021.11.09 |
[4주차]Blind SQL Injection과 대응방안 (0) | 2021.11.09 |