발자취
#11 RAON CTF 문제 풀이-2 (XSS 1,2 / JavaScript 1,2,3) 본문
#00 프록시 환경 설정
문제 풀이에 앞서, 프록시를 사용해 풀어야하는 문제들을 위해 프록시 환경 설정을 하도록 하겠습니다.
Burp Suite Community Edition를 사용할 것입니다.
1. Burp Suite Community Edition 다운로드 후 설치
2. Burp Suite 실행 후 [Temporary Project] - [Use Burp Default] 선택
3. Proxy 탭 선택 - [Open Browser] 선택해서 라온 CTF 사이트 접속
4. 문제로 이동한 뒤, intercept 항목을 on으로 설정
5. 문제 사이트 새로고침
#01 XSS 실습
1. Level 1: XSS 필터링을 우회하여 경고창을 실행하시오. [입력 문구: <script>alert('xss')</script>] [프록시 사용 필요]

우선, 입력문구를 그냥 입력하면 'XSS 공격이 차단되었습니다.'라는 문구가 뜨며 입력에 실패하게 된다.

사이트를 우클릭한 뒤, [페이지 소스 보기]를 클릭하면 위와 같이 스크립트문을 볼 수 있다.
2번째 줄에 있는 client.js를 클릭하여 들어가보자.

이와 같은 화면을 확인할 수 있다. (문자열이 약간 깨진다..)
윗 부분을 보면 자바스크립트 자체에서 '<'와 '>'를 차단하고 있는 것을 확인할 수 있다.
이것 때문에 사이트 자체에서 <script>를 입력할 수 없는 것이다.

사이트에 아무 말이나 입력한 뒤, 프록시를 사용하기 위해 intercept를 on 하고 새로고침 해준 뒤, Burp Suite를 확인해보면

content에 입력한 값이 들어가 있는 것을 확인할 수 있다.

이 content를 우리가 원하는 입력 문구인 <script>alert('xss')</script>로 변경한 후 Foward를 누르면

성공 메시지와 플래그값이 뜬다!
2. Level 2: XSS 필터링을 우회하여 경고창을 실행하시오. [입력 문구: <script>alert('xss')</script>]

1번 문제처럼 content를 입력 문구로 변경한 뒤 Foward를 누르면

위와 같이 에러가 뜬다.
자세히 보면, 입력한 값에서 script라는 문자열이 빠진 채로 Input된 것을 확인할 수 있다.
script라는 문자열이 필터링 된 것이다.

이와 같이 입력하는 문자열을 <scrscriptipt>alert('xss')</scscriptript>로 바꾸어 script라는 문자열이 필터링되어도 실행될 수 있게 만들어 Foward하면

공격에 성공할 수 있다.
#02 JavaScript
1. Level 1: 전화번호에 특수문자 입력하기

패스워드에 아무거나 입력하고, 전화번호에 특수문자를 포함하여 '수정하기' 버튼을 누르면, 입력할 수 없다는 문자열이 뜬다.

[설정] - [도구 더보기] - [개발자 도구]에 들어가 [Sources] 탭에서 'client.js' 파일을 클릭해보면, 해당 자바스크립트가 각종 특수문자들을 전화번호에 입력할 수 없도록 필터링하고 있는 것을 확인할 수 있다.

검사하는 부분을 모조리 다 주석처리하고 저장(Ctrl+S)를 누른 뒤, 전화번호에 특수문자를 입력해 '수정하기' 버튼을 누르면

공격에 성공한다!
2. Level 2: 관리자 권한(admin)으로 로그인 하세요!

로그인 창이 있습니다.

[페이지 소스 보기]로 들어가서 맨 밑으로 내리면 위와 같은 자바스크립트 코드를 확인할 수 있다.
유저 id가 admin일 때 패스워드가 'adminpasswd0123456789'면 로그인이 된다는 의미의 코드로 보인다.

id로 'admin'을, 패스워드로 'adminpasswd0123456789'를 입력해보면

관리자 권한 로그인에 성공한다!
3. Level 3: I am malware. Find Me, then you can get flag!

문제로 이동하면, 위와 같은 팝업창이 뜹니다.

[페이지 소스 보기]로 자바스크립트로 들어가 맨 밑으로 내려보면 위와 같은 코드를 확인할 수 있다.
해결방법 1: eval 함수를 alert로 바꾸기
해결방법 2: 자바스크립트 난독화 해제 프로그램을 구글링하여 위 문장이 난독화 되어 있는 것을 다시 원상태로 돌린다.
나는 https://beautifier.io/ 사이트를 사용하여 난독화를 해제했다.
해당 사이트에 문제의 문장
| eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!''.replace(/^/,String)){while(c--){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('f("e d c. b a, 9 8 7 6 0!");1 5="4 3!";1 0="0{2!}";',16,16,'flag|var|You_can_deobfuscate_JS|done|Well|haha|get|can|you|then|me|Find|malware|am|I|alert'.split('|'),0,{})) |
를 입력한 뒤, Beautify Code를 눌러보면

위와 같이 난독화가 해제된 코드가 나와 플래그값을 알아낼 수 있다.
'3-1 > 웹 어플리케이션 보안' 카테고리의 다른 글
| #13 RAON CTF 문제 풀이-4 (File Upload) (0) | 2023.05.23 |
|---|---|
| #12 RAON CTF 문제 풀이-3 (Command Injection 1,2 / SQL Injection 1,2,3) (0) | 2023.05.23 |
| #10 RAON CTF 문제 풀이-1 (Protocol Level 1,3 / Client Lever 1,2,3) (0) | 2023.05.09 |
| #09 크로스 사이트 스크립팅, 크로스 사이트 요청 변조 공격 (0) | 2023.05.07 |
| #08 클라이언트 통제 우회 (0) | 2023.05.07 |