[normaltic 취업반 5기] 2024-01-17 12주차 과제 : 2번 과제 Get Admin 2, 3

2024. 2. 8. 03:19normaltic 취업반 5기/과제

 

과제 목표

 

  • Get Admin 2, 3 문제에서 사용자의 계정 생성과 동시에 생성되는 admin 계정을 탈취하라.

 

Get Admin 2 문제

 

 

1) Get Admin 2 문제 환경

 

  Get Admin 2 문제에서 주어진 웹 페이지는 다음과 같다.

 

  • http://ctf.segfaulthub.com:7575/csrf_2/ : 공격 수행 페이지
  • http://normaltic.com:5000/csrf_admin : 관리자 봇

 

[1] http://ctf.segfaulthub.com:7575/csrf_2/

 

http://ctf.segfaulthub.com:7575/csrf_2/ 초기화면

 

  해당 웹 페이지에서 admin의 계정을 탈취하는 공격을 수행한다.

 

[2] http://normaltic.com:5000/csrf_admin

 

http://normaltic.com:5000/csrf_admin  초기화면

 

  해당 웹 페이지에서는 admin 권한으로 접근하고자 하는 URL을 입력한다.

 

 

2) Get Admin 2 문제 공격 시나리오

 

  Get Admin 2 문제 공격 시나리오는 다음과 같다.

 

  1. 관리자의 계정을 탈취하는 것이 목표이므로 CSRF 공격으로 관리자 계정의 비밀번호를 변경하여 계정 탈취를 목표로 한다.
  2. 사용자 정보 변경은 주로 마이페이지에서 가능하며 해당 웹 페이지를 분석하여 보안 수준에 맞게 공격을 진행한다.
  3. CSRF 공격은 XSS 취약점과 연계하면 효과가 극대화되므로 XSS 취약점 포인트를 가능한 찾는다.
  4. XSS 취약점 포인트를 찾았다면 관리자가 해당 웹 페이지에 접근 시 공격이 수행되도록 스크립트를 작성한다.
  5. 스크립트 작성 후 관리자가 해당 웹 페이지에 접근하게 만들어 관리자 계정의 비밀번호를 변경한다.
  6. 관리자 계정으로 로그인하여 플레그를 얻는다.

 

[1] http://ctf.segfaulthub.com:7575/csrf_2/mypage.php?user=vanhart

 

 

  본 문제에서 사용자 계정 정보를 확인 및 수정이 가능한 페이지다. Burp Suite를 통해 어떤 방식으로 비밀번호를 변경할 수 있는지 확인한다.

 

 

  비밀번호를 변경하기 위해 '변명할 비밀번호'칸에 변경할 비밀번호를 입력 후 'Update' 버튼을 클릭하면 /mypage_update.php 웹 페이지로 POST 메서드로 데이터를 전달한다. 이때 전달되는 파라미터들은 'id', 'info', 'pw'이며 변경할 비밀번호는 pw 파라미터에 저장되어 전달된다. 그렇다면 해당 웹 페이지의 메서드를 GET 메서드로 변경 후에도 정상 작동하는지 알아보도록 하자.

 

 

  해당 웹 페이지에서는 GET 메서드로의 데이터 전달은 허용되지 않아 POST 메서드로만 가능하다는 것을 확인할 수 있다. 이는 CSRF 공격을 수행할 시 POST 메서드로만 데이터가 전달된다면 XSS 공격과 연계하여 form 태그를 사용하여 데이터를 전달하면 된다.

 

[2] http://ctf.segfaulthub.com:7575/csrf_2/notice_list.php

 

 

  XSS 취약점을 찾기 위해 해당 웹 사이트에서 게시판인 /notice_list.php 웹 페이지에 접근한다. 

 

 

  글쓰기 버튼을 클릭 후 제목과 내용 입력칸에 [ >"<' ] 특수기호를 입력한 후 게시글을 작성한다.

 

 

  게시글을 Burp Suite로 확인해 본 결과 입력한 특수기호들은 정상적으로 출력되는 것으로 보아 XSS 취약점 공격이 가능한 것으로 확인되었다.

 

[3] CSRF&XSS 공격 페이로드

 

 

  사전에 비밀번호 변경은 POST 메서드로만 파라미터가 전달되는 걸로 확인이 되었으므로 XSS 취약점 공격과 연계하여 form 태그로 파라미터를 전달한다. 이때 덩그러니 form 태그만 작성되어 있다면 관리자가 해당 게시글 URL에 접근했을 때 회원 정보가 변경되었다는 알림과 함께 다른 웹 페이지로 리디렉션이 발생한다. 그렇게 된다면 관리자는 눈치를 채어 공격이 실패할 것이다.

 

  이를 방지하기 위해 iframe 태그를 활용하여 form 태그로 데이터 요청 시 응답 화면을 해당 게시글의 iframe에 출력하도록 한다. 그러나 단순히 iframe 태그만 작성되어 있다면 리디렉션을 방지할 수 있지만 회원 정보가 수정되었다는 알림 창이 발생하는 것은 방지할 수 없다. 해당 문제는 iframe의 속성 중 'sandbox'를 입력해 주면 해결할 수 있다. 또한 iframe으로 출력되는 웹 페이지는 충분히 의심 가능하므로 style="display:none;" 속성을 입력하여 게시글에서 보이지 않도록 할 수 있다.

 

CSRF&XSS 공격 게시글 URL
관리자 접속 성공


  작성된 게시글의 URL을 관리자 봇 웹 페이지에서 URL 입력란에 기입하고 'Visit'버튼을 클릭하면 관리자가 성공적으로 접속했다는 알림이 발생한다.

 

[4] 공격 수행 결과

 

 

  공격 수행의 결과를 확인하기 위해 로그인 페이지에서 관리자 계정으로 로그인을 시도한다.

 

 

  로그인에 성공하게 되면 해당 문제의 플레그를 획득할 수 있다.

 

 

Get Admin 3 문제

 

 

1) Get Admin 3 문제 환경

 

  Get Admin 3 문제에서 주어진 웹 페이지는 다음과 같다.

 

  • http://ctf.segfaulthub.com:7575/csrf_3/ : 공격 수행 페이지
  • http://normaltic.com:5000/csrf_admin : 관리자 봇

 

