김승현

그누보드 취약점 분석 xss 5.4.19 (답변 및 추가 질문) 본문

그누보드 : 1-day 분석

그누보드 취약점 분석 xss 5.4.19 (답변 및 추가 질문)

kshind 2023. 11. 6. 15:29

 

다른 분들이 찾은 내용을 거의 따라한 겁니다.

기타 정보 열기 ↓

더보기
닫기

실습 환경 : 5.4.19

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

간단 정리 : /bbs/qalist.php 및 /bbs/qaview.php 경로 내 content 악의적인 스크립트 삽입

취약점을 확인하기 위해 bbs/qalist.php로 이동해보자.

현재 페이지 내 존재하는 문의는 두 개가 있다. 아직 관리자가 답변하지 않은 321의 제목을 가진 문의로 이동하자.

이동해보면 이런 식으로 관리자의 경우 아래에 답변을 입력할 수 있다. img 태그를 활용한 xss 공격을 시도해보자.

 

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

이런 식으로 코드를 작성해보았다. 이제 답변을 등록해보자.

답변을 등록하면 이렇게 xss가 실행되는 것을 볼 수 있다.

그러나 저장이 될 때는 alt 속성으로 다른 내용으로 변환이 되어 유효하다고 판단하긴 어려울 것 같으나 예전 버전들에선 공격이 유효할 것 같다. 코드를 잠시 살펴보자.

 

 

if($w == 'a' && $write['qa_email_recv'] && trim($write['qa_email'])) {
    include_once(G5_LIB_PATH.'/mailer.lib.php');

    $subject = $config['cf_title'].' '.$qaconfig['qa_title'].' 답변 알림 메일';
    $content = nl2br(conv_unescape_nl(stripslashes($qa_content)));

    mailer($config['cf_admin_email_name'], $config['cf_admin_email'], $write['qa_email'], $subject, $content, 1);
}

우리의 문의 내용이 전송되기 전에 동작하는 /bbs/qawrite_update.php의 내용이다.

mailer($config['cf_admin_email_name'], $config['cf_admin_email'], $write['qa_email'], $subject, $content, 1);

바로 위의 코드를 보면,

다른 내용을 저장하는 곳은 저번에 나왔던 html_purifier 함수가 적용되어 xss가 필터링 되지만 이 이메일 전송 부분에는 함수가 적용되지 않아 xss가 작동하는 것 같지만 따로 저장되는 거도 아니고 내용이 보내지더라도 이메일을 확인하는 것은 다른 사이트에서 확인하므로 xss가 동작하지 않기 때문에 이 공격이 유효하다고 하기엔 어려울 것 같다.

 

추가질문도 관리자 답변과 같은 방식으로 이메일을 전송하기 때문에 xss가 적용이 된다.

// 문의글등록 이메일전송
if(($w == '' || $w == 'r') && trim($qaconfig['qa_admin_email'])) {
    include_once(G5_LIB_PATH.'/mailer.lib.php');

    $subject = $config['cf_title'].' '.$qaconfig['qa_title'].' 질문 알림 메일';
    $content = nl2br(conv_unescape_nl(stripslashes($qa_content)));

    mailer($config['cf_admin_email_name'], $qa_email, $qaconfig['qa_admin_email'], $subject, $content, 1);

위는 추가 질문의 php 코드이다.

 

일반 문의 등록은 이메일 전송 코드가 없기 때문에 이 취약점이 발생되지 않는다.