XSS는 크게 Reflected XSS 와 Stored XSS 두 가지로 분류할 수 있다.
Reflected XSS 는 공격 스크립트가 삽입 된 URL을 사용자가 쉽게 확인할 수 없도록 변형시킨 후
이메일이나 다른 웹 사이트 등에 클릭을 유도하도록 하는 방법이며,
Stored XSS 는 스크립트를 웹 서버에 저장하여 -일반 게시판 등에 공격자가 게시글에 스크립트를 삽입
사용자가 해당 페이지를 클릭하는 순간 스크립트가 실행되도록 하는 방법입니다.
Reflected XSS
위에 입력한 이름을 출력해주는 페이지가 있다. 여기에 XSS공격을 위한 스크립트를 넣게 되면 아래와 같이 값이 전달되며 제대로 script가 실행되는 모습이다.
취약한 코드
<?php
if(!array_key_exists ("name", $_GET) || $_GET['name'] == NULL || $_GET['name'] == ''){
$isempty = true;
} else {
echo '<pre>';
echo 'Hello ' . $_GET['name'];
echo '</pre>';
}
?>
여기서 보안을 높이려면 입력받는 변수에 xss를 막아주는 함수를 추가해준다.
예)
$_GET['name'] -> htmlspecialchars($_GET['name']);
Stored XSS
비슷한 원리로 다음과 같은 글을 게시판 같이 저장한다고 할때 아래와 같이 message 부분에 script 문구가 들어가면서 해당 페이지를 들어갈때마다 script("1" 알람)가 실행된다.
취약한 코드
<?php
if(isset($_POST['btnSign']))
{
$message = trim($_POST['mtxMessage']);
$name = trim($_POST['txtName']);
// Sanitize message input
$message = stripslashes($message);
$message = mysql_real_escape_string($message);
// Sanitize name input
$name = mysql_real_escape_string($name);
$query = "INSERT INTO guestbook (comment,name) VALUES ('$message','$name');";
$result = mysql_query($query) or die('<pre>' . mysql_error() . '</pre>' );
}
?>
예)
+$message = htmlspecialchars($message);
+$message = htmlspecialchars($name);
xss를 이용해 쿠키 탈취
이러한 xss를 통해 무엇을 할수있는지 궁금할 수 있는데 대표적으로 쿠키를 탈취할수 있고,
사용자의 쿠키를 탈취할경우 아이디와 비밀번호를 몰라도 로그인이 가능할수있다.
활용은 다음글의[취약점 악용 시나리오]부분을 참고하자
2020/02/27 - [CMS 취약점 프로젝트/취약점 xss] - cms 그누보드 faq 취약점
xss를 이용한 피싱
다음과같이 입력을 했을시
You need to login to use this page. <br></pre><iframe width=600 height=400 src="wpgur.tistory.com"></iframe>
이처럼 페이지를 띄울수있는데 여기에 원하는정보를 입력 받게끔 유도를 해서 피싱을 할수 있다.
'웹 공격 기법들 > XSS & CSRF' 카테고리의 다른 글
CSRF 실습 (DVWA 사용) (0) | 2021.02.23 |
---|---|
XSS와 CSRF에 대해 (0) | 2021.01.16 |