[1] http://ctf.segfaulthub.com:7575/csrf_3/

 

http://ctf.segfaulthub.com:7575/csrf_3/ 초기화면

 

  해당 웹 페이지에서 admin의 계정을 탈취하는 공격을 수행한다.

 

[2] http://normaltic.com:5000/csrf_admin

 

http://normaltic.com:5000/csrf_admin &nbsp;초기화면

 

  해당 웹 페이지에서는 admin 권한으로 접근하고자 하는 URL을 입력한다.

 

 

2) Get Admin 3 문제 공격 시나리오

 

  Get Admin 3 문제 공격 시나리오는 다음과 같다.

 

  1. 관리자의 계정을 탈취하는 것이 목표이므로 CSRF 공격으로 관리자 계정의 비밀번호를 변경하여 계정 탈취를 목표로 한다.
  2. 사용자 정보 변경은 주로 마이페이지에서 가능하며 해당 웹 페이지를 분석하여 보안 수준에 맞게 공격을 진행한다.
  3. CSRF 공격은 XSS 취약점과 연계하면 효과가 극대화되므로 XSS 취약점 포인트를 가능한 찾는다.
  4. XSS 취약점 포인트를 찾았다면 관리자가 해당 웹 페이지에 접근 시 공격이 수행되도록 스크립트를 작성한다.
  5. 스크립트 작성 후 관리자가 해당 웹 페이지에 접근하게 만들어 관리자 계정의 비밀번호를 변경한다.
  6. 관리자 계정으로 로그인하여 플레그를 얻는다.

 

[1] http://ctf.segfaulthub.com:7575/csrf_3/mypage.php?user=vanhart

 

 

  본 문제에서 사용자 계정 정보를 확인 및 수정이 가능한 페이지다. Burp Suite를 통해 어떤 방식으로 비밀번호를 변경할 수 있는지 확인한다.

 

 

  비밀번호를 변경하기 위해 '변명할 비밀번호'칸에 변경할 비밀번호를 입력 후 'Update' 버튼을 클릭하면 /mypage_update.php 웹 페이지로 POST 메서드로 데이터를 전달한다. 이때 전달되는 파라미터들은 'id', 'info', 'pw', 'csrf_token'이며 변경할 비밀번호는 pw 파라미터에 저장되어 전달된다. 전달되는 파라미터들 중 csrf_token이 존재하는 걸로 보아 이는 CSRF 대응 방안 중 하나인 CSRF Token이며 /mypage.php 웹 페이지에 접근하면 csrf_token을 랜덤으로 할당한다. 그리고 요청 시 할당받은 csrf_token과 서버에 저장된 csrf_token값을 비교하여 일치 유무에 따라 요청을 처리한다. 또한 CSRF Token을 사용한다면 미리 요청값을 설정하는 GET 메서드 방식으로는 공격이 불가능하다. 따라서 CSRF Token을 파훼하는 방법으로는 iframe으로 csrf_token을 탈취하여 form 태그로 csrf_token을 같이 포함하여 전달해야 한다.

 

[2] http://ctf.segfaulthub.com:7575/csrf_3/notice_list.php

 

 

  XSS 취약점을 찾기 위해 해당 웹 사이트에서 게시판인 /notice_list.php 웹 페이지에 접근한다. 

 

 

  글쓰기 버튼을 클릭 후 제목과 내용 입력칸에 [ >"<' ] 특수기호를 입력한 후 게시글을 작성한다.

 

 

  게시글을 Burp Suite로 확인해 본 결과 입력한 특수기호들은 정상적으로 출력되는 것으로 보아 XSS 취약점 공격이 가능한 것으로 확인되었다.

 

[3] CSRF&XSS 공격 페이로드

 

 

  공격 페이로드는 Get Admin 2 문제와 어느 정도 유사하나 csrf_token을 탈취하는 코드를 입력해야 한다. csrf_token을 탈취하는 방법은 iframe 태그로 /mypage.php 웹 페이지를 해당 게시글에 삽입하여 Javescript를 사용하여 csrf_token을 탈취할 수 있다. 탈취한 csrf_token을 포함하여 form 태그로 변경할 비밀번호와 함께 /mypage_update.php 웹 페이지로 요청을 하게 만드는 코드를 작성한다. 이후 작성한 게시글을 관리자가 접근하게 되면 관리자 계정 권한으로 csrf_token을 할당받고 할당받은 csrf_token을 탈취하여 관리자 계정의 비밀번호를 변경하는 요청을 하게 만들 수 있다..

 

 

  작성된 게시글의 URL을 관리자 봇 웹 페이지에서 URL 입력란에 기입하고 'Visit'버튼을 클릭하면 관리자가 성공적으로 접속했다는 알림이 발생한다.

 

[4] 공격 수행 결과

 

 

  공격 수행의 결과를 확인하기 위해 로그인 페이지에서 관리자 계정으로 로그인을 시도한다.

 

 

  로그인에 성공하게 되면 해당 문제의 플레그를 획득할 수 있다.