'll Hacker

EVI$ION 7기 정규세션 웹 과제 본문

Hacking/WebHacking

EVI$ION 7기 정규세션 웹 과제

씨이오가 되자 2024. 9. 19. 11:50
Contents
728x90

1. Write up 작성

https://portswigger.net/web-security/access-control/lab-user-role-controlled-by-request-parameter

 

Lab: User role controlled by request parameter | Web Security Academy

This lab has an admin panel at /admin, which identifies administrators using a forgeable cookie. Solve the lab by accessing the admin panel and using it to ...

portswigger.net

/admin 에 들어갈 수 없다고 뜸

로그인 페이지

버프스위트에서 응답이 쿠키를 설정하는지 확인하여 Admin=false를 Admin=true로 변경 

false를 true로 변경

 

carlos 삭제

2. XSS 공격에 많이 쓰이는 공격 구문 조사(3개)

<xss onafterscriptexecute=alert(1)><script>1</script>

<xss onafterscriptexecute=alert(1)>:

xss 태그는 HTML에서는 존재하지 않는 태그지만, 브라우저가 이를 무시하고 처리하는 경우가 있음

onafterscriptexecute는 특정 이벤트가 발생한 후에 스크립트가 실행될 때 실행되는 핸들러. 여기서는 alert(1)을 실행하라고 지정함. 이 부분은 자바스크립트 alert( )함수로, 브라우저에서 작은 경고창을 띄워 1이라는 메시지를 표시 

 

<script>1</script>:

이 부분은 <script> 태그 내에 자바스크립트 코드를 넣어 실행하려는 시도.

하지만 1이라는 숫자는 유효한 자바스크립트 코드이긴 하지만 특별한 동작은 하지않는다.

 

<style>@keyframes x{from {left:0;}to {left: 1000px;}}:target {animation:10s ease-in-out 0s 1 x;}</style><xss id=x style="position:absolute;" onanimationcancel="print()"></xss>

<style<@keyframes x{from {left:0;}to {left: 1000px;}}:

@keyframes는 CSS 애니메이션을 정의할 때 사용하는 규칙.

여기서 x라는 이름의 애니메이션을 정의하고 있으며, 애니메이션은 left 속성을 0에서 1000px까지 이동시키는 동작을 가짐.

 

:target {animation:10s ease-in-out 0s 1 x;} :

:target은 CSS에서 URL의 앵커와 일치하는 요소에 스타일을 적용하는 선택자. 즉, URL에 #x가 포함되면 해당 요소에 애니메이션이 적용됨. 이 스타일은 animation속성을 설정하여 x라는 이름의 애니메이션을 10초 동안 ease-in-out 타이밍 함수로 한 번 실행.

 

<xss id=x style="position:absolute;" onanimationcancel="print( )"> :

<xss>는 유효한 HTML태그가 아니지만, 브라우저에서 무시할 수 있음.

이 태그에 id="x"가 지정되어 있으며, #x라는 앵커가 URL에 있을 때 이 요소가 타겟이 되어 애니메이션이 실행

styles="position:absolute;"는 이 요소를 화면 상의 절대적인 위치에 배치하겠다는 의미

onanimationcancel="print( )"는 애니메이션이 취소될때 브라우저의 print( )함수를 실행하는 이벤트 핸들러,

print( )함수는 브라우저의 인쇄 대화 상자를 열게 됨.

 

동작원리는

1. URL에 #x가 붙으면 해당 요소가 :target으로 인식되어, 정의된 애니메이션(x)이 실행됨

2. 애니메이션이 실행 중에 취소되면(onanimationcancel), 자바스크립트 print( ) 함수가 호출되어 브라우저의 인쇄 대화 상자가 나타나게 됨.

 

공격의도

이 코드는 사용자가 해당 URL을 방문하면 브라우저에 인쇄 대화 상자를 강제로 띄우는 동작을 유도하는 형태의 XSS 공격.

 

