본문 바로가기

old/Cyber Security

웹 해킹 예제: 인증과 인가 취약점_CTF: 권한 체크 피하기

반응형

목표

admin / admin1234 로 로그인한 뒤, 미사일 발사를 눌러라! :D

공격

공격순서

admin으로 로그인하고 발사버튼을 눌러본다. 그리고 내부코드를 확인해본다

HTTP/1.1 200 OK
Date: Tue, 20 Jun 2023 21:26:08 GMT
Server: Apache/2.4.18 (Ubuntu)
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Vary: Accept-Encoding
Content-Length: 1516
Connection: close
Content-Type: text/html; charset=UTF-8


<!-- Show password protected content down here -->

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
    <link rel="stylesheet" type="text/css" href="css/stylesheet.css">
    <title>Auth System</title>
  </head>
  <body>
<script type="text/javascript" src="./js/user.js"></script>
<script type="text/javascript" src="./js/game.js"></script>
    <div class="container">
      <div class="header clearfix">
        <nav>
          <ul class="nav nav-pills pull-right">
            <li role="presentation" class="active"><a href="#">Home</a></li>
            <li role="presentation"><a href="#">About</a></li>
	    <li role="presentation"><a href="#" onclick="goMenu('1129','')">LogOut</a></li>
          </ul>
        </nav>
        <h3 class="text-muted">Segfault</h3>
      </div>

      <div class="jumbotron">
        <h1>핵미사일 시스템</h1>
	<p class="lead">DANGER</p>
<p>발사 버튼은 관리자만 이용 가능합니다.</p>
	</br></br>
<p><a class="btn btn-lg btn-danger" href="#" role="button" onclick="goMenu('1018','')">Fire</a></p>
      </div>

      <div class="row marketing">

      </div>

      <footer class="footer">
        <p>&copy; Segfault</p>
      </footer>

    </div>

    <script src="../../assets/js/ie10-viewport-bug-workaround.js"></script>
  </body>
</html>

버튼을 자세히 확인

onclick을 보면 goMenu라는 함수를 사용하는것을 볼수 있다.

이 함수는 피라미터를 두개 밭는다.

      <div class="jumbotron">
        <h1>핵미사일 시스템</h1>
	<p class="lead">DANGER</p>
<p>발사 버튼은 관리자만 이용 가능합니다.</p>
	</br></br>
<p><a class="btn btn-lg btn-danger" href="#" role="button" onclick="goMenu('1018','')">Fire</a></p>
      </div>
<a class="btn btn-lg btn-danger" href="#" role="button" onclick="goMenu('1018','')">Fire</a>

burp suite으로 함수 찾기

이제 goMenu라는 함수를 사용하는것을 알수 있다. 이제 goMenu함수가 어떤식으로 작동하는지 찾아봐야 하는데, 방법은 여러가지가 있다.

코드 분석

위 페이지의 body 시작점을 보면, 아래 자바스크립트 파일을 가져오는것을 볼수 있다.

<script type="text/javascript" src="./js/user.js"></script>
<script type="text/javascript" src="./js/game.js"></script>

즉, goMenu함수는 저 두 자바스트립트중 하나에 있다고 추측할수 있다.

burp suite으로 함수 찾기

burp suite의 응답섹션의 가장 아래쪽에서는 서치가 가능하다. 여기에 찾고 싶은 것= 함수이름을 넣고. 화살표키를 이용해서 이동하며 확인한다. 매치하는 단어가 있다면 아래와 같이 노란색으로 잠깐 노티스를 준다.

현재 연습하고 있는 노말틱님의 페이지는 대략 14개정도의 응답과 요청밖에 이루어지지 않지만, 실제 웹싸이트는 100개가 넘어간다. 일일히 눈으로 코드를 찾는건 매우 어렵다.

burp suite에서 자바스크립트 파일(.js)을 찾을수 없다면

이미 예전에 다운받은 캐시를 사용한 경우 다시 받는 방법

  1. 크롬 개발자도구 (f12) 혹은 오른쪽 위에 점세개-more tools-개발자 도구를 연다.
  2. 연 상태에서 새로고침 버튼 위을 오론쪽 버튼 누른다
  3. 캐시 비우기 및 강력 새로고침을 누른다

이후 다시 확인해보면 찾을수 있다.

goMenu 함수 분석

 

찾은 함수를 자세히 보면, code가 1018이고, userLevel이 ‘admin’이면, fire_nuclear_Attack.php로 이동하라. 라는 명령임을 알수 있다.

이제 여러가지 방법으로 풀수 있다.

  1. 응답변조를 하여, 위 함수의 if문을 제거
  2. 요청을 보낼때, goMenu(’1018’,’admin’)으로 요청
  3. fire_nuclear_Attack.php페이지로 바로 이동.

응답변조를 하여, 위 함수의 if문을 제거

burp suite으로 응답변조 하는 법

요청을 보낼때, goMenu(’1018’,’admin’)으로 요청

개발자 도구로 자바스크립트 함수 요청 하는 법

fire_nuclear_Attack.php페이지로 바로 이동.

위 웹 페이지의 주소는 http://ctf.segfaulthub.com:3481/auth3/index.php이므로, 단순하게 http://ctf.segfaulthub.com:3481/auth3/fire_nuclear_Attack.php로 변경하여 주소창에 넣으면 된다.

정리

이 문제는 자바 스크립트에 함수가 노출되어 일어나는 취약점중 하나 이다. 웹싸이트에서 자바스크립트 파일이 아예 나타나지 않게 할수는 없지만, 난독화나, 확장자 이름변경을 해서 보안을 높이는 경우는 흔하다.

반응형