김승현

그누보드 취약점 분석 xss 5.3.1.7 (분류 탭) 본문

그누보드 : 1-day 분석

그누보드 취약점 분석 xss 5.3.1.7 (분류 탭)

kshind 2023. 11. 8. 10:19

 

기타 정보

더보기

실습 환경 : 5.3.1.7             (이후 버전도 가능함)

취약점 정보 : Cross Site Scripting(XSS)

간단 정리 : /adm/qa_config.php경로 내 분류에 악의적인 스크립트 삽입 이후 /bbs/qalist.php 접속시 취약점 발생

취약점 재연에 필요한 경로는 총 두 개로 adm/qa_config.php과 /bbs/qalist.php이다.

이전 글과 내용은 비슷할 것이므로 간단하게 진행하려고 한다.


이전 글 참고

https://kshind.tistory.com/126

 

그누보드 취약점 분석 xss 5.3.1.7

기타 정보 더보기 닫기 실습 환경 : 5.3.1.7 취약점 정보 : Cross Site Scripting(XSS) 간단 정리 : /adm/qa_config.php경로 내 분류에 악의적인 스크립트 삽입 취약점 재현에 필요한 경로 adm/qa_config.php이다. 일단

kshind.tistory.com


 

일단 /adm/qa_config.php에 접속하면 분류를 볼 수 있다.

초기에는 회원|포인트|로 되어 있고 |를 기준으로 분류가 나뉜다. 여기는 저번에도 설명했듯 별 다른 검증이 적용되어 있지 않다. 

그 다음으로는 /bbs/qalist.php로 가보자.

qalist.php를 보면 중간에 파란색 박스로 전체 회원 포인트처럼 qa_config.php에서 적어둔 분류들이 나열되어 있는 걸 볼 수 있다. 

<li>태그와 <a>태그로 감싸져 있고 qa_configg.php에 적은 내용이 아마 <a>[!!여기!!]</a> 저 [!!여기!!]에 위치하는 것 같다.

저기에 일단 img를 입력해서 xss를 시도해보자.

이런 식으로 분류에 입력했다.

<img src='x' onerror="alert('xss_test')">

그렇게 되면 qalist.php의 분류가 적힌 곳에 에러가 발생한 이미지가 출력되고 경고창이 성공적으로 뜨는 걸 볼 수 있다.

해당 내용은 전 글의 취약점과 달리 다른 이용자들에게도 보이는 취약점이다.

 

이번엔 코드를 간단히 보자.

 

<td>
      <?php echo help('분류와 분류 사이는 | 로 구분하세요. (예: 질문|답변) 첫자로 #은 입력하지 마세요. (예: #질문|#답변 [X])') ?>
      <input type="text" name="qa_category" value="<?php echo $qaconfig['qa_category'] ?>" id="qa_category" required class="required frm_input" size="70">
</td>

위는 adm/qa_config.php의 내용이다.

입력값을 저장하는 부분에 별다른 검증 과정이 있지 않아 아무 값이나 입력할 수 있다.

 

이번엔 bbs/qalist.php로 가보자.

        $category_option .= '<li><a href="'.($category_href."?sca=".urlencode($category)).'"';
        if ($category==$sca) { // 현재 선택된 카테고리라면
            $category_option .= ' id="bo_cate_on"';
            $category_msg = '<span class="sound_only">열린 분류 </span>';
        }
        $category_option .= '>'.$category_msg.$category.'</a></li>';

코드에서 카테고리, 즉 분류를 출력하는 부분의 코드이다. 우리가 이용한 부분은 $category_msg.$category변수이고 젤 아랫줄에 있다. 젤 아래에서도 별 다른 검증없이 출력하기 때문에 우리가 입력한 스크립트가 그대로 노출된다.