<style>@keyframes x{}</style><xss style="animation-name:x" onanimationend="alert(1)"></xss>

<stype>@keyframes x{ } :

@keyframes x{ } 는 CSS 애니메이션을 정의하는 구문

여기서 x라는 이름의 애니메이션이 정의되었지만, 애니메이션의 동작이 빈 상태로 설정되었음. 즉, 이 애니메이션은 아무 동작을 하지 않는다.

 

<xss stype="animation-name:x" onanimationend="alert(1)"></xss> :

<xss>는 유효한 HTML 태그가 아니지만, 브라우저는 이를 무시하고 해당 요소를 처리할 수 있음.

style="animation-name:x"는 CSS 애니메이션의 이름을 x로 설정. 위에서 정의한 빈 애니메이션이 적용됨

onanimationend="alert(a)"은 애니메이션이 끝났을 때 실행되는 이벤트 핸들러. 여기서 자바스크립트 alert(1) 함수가 실행되며, 브라우저 화면에 "1"이라는 경고창이 표시.

 

동작원리

1. x라는 이름의 애니메이션이 정의되어 있지만, 아무 동작도 하지 않는 애니메이션

2. <xss> 태그에 애니메이션 이름이 적용되어 있기 때문에 브라우저는 해당 요소에서 애니메이션이 실행되었다고 인식

3. 애니메이션이 완료되면 onanimationend 이벤트가 발생하고, 자바스크립트 alert(1)이 실행되어 브라우저에 경고창이 뜨게 됨.

 

공격의도

이 코드는 CSS 애니메이션과 자바스크립트 이벤트를 이용한 XSS 공격.

일반적인 동작을 방해하지는 않지만, alert( ) 함수를 통해 악성 스크립트나 공격자의 명령을 실행할 수 있는 가능성을 보여줌.

3. Write up 작성 

여기서 제공하는 페이지는 / , /vuln , /memo , /flag 가 있다.
/는 인덱스 페이지
/vuln는 이용자가 입력한 값을 출력한다. => 이용자가 전달한 파라미터의 값을 출력
/memo는 이용자가 메모를 남길 수 있으며, 작성한 메모를 출력. => 이용자가 전달한 memo 파라미터 값을 render_template 함수를 통해 기록하고 출력함.
/flag는 전달된 url에 임의 이용자가 접속하게끔 한다. 해당 이용자의 쿠키에는 FLAG가 존재 => 메소드에 따른 요청마다 다른 기능을 수행하는 것을 알 수 있다, GET에서는 이용자에게 URL을 입력받는 페이지를 제공하고, POST에서는 파라미터에 값과 쿠키에 FLAG를 포함해 check_xss함수를 호출! check_xss는 read_url함수를 호출해 vuln엔드포인트에 접속함. (https://dreamhack.io/lecture/courses/184 참고)

XSS 문제를 해결하기 위해 /vuln 엔드포인트에서 발생하는 XSS 취약점을 통해 임의 이용자의 쿠키를 탈취해야함!
쿠키 탈취는 두가지 방법(memo 페이지 사용 / 웹 서버 사용)이 있는데 
나는 웹서버 사용했다!

드림핵 툴즈 서비스를 이용하여 Request Bin 버튼을 클릭하여 생성된 url과 속성과 함께 밑에 이미지와 같이 빈칸에 적어서 제출하였다.

 

다시 드림핵 툴즈 서비스로 돌아갔더니 Flag나옴

728x90

'Hacking > WebHacking' 카테고리의 다른 글

dreamhack : web-misconf-1 writeup  (0) 2024.04.02
GET 방식과 POST 방식 데이터 요청  (0) 2024.03.15
XSS Filtering Bypass write up  (0) 2024.02.12
XSS Filtering Bypass - 2 정리  (0) 2024.02.08
XSS Filtering Bypass - 1 정리  (0) 2024.02.07