게시판 CSRF 공격과 취약점 고치기

2023. 5. 21. 20:31해킹/CSRF

먼저 공격을 하려면 취약점을 만들어야 합니다.

회원 정보를 수정하는 modify.php를 만들어 줍시다.

 

수정 쿼리는 update ~ set 이였죠?

 

<?php 
include "connect.php";
?>

<?php 
$id = $_GET['id'];
$pw = $_GET['pw'];
$sql = "Update test_tbl set pass = '$pw' where id = '$id'";
$result = mysqli_query($conn, $sql);
echo $result;
?>

1.db 연결

2.get 방식으로 id와 pw를 받아서 

3.해당하는 아이디의 pw를 변경한다.

 

하지만 이것은 말이 안됩니다...

왜 말이 안되는가.

 

id와 pw를 get 방식으로 받고,

받은 id를 기준으로 변경하기 때문입니다. 

즉 해커가 id를 무차별 대입공격을 하고 해커만의 패스워드로 변경하면 그냥 털립니다.

 

id 파라미터는 빼야합니다.

 

초반에 배웠던 세션을 사용해야죠. 서버가 우리가 누구인지 식별하는 세션이요.

그 세션에 id를 담아놓고 변경을 요청할시 세션에서 보는겁니다.

 

<?php 
include "connect.php";
?>

<?php 
session_start();
$id = $_SESSION['userid'];
$pw = $_GET['pw'];
if($pw != null){
$sql = "Update test_tbl set pass = '$pw' where id = '$id'";
$result = mysqli_query($conn, $sql);
echo "<script>alert('변경에 성공하셨습니다'); location.href = 'modify.php';</script>";
}
?>

<!DOCTYPE html>
<html>
<head>
    <title>Modify</title>
</head>
<body>
    <h1>Modify</h1>
	    <form method="get" action="">
    	새로운 비밀번호 : <input type="text" name="pw"> <br>
    	<input type=submit>
    </form>
</body>
</html>

이런식으로 간단한 회원정보 수정 페이지를 제작하였습니다.

 

여기서 어떻게? CSRF 공격이 일어나느냐.

 

Reflected XSS와 비슷합니다.

 

사용자가 링크를 누르게 해서 모르는 사이에 비밀번호 변경 요청을 하는것이죠.

 

실제로 게시판에 글을 올려봅시다.

이런식으로 어그로 글과 링크를 달고요.

(링크는 진짜 해킹시 short url로 대체)

 

여기서는 자동 링크가 되지 않았네요. 

보통 사이트는 링크를 입력하면 자동으로 생성되죠. 일단 했다 치고 직접 링크를 입력합니다.

 

링크를 들어가니 갑자기 변경에 성공했습니다가 뜨네요.

링크 한번 클릭으로 사용자의 비밀번호를 변경했습니다.

아주 강력한 공격이네요.

 

하지만? Reflected XSS와 같이 POST 방식의 요청이 된다면?

막혀버립니다...

 

그것이 대응 방안중 하나죠.

 

하지만 POST를 쓰고싶지 않거나

공격과 공격을 연계해서 POST여도 취약점이 발생하는 경우가 있습니다.

그 방법은 다음 시간에 알아보도록 합시다.

'해킹 > CSRF' 카테고리의 다른 글

CSRF 공격 1,2번 문제 취약점 정리  (0) 2023.05.25
게시판 CSRF 공격과 취약점 고치기 2  (0) 2023.05.22
CSRF 공격 학습  (0) 2023.05.19