본문 바로가기
Hacking/bWAPP

XSS(Cross-Site-Script) Stored_Blog,Change Secret

by 알거음슴 2021. 6. 21.

XSS(Cross-Site-Script) Stored(Blog)

악의적인 스크립트 코드가 데이터베이스에 저장되어 저장된 코드의 내용을 확인한 사용자의 PC에 스크립트 코드가 실행되는 공격

 

Stored

공격자가 서버(게시판)에 스크립트를 삽입하여 저장, 클라이언트가 해당 게시물을 읽을 경우 스크립트가 실행되어 Cookie정보, 악성코드 유입, 랜섬웨어 등 다양한 공격에 활용되는 방식.

 

 

1. XSS(Cross-Site-Scripting) Stroed_Blog(low)

게시판 빈 공간에 “hello xss stored!” 를 입력한 결과 사용자와 데이터 입력날자, 내용등이 표기되는 형식의 사이트이다. 재 접속 하더라도 별도로 Delete하지 않는 한 내용이 남아있는 것 또한 확인가능하다.

<script>alert("Warning");document.write(document.cookie)</script> 다음과 같은 스크립트 코드를 저장시킨 후 반응을 확인해본다.

 

스크립트 코드가 적용되어 Warning 알림창 및 Cookie값이 노출되는걸 확인할 수 있다, 해당 페이지를 나간 후 재접속을 시도해본다.

동일하게 스크립트가 유지되고 있는걸 확인할 수 있다. 게시판의 내용이 삭제되지않는 한 들어오는 사용자들은 모두 해당 스크립트가 적용되어 반환하는걸 확인할 수 있으며 이를 악용시 피싱사이트 연결 및 악성파일 유포등 다양한 방법으로 활용될 수 있다.

 

 

2. XSS(Cross-Site-Scripting) Stroed_Blog(High)

<script>alert("Warning");document.write(document.cookie)</script> 의 스크립트 코드를 동일하게 게시판에 내용으로 입력은 성공하였으나 <script>태그가 태그가 아닌 문장 그대로 인식되어 적용된 것을 확인할 수 있다.

 

 XSS Stored(High)

function xss_check_3($data, $encoding = "UTF-8")
{
    // htmlspecialchars - converts special characters to HTML entities   
    // '&' (ampersand) becomes '&amp;'
    // '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set
    // "'" (single quote) becomes '&#039;' (or &apos;) only when ENT_QUOTES is set
    // '<' (less than) becomes '&lt;'
    // '>' (greater than) becomes '&gt;' 


    return htmlspecialchars($data, ENT_QUOTES, $encoding);


}

기존 Reflected 방식과 동일하게 htmlspecialchars() 함수를 통해서 메타케릭터를 입력 시 태그로 입력되는 것이 아닌 일반 문자로 인식될 수 있게끔 처리되어 있는걸 확인할 수 있다.

 

XSS(Cross-Site-Script) Stored(Change Secret)

1. XSS(Cross-Site-Scripting) Stroed_Change Secret(low)

이번 사이트의 경우 사용자의 비밀번호 힌트를 재설정하는 페이지이다 재설정된 힌트 내용은 이전 SQL Injection(Login Form/User) 을 통해서 확인이 가능한 걸 볼수있다 해당 힌트 내용을 출력해 주는 DB 에 악의적인 스크립트 코드를 통하여 XSS 공격을 시도해본다.

<script>alert("Warning")</script> 간단한 스크립트 코드 삽입 후 비밀번호 힌트 확인 시 스크립트 코드가 인식, 경고창이 뜨며 힌트 내용은 출력이 안되는걸 확인할 수 있다.

2. XSS(Cross-Site-Scripting) Stroed_Change Secret(High)

<script>alert("Warning")</script> High level로 변경 후 동일한 스크립트 코드를 비밀번호 힌트 내용으로 적용한다 이후 SQL Injection(Login Form/User)을 통해서 비밀번호 힌트를 확인 출력되는 내용을 확인 시 태그가 인식되지않고 문자로 인식되어 내용이 그대로 출력됨을 확인할 수 있다.

 

XSS Stored(High)

function xss_check_3($data, $encoding = "UTF-8")
{
    // htmlspecialchars - converts special characters to HTML entities   
    // '&' (ampersand) becomes '&amp;'
    // '"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set
    // "'" (single quote) becomes '&#039;' (or &apos;) only when ENT_QUOTES is set
    // '<' (less than) becomes '&lt;'
    // '>' (greater than) becomes '&gt;' 


    return htmlspecialchars($data, ENT_QUOTES, $encoding);


}

소스코드 확인 시 htmlspecialchars() 함수를 통해서 메타케릭터를 입력 시 태그로 입력되는 것이 아닌 일반 문자로 인식될 수 있게끔 처리되어 있는걸 확인할 수 있다.