[Shielders] Rookies-07

Dong Jung·2022년 9월 5일
0

Rookies

목록 보기
8/24
post-thumbnail

2022.09.05

웹해킹.02

XSS(Cross Site Script)
1. XSS란?
2. 실습

1.XSS란?

XSS(Cross Site Scripting)는 스크립트를 활용한 공격이다. 약자가 CSS와 같아 Cross를 X로 발음하기로 했다고한다.

XSS 유형

  • Cookie값을 훔치는 유형(예전)
    쿠키는 사용자의 신분증
    쿠키를 공격자에 컴퓨터로 보냄
    공격자는 자신의 쿠키를 지우고 훔친 쿠키로 교체 -> 해당 웹사이트에 접속하면, 로그인 된 것으로 나옴
    대응방법 : 쿠키에 IP주소를 난독화해서 넣으면 어디서 접속했는지 검증이 가능, 다른 IP에서 접속하면 정상이 아니라는것을 알 수 있음

  • DBD공격 유형(최신)
    악성코드를 자연스럽게 다운로드 하도록 유도
    스크립트 자체는 악성코드가 아님 --> 악성 행위가 없어서 보안 솔루션에 탐지되지 않음
    스크립트는 악성코드를 다운로드 하게한 후 , 사용자를 속여서 마우스 클릭을 유도
    악성코드가 실행되면, 랜섬웨어 또는 트로이목마가 동작하게 됨

2.실습

Low레벨 보안환경과 Medium레벨 보안환경에서 실습을 진행하도록 한다.

XSS(Reflected) Low


low레벨 보안환경

스크립트문장 삽입

알럿이 뜨는것을 확인 할 수 있다

XSS(Reflected) Medium

기본 보안요소가 추가된 Medium 레벨이다.

페이지 소스를 확인해보면 script 태그가 공백으로 치환 되는걸 확인할 수 있다

대문자를 사용하여 str_replace 함수를 우회하였다


우회성공

대문자 이외에도 치환함수는 여러가지 방법으로 치환이 가능하다.

<ScRiPt>alert('hinamnor')</script> // 대소문자 섞어쓰기
<svg o<script>nload=alert('hinamnor')>
<script img=x>alert('hinamnor')</script> // 불필요한 속성 추가
<script >alert('hinamnor')</script> // 태그는 속성을 추가할 수 있다

XSS(Stored) Low

이번엔 방명록과 같은 환경에서 실습을 해본다.


스크립트문장 삽입

알럿 확인

XSS(Stored) Medium

Medium 레벨에서는 어떤 보안 요소가 들어갔는지 소스를 보며 다시 확인한다.

<?php

if( isset( $_POST[ 'btnSign' ] ) ) {
    // Get input
    $message = trim( $_POST[ 'mtxMessage' ] );
    $name    = trim( $_POST[ 'txtName' ] );

    // Sanitize message input
    $message = strip_tags( addslashes( $message ) );
    $message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
    $message = htmlspecialchars( $message );

    // Sanitize name input
    $name = str_replace( '<script>', '', $name );
    $name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

    // Update database
    $query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
    $result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

    //mysql_close();
}

?>

Message input 쪽에는 escape 함수 및 htmlsepcialchars 함수로 메세지가 보안되고 있다.
그에비해 name input쪽에는 str_replace로 치환만 하는걸 확인하였다.
보안상 더 취약한 name 쪽을 공격하기로한다.

공격 실습중 문자입력 갯수에 제한이 걸려있는걸 확인할 수 있었다.

개발자 도구를 통해 클라이언트 단에 최대 문자열수를 늘려주었다.

우회 성공


후기

XSS또한 지난시간 실습했던 SQL인젝션과 같이 OWASP top10에 매번 등재되는 중요한 해킹기법중에 하나이다. 이번실습을 통해 XSS과 몇가지 우회기법같이 많이 알아가는 시간을 가져 뜻깊은 시간이였던거 같다.

profile
보안새내기

0개의 댓글