일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
- WebHacking
- burp suite
- hackthissite
- 코딩
- Over The Wire
- 사이버보안
- XSS GAME
- web hacking
- overthewire
- 프로그래밍
- geminipro
- 정보보안
- 웹개발
- 테크트렌드
- lord of sqlinjection
- CTF
- Bandit
- root me
- 개발자
- sql injection bypass
- 인공지능
- webhacking.kr
- SQL Injection
- pythonprogramming
- 웹해킹
- Wargame
- 웹해킹 기초
- system hacking
- web-server
- write up
- Today
- Total
컴맹에서 컴공 그리고 화이트 해커가 되는 그날까지
[Dreamhack] XSS Filtering Bypass 문제 풀이과정 본문
XSS-Filtering-Bypass에 접속 정보를 보내고 응답을 기다린 뒤 들어간 페이지이다.
페이지에는
vuln(xss) page
memo
flag
가 있다.
문제 파일을 다운받아 소스코드를 살펴보자!
우선 xss_filter(text)를 보면 "script", "on", "javascript"이 3개의 단어가 필터링 되어 있다는 사실을 알 수 있다.
vuln에서는 이용자가 전달한 param 파라미터의 값을 xss_filter로 필터링 한 다음에 출력하게 했다. 필터링을 통해 xss 공격을 막을 생각인 것 같다.
다음은 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>
등이있다.
flag에 들어가서 빈칸에 위에 코드를 넣고
memo에 들어가면
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 |