일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- RIP
- 크롤러
- Reversing
- 스위치
- abex'crackme
- vector
- 머신러닝
- CISCO
- 자바
- AI
- 리버싱
- docker
- Screening Router
- 인공지능
- STP
- 네트워크
- cmd
- Java
- Mac
- 온프레미스
- Python
- vlan
- AWS
- 라우터
- dreamhack
- bastion host
- Firewall
- 암호학
- 머신러닝 프로세스
- Repository
- Today
- Total
Haekt‘s log
[Dreamhack] XSS-1 writeup 본문
XSS 문제이다.
FLAG 변수 안의 정답을 찾으면 된다.
주어진 것은 사이트의 url과 python 파일이 주어졌다.
탐색-
일단 사이트에 들어가 보자.
vuln(xss) page 란 버튼과 memo , flag 버튼이 보인다. 순서대로 눌러보자.
먼저 vuln 버튼은
눌렀을 때 url 에 스크립트가 그대로 노출되어 나오며 알림창이 뜬다.
저런 결과로 봤을때, url 에서 스크립트를 실행할 수 있을 것 같다.
변조를 한번 해 보자
url 에 스크립트 삽입이 가능하다는 것을 알았다 .
memo 버튼은
변수와 값이 그대로 노출되며, 아래에 출력되고 저장된다.
url 의 변수의 값을 변조해보자.
변조가 가능하다.
어떻게 저장되는지 확인하기 위해 F12를 눌러 개발자 코드를 확인해보자.
flag 페이지의 개발자 코드이다. param 이라는 이름으로 post 전송 하는 것을 알 수 있다.
이번엔 문제에서 주어지는 python 파일을 직접 살펴보자.
read_url 의 함수에서 url , cookie 를 인자로 가진다.
쿠키의 domain 값을 127.0.0.1 로 변경한다. 우리의 환경이 아닌 피해자의 환경을 가상으로 설정하기 위함인듯하다.
driver.add_cookie(cookie) 를 보면 함수의 인자를 쿠키에 저장하는 코드를 볼수 있다 . 무사히 저장될 경우 true 를 안될경우 false 를 반환한다.
check_xss 함수에서 param 과 cookie 의 값을 인자로 가진다. 내가 작성한 param변수의 값을 Url 변수에 저장하고,
read_url 함수에 url 과 flag 함수에서 온 쿠키값을 반환 한다.
flag 함수에서는 get, 이냐 post 이냐에 따라 값을 다르게 하는데 이 사이트는 post 이므로 post 를 보자.
param 이라는 이름으로 전달된 값을 받아내어 param 변수에 저장 그 후 param 과 flag 라는 이름의 flag 값을 check_xss 함수에 전달한다.
제대로 전달 되었을 경우 good 를, 아닐경우에는 wrong를 alert 한다.
memo 라는 함수에서는
memo_text 전역변수를 선언하고, memo 라는 부분의 값을 받아와 text 변수에 저장한다. 그 후 memo_text += text + "\n" 을 해서
memo_text 변수를 render_template 함수를 이용해 memo.html 페이지를 렌더링 한 후 출력한다.
많이 어렵지만 이 메모부분을 이용하면 된다.
위의 분석을 정리해 보자면
이 페이지의 부분에 뭔가를 입력하면 그 값이 먼저 flag 함수에 post 로 전달되고, 그걸 param 에 저장하여 flag 값이 담긴 쿠키와 함께
check_xss 에 param=param , cookie = flag 로 전달하고, check_xss 에서는 피해자의 주소와 함께 param 의 값을 더해 url 변수에 담고, 또 그걸 read_url 에 전달하였음. read url 은 받은 url 을 통해 피해자의 가상 클라이언트에 전달함.
memo 는 피해자 가상 클라이언트에서 memo 를 뽑아와 렌더링하고 출력함.
쿠키에 flag 값이 담겼지만 실제로 쿠키가 저장되는건 피해자의 클라이언트 쪽 이므로 우리가 보기는 힘듬.
따라서 상대의 쿠키값을 불러올수 있는 부분이 필요한데 상대의 memo 값을 불러오는 memo코드를 이용하면 볼 수 있다.
flag 페이지의 빈칸을 url 로 사용하여 피해자의 클라이언트에 정보를 전달하므로 url 조작을 통해 쿠키의 flag 값을 memo에 저장시킨 후 memo 를 출력한 memo 페이지를 확인하면 flag 값을 확인할 수 있을 것이다.
<script>location.href="/memo?memo="+document.cookie</script>
무사히 전달된 것을 확인해 볼 수 있다.
memo 를 확인해 보자
플래그가 정상적으로 출력된 것을 볼 수 있다.