컴맹에서 컴공 그리고 화이트 해커가 되는 그날까지

[Dreamhack] XSS Filtering Bypass 문제 풀이과정 본문

해킹/Web hacking

[Dreamhack] XSS Filtering Bypass 문제 풀이과정

공부하는 뚱이 2022. 11. 18. 21:02
반응형

xss-Filtering-Bypass 사이트

XSS-Filtering-Bypass에 접속 정보를 보내고 응답을 기다린 뒤 들어간 페이지이다.

페이지에는 

vuln(xss) page

memo

flag

가 있다.

문제 파일을 다운받아 소스코드를 살펴보자!

 

xss_filter

우선 xss_filter(text)를 보면 "script", "on", "javascript"이 3개의 단어가 필터링 되어 있다는 사실을 알 수 있다.

 

 

 

vuln

vuln에서는 이용자가 전달한 param 파라미터의 값을 xss_filter로 필터링 한 다음에 출력하게 했다. 필터링을 통해 xss 공격을 막을 생각인 것 같다.

 

 

 

memo

다음은 memo 함수 memo에서는 사용자가 전달한 memo 파라미터 값을 render_template 함수를 통해 기록하고 출력한다.

 

여기까지 코드를 부분부분 살펴보았다.

vuln와 memo 엔드포인트는 이용자의 입력값을 페이지에 출력한다.

memo는 render_template함수를 사용해 memo.html을 출력하고

render_template 함수는 

전달된 템플릿 변수를 기록할 때 HTML 엔티티코드로 변환해 저장하기 때문에 XSS 취약점이 발생하지 않습니다. 

그러나

vuln은 이용자가 입력한 값을 페이지에 그대로 출력하기 때문에 XSS 취약점이 발생할 수 있다.

 

그렇다면 vuln에 xss_filter(text)를 우회해서 xss공격을 한다면 memo를 통해서 flag를 get할 수 있을 것이다.

 

XSS공격을 위해 필요한 속성값.

location.href = 전체 URL을 반환하거나, URL을 업데이트할 수 있는 속성값입니다.

document.cookie = 해당 페이지에서 사용하는 쿠키를 읽고, 쓰는 속성값입니다.

 

그렇다면 이제 xss_filter(text)를 우회할 방법을 생각해서 속성값에 대입시켜 /memo를 통해 flag를 얻을 일 만 남았다.

xss 공격의 처음이 <script></script>를 사용하는데 "script"는 현제 필터링 되어있다.

"script" 필터를 어떻게 우회할까?

1. 대소문자 사용

"script"가 필터링이 되어있기 때문에 "ScRiPt", "sCrIpT" 등 대소문자를 번갈아 사용하면 우회를 피할 수 있다.EX)<ScRipt> </sCrIpT>2. 필터링을 이용하여 우회하기"script", "on", "javascript" 3가지가 필터링 되어있으므로 script에 on을 끼워 넣어필터링 된 "on"이 사라지고 script만 남아 코드가 정상적으로 작동하게 된다. 따라서 XSS공격이 가능해 진다.EX)<sconript> </sconript>, 

여기서 잠깐!!!!

아주 중요한 부분이 남아있다. 바로 우리가 사용해야 하는 속성값에 필터링이 되는 단어가 있다는 점이다

바로 locati'on'!!!!

이부분을 어떻게 우회할 수 있을까?script를 우회하는 방법과 비슷하게 하면 된다.하지만 이부분에서는 연결문을 사용하여 우회해보도록 하자!'locatio' + 'n' 이렇게 연결문을 사용하여 location을 쓰면 "on'에 필터링이 되지 않고 우회할 수 있다.

 

지금까지 우회방법을 정리해서 XSS공격 코드를 작성해 보면

<scronipt>document['locatio'+'n'].href = "/memo?memo=" + document.cookie;</scronipt>

<ScRiPT>documnet['locatio' + 'n'].href= "/memo?memo=" + document.cookie;</SCrIpT>

등이있다.

 

fleg

flag에 들어가서 빈칸에 위에 코드를 넣고 

memo에 들어가면

 

flag

flag를 얻을 수 있다.

 

ctf의 매력은 정답이 하나가 아니란 것이다.

새로운 정답을 계속 찾아가며 실력도 늘고 재미도 느는 것 같다.

 

반응형

'해킹 > Web hacking' 카테고리의 다른 글

webhacking.kr 6번 풀이  (0) 2022.11.21
[Dreamhack] Cookie 문제 풀이  (0) 2022.11.19
webhacking.kr 1번  (0) 2022.11.17
SQL-Injection의 종류 1. 인증 우회 공격  (0) 2022.11.17
[웹 해킹] SQL Injection란 무엇인가?  (0) 2022.11.16