[모의해킹 프로젝트] First Board : 모의해킹 #1

2024. 3. 13. 17:52normaltic 취업반 5기/모의해킹 프로젝트

 

모의해킹 프로젝트 : First Board

 

  • 취약점 점검 대상 : First Board
  • 취약점 점검 대상 도메인 : http://ctf.segfaulthub.com:5498
  • 취약점 판단 기준 : 전자금융기반시설 보안 취약점 평가기준
  • 취약점 점검 툴 : Burp Suite, Wireshark, python

 

취약점 : SQL Injection

 

[판단 기준]

 

  사용자가 간섭 가능한 매개변수(URL 파라미터, XML 등)에 의해 SQL 질의문이 완성되는 점을 이용하여, 해당 매개변수 변조를 통해 비정상 질의 가능 여부를 점검

 

[발견된 취약점 정보]

 

URL 파라미터 메뉴
http://ctf.segfaulthub.com:5498/search_result.php?catgo=&search=
search 자유게시판 > 검색
http://ctf.segfaulthub.com:5498/login_search.php userid 로그인 > 로그인
http://ctf.segfaulthub.com:5498/search_result.php?catgo=&search= catgo 자유게시판 > 검색

 

[취약점 발견 검증 과정]

Union Based SQL Injection

1) URL : /search_result.php?catgo=&search=, 파라미터 : search

 

 

  자유게시판 페이지에 접속하여 게시글 검색 입력칸(search 파라미터)에 입력 시 게시글이 출력될 수 있는 문자열을 입력 후 검색 버튼을 클릭한다.

 

페이로드 : file%' #

 

  게시글 검색 입력칸에 위의 페이로드를 입력 후 검색 버튼을 클릭하여 출력되는 게시글을 확인한다. 이때 이전 과정과 같은 게시글이 출력된다면 이는 SQL 구문을 삽입 가능하다는 의미이다.

 

  페이로드 : file%’ union select 1,2,3,4,5,6,7,8 #

  

  게시글 입력칸에 위의 페이로드를 입력하고 검색 버튼을 클릭한다. 출력되는 게시글 중 페이로드에 입력한 숫자가 출력된다면 숫자가 위치한 자리에 DB 데이터를 출력할 수 있는 Union Based SQL Injection 공격이 가능하다는 의미로 이를 통해 공격대상의 DB 데이터를 추출할 수 있다.

 

Blind SQL Injection

1) URL : /login_search.php, 파라미터 : userid

 

 

  로그인 페이지에 접속하여 로그인 가능한 아이디와 비밀번호 입력 후 로그인 버튼을 클릭한다.

 

 

  프록시툴을 사용하여 로그인 성공 시 응답 결과를 확인한다.

 

페이로드 : vanhart2’+and+’1’=’1

 

  userid 파라미터에 위와 같은 페이로드를 입력하여 응답 결과를 확인한다. 이전 단계와 같은 결과라면 이는 SQL 구문을 삽입 가능하다는 의미다.

 

페이로드 : vanhart2’+and+’1’=’2

 

  userid 파라미터에 위와 같은 페이로드를 입력하여 응답 결과를 확인한다. 이전 단계와 다른 결과라면 이는 Blind SQL Injection 공격이 가능하다는 의미로 사용자 입력값에 의한 참과 거짓 결과를 판단하여 공격대상의 DB 데이터를 추출할 수 있다.

 

 

취약점 : 악성파일 업로드

 

[판단 기준]

 

  웹쉘 등과 같은 악성파일이 업로드될 경우 시스템 명령어 실행 및 인접 서버에 대한 침입 가능성이 존재함에 따라, 악성파일 업로드 및 실행 가능 여부를 점검

 

[발견된 취약점 정보]

 

URL 파라미터 메뉴
http://ctf.segfaulthub.com:5498/write_ok.php SelectFile 자유게시판 > 글쓰기 > 글 작성
http://ctf.segfaulthub.com:5498/update.php SelectFile 자유게시판 > 게시글 > 수정 > 수정 완료

 

[취약점 발견 검증 과정]

 

1) URL : /write_ok.php, 파라미터 : SelectFile

 

코드 : <?php echo $_GET[‘test’] ?>

 

  자유게시판에 접속하여 글쓰기 버튼을 클릭한다. 그리고 위와 같은 코드가 입력된 Server Side Script 파일을 등록 후 게시글을 작성한다. 해당 파일은 GET Method로 test 파라미터 값이 전달되면 해당 파리미터 값을 웹 브라우저 출력한다.

 

파일 저장 경로 : http://ctf.segfaulthub.com:5498/uploads/file_test.php

 

  작성된 게시글 페이지에 접속하여 게시글에 등록된 파일 이름 위에 커서를 올리면 좌측 하단에 파일 저장 경로를 확인할 수 있다. 확인된 경로는 위와 같다.

 

URL : http://ctf.segfaulthub.com:5498/uploads/file_test.php?test=file upload test

 

  업로드 한 파일을 실행시키기 위해 웹 브라우저 주소창에 파일 저장 경로와 test 파라미터 및 파라미터 값을 이어서 입력하게 되면 파일이 실행되고 웹 페이지에 입력한 파라미터 값이 출력되는 것을 확인할 수 있다. 이를 통해 웹쉘 파일을 업로드하여 실행시킨다면 웹 서버를 간단히 장악할 수 있다.

 

 

취약점 : 부적절한 인가 여부

 

[판단 기준]

 

  접근 권한에 대한 검증 과정이 구현되지 않아 다른 이용자의 민감한 정보나 권한이 노출될 수 있으므로 이에 대한 검증절차 존재 여부를 점검

 

[발견된 취약점 정보]

 

URL 파라미터 메뉴
http://ctf.segfaulthub.com:5498/write_ok.php board_id 자유게시판 > 글쓰기 > 글 작성
http://ctf.segfaulthub.com:5498/update.php idx 자유게시판 > 게시글 > 수정 > 수정 완료
http://ctf.segfaulthub.com:5498/delete.php?idx=&board_id=board idx 자유게시판 > 게시글 > 삭제
http://ctf.segfaulthub.com:5498/delete.php?idx=&board_id=notice idx 공지사항 > 게시글 > 삭제

 

 

[취약점 발견 검증 과정]

 

1) URL : /write_ok.php, 파라미터 : board_id

 

 

  자유게시판에 접속하여 글쓰기 버튼을 클릭한다.

 

 

  프록시툴에서 인터셉트 기능을 켜고 게시글의 제목과 내용을 입력한 후 글 작성 버튼을 클릭한다.

 

board_id 파라미터 값 변경 전
board_id 파라미터 값 변경 후

 

  board_id 파라미터 값을 board에서 notice로 변경한다.

 

 

  글쓰기 버튼이 존재하지 않아 글 작성을 할 수 없었던 공지사항 페이지에 게시글을 등록하였다.

 

 

2) URL : /update.php, 파라미터 : idx

 

 

  자유게시판에 먼저 수정의 대상이 될 게시글을 작성한다. 그리고 해당 게시글의 idx 파라미터 값을 확인한다. idx 파라미터 값은 363으로 확인이 되었다.

 

 

  자유게시판에서 글쓰기 버튼을 클릭하여 공격 주체가 될 게시글을 작성한다. 그리고 작성된 게시글 상세정보 페이지로 접속하여 수정 버튼을 클릭한다.

 

 

  프록시툴의 인터셉트 기능을 켜고 게시글의 제목(title 파라미터)과 내용(content 파라미터)을 '수정 변경 확인'으로 변경 후 수정 완료 버튼을 클릭한다.

 

idx 파라미터 변경 전
idx 파라미터 변경 후

 

  idx 파라미터 값을 이전 단계에서 확인한 수정 대상 게시글의 idx 파라미터 값인 363으로 변경한다.

 

 

  수정 대상 게시글의 제목과 내용이 성공적으로 변경되었는지 확인한다.

 

 

취약점 : 유추가능한 인증정보 이용

 

[판단 기준]

 

  접근 권한에 대한 검증 과정이 구현되지 않아 다른 이용자의 민감한 정보나 권한이 노출될 수 있으므로 이에 대한 검증절차 존재 여부를 점검

 

[발견된 취약점 정보]

 

URL 파라미터 메뉴
http://ctf.segfaulthub.com:5498/sign_up_search.php
passw 회원가입 > 회원가입

 

1) URL : /sign_up_search.php, 파라미터 : passw

 

  

  회원가입 페이지에 접속하여 사용자 입력 칸에 맞는 내용을 입력하고 비밀번호(passw 파라미터)는 연속되는 숫자인 123456789를 입력 후 회원가입 버튼을 클릭한다.

 

 

  로그인 페이지로 접속하여 회원가입이 성공적으로 이뤄졌는지 확인한다.

 

 

  이번에는 회원가입 페이지에 접속하여 사용자 입력 칸에 맞는 내용을 입력하고 비밀번호(passw 파라미터)는 동일한 숫자로 이루어진 11111111 숫자열을 입력 후 회원가입 버튼을 클릭한다.

 

 

  로그인 페이지로 접속하여 회원가입이 성공적으로 이뤄졌는지 확인한다.

 

 

취약점 : 자동화 공격

 

[판단 기준]

 

  시스템 자원 고갈, 비용 발생 등 서비스 운영상 영향을 미칠 수 있는 기능(SMS, 이메일 발송, 계좌인증 호출, 글쓰기, 파일 업로드 등)에 대해 반복된 호출 가능 여부를 점검

 

[발견된 취약점 정보]

 

URL 파라미터 메뉴
http://ctf.segfaulthub.com:5498/write_ok.php board_id, title, content 자유게시판 > 글쓰기 > 글 작성

 

1) URL : /write_ok.php, 파라미터 : board_id, title, content

 

 

  자동화 공격을 실행하기 위한 게시글 작성 자동화 코드를 작성한다. 테스트 용도로 코드 실행 시 5개의 게시글을 작성하도록 한다.

 

 

  자유게시판에 접속하여 코드가 제대로 작동했는지 확인한다.

 

*자동화 코드

import requests

def auto_func() :

    URL = "http://ctf.segfaulthub.com:5498/write_ok.php"

    payload = {

        'board_id':'board',

        'title':'auto test',

        'content':'test'

    }

    cookie= {

        "session":"70c4fae3-f6ba-4a11-a31d-08e46d1f6006.C85HModrxzjYTmj7apnKXYXiZ_Y",

        "PHPSESSID":"rs16503vnp0gr65g1mmum8n1t5"

    }

    requests.post(URL, data = payload, cookies=cookie)

for i in range(5):

         auto_func()

 

  자동화 공격 코드는 python 언어로 작성하였다.

 

 

취약점 : 데이터 평문 전송

 

[판단 기준]

 

  네트워크 데이터 전송 시 중요정보 평문전송 여부를 점검

 

[발견된 취약점 정보]

 

URL 파라미터 메뉴
http://ctf.segfaulthub.com:5498/login_search.php userpw 로그인 > 로그인

 

1) URL : /login_search.php, 파라미터 : userpw

 

 

  로그인 페이지에 접속하여 로그인 가능한 아이디와 비밀번호를 입력한 후 로그인 버튼을 클릭한다.

 

 

  Wireshark를 통해 로그인 시 전달되는 데이터가 암호화되어있는지 확인한다.

 

 

취약점 : CSRF

 

[판단 기준]

 

  공격자가 업로드 한 악의적 행위 구문으로 인해 타 이용자의 권한 도용이 가능한지에 대한 점검

 

[발견된 취약점 정보]

 

URL 파라미터 메뉴
http://ctf.segfaulthub.com:5498/update.php idx, title, content 자유게시판 > 게시글 > 수정 > 수정 완료
http://ctf.segfaulthub.com:5498/delete.php?idx=&board_id=board idx 자유게시판 > 게시글 > 삭제
http://ctf.segfaulthub.com:5498/delete.php?idx=&board_id=notice idx 공지사항 > 게시글 > 삭제

 

1) URL : /update.php, 파라미터 : userpw

 

 

  자유게시판에 먼저 수정의 대상이 될 게시글을 작성한다. 그리고 해당 게시글의 idx 파라미터 값을 확인한다. idx 파라미터 값은 406으로 확인이 되었다.

 

페이로드

<iframe sandbox id="myFrame" width="0" height="0" border="0" style="display:none;" name="myFrame"></iframe>
<form action="http://ctf.segfaulthub.com:5498/update.php" method="post" id="myForm" target="myFrame">
<input type="hidden" name="idx" value="407">
<input type="hidden" id="title" name="title" value="게시글 수정 확인">
<textarea style="display:none;" id="content" name="content" rows="6">게시글 수정 확인</textarea>
</form>
<script>
document.addEventListener("DOMContentLoaded", document.getElementById("myForm").submit())
</script>

 

  form 태그로 데이터를 전달하여 CSRF 공격을 수행해야 하기 때문에 XSS 취약점과 연계해야 한다. XSS 취약점이 존재하는 위치인 자유게시판 게시글의 내용 부분에 스크립트를 작성 후 글 작성 버튼을 클릭한다. 스크립트는 위와 같다.

 

 

  삽입한 스크립트를 작동시키기 위해 작성한 게시글의 제목을 클릭하여 게시글 상세정보 페이지를 요청한다.

 

 

  CSRF 공격 스크립트가 성공적으로 작동했는지 자유게시판에 접속하여 확인한다.

 

 

  또한 프록시툴로 게시글 수정 요청 헤더에서 Referer 헤더 값이 스크립트가 삽입된 게시글 URL인지 확인한다.

 

 

취약점 : 디렉터리 목록 노출

 

[판단 기준]

 

  인덱스 파일로 지정한 파일이 존재하지 않거나, 디렉토리 리스팅을 허락하도록 설정했을 경우 디렉토리 리스트가 출력됨에 따라 하위 파일 및 디렉토리 목록의 출력 여부를 점검

 

[발견된 취약점 정보]

 

URL 파라미터 메뉴
http://ctf.segfaulthub.com:5498/uploads    

 

1) URL : /uploads 

 

URL : http://ctf.segfaulthub.com:5498/uploads

 

  웹 브라우저 주소 창에 위와 같은 URL을 입력한다. 입력한 URL을 요청하면 출력되는 uploads 디렉터리의 파일 리스트를 확인한다.

 

 

취약점 : XSS

 

[정의]

 

  부적절한 인가 여부는 권한이 존재해야 접근 가능한 작업에 대해서 접근 권한이 존재하지 않는 사용자가 작업을 행할 수 있는 취약점이다. 해당 취약점을 사용하여 관리자 혹은 다른 사용자가 작성한 게시글의 내용을 수정하거나 삭제할 수 있다.

 

[판단 기준]

 

  공격자가 업로드한 스크립트가 타 이용자의 사용환경(브라우저, 웹뷰 등)에서의 실행 가능 여부를 점검

 

[발견된 취약점 정보]

 

URL 파라미터 메뉴
http://ctf.segfaulthub.com:5498/search_result.php?catgo=&search= search 자유게시판 > 검색
[form page]
http://ctf.segfaulthub.com:5498/write.php

[process page]
http://ctf.segfaulthub.com:5498/write_ok.php

[view page]
1.http://ctf.segfaulthub.com:5498/board.php?board_id=board
2.http://ctf.segfaulthub.com:5498/read.php?board_id=board&idx=
title [form page]
자유게시판 > 글쓰기 > 글 작성

[view page]
1.자유게시판
2.자유게시판 > 게시글
[form page]
http://ctf.segfaulthub.com:5498/modify.php?idx=

[process page]
http://ctf.segfaulthub.com:5498/update.php

[view page]
1.http://ctf.segfaulthub.com:5498/board.php?board_id=board
2.http://ctf.segfaulthub.com:5498/read.php?board_id=board&idx=
title [form page]
자유게시판 > 게시글 > 수정 > 수정 완료

[view page]
1.자유게시판
2.자유게시판 > 게시글
[form page]
http://ctf.segfaulthub.com:5498/write.php

[process page]
http://ctf.segfaulthub.com:5498/write_ok.php

[view page]
1.http://ctf.segfaulthub.com:5498/board.php?board_id=notice
2.http://ctf.segfaulthub.com:5498/read.php?board_id=notice&idx=
title [form page]
자유게시판 > 글쓰기 > 글 작성

[view page]
1.공지사항
2.공지사항 > 게시글
[form page]
http://ctf.segfaulthub.com:5498/write.php

[process page]
http://ctf.segfaulthub.com:5498/write_ok.php

[view page]
http://ctf.segfaulthub.com:5498/read.php?board_id=board&idx=
content [form page]
자유게시판 > 글쓰기 > 글 작성

[view page]
자유게시판 > 게시글
[form page]
http://ctf.segfaulthub.com:5498/modify.php?idx=

[process page]
http://ctf.segfaulthub.com:5498/update.php


[view page]
http://ctf.segfaulthub.com:5498/read.php?board_id=board&idx=
content [form page]
자유게시판 > 게시글 > 수정 > 수정 완료

[view page]
자유게시판 > 게시글
[form page]
http://ctf.segfaulthub.com:5498/write.php

[process page]
http://ctf.segfaulthub.com:5498/write_ok.php

[view page]
http://ctf.segfaulthub.com:5498/read.php?board_id=notice&idx=
content [form page]
자유게시판 > 글쓰기 > 글 작성

[view page]
공지사항 > 게시글
[form page]
http://ctf.segfaulthub.com:5498/write.php

[process page]
http://ctf.segfaulthub.com:5498/reply_ok.php

[view page]
http://ctf.segfaulthub.com:5498/read.php?board_id=board&idx=
content [form page]
자유게시판 > 게시글 > 댓글

[view page]
자유게시판  > 게시글
[form page]
http://ctf.segfaulthub.com:5498/write.php

[process page]
http://ctf.segfaulthub.com:5498/reply_ok.php

[view page]
http://ctf.segfaulthub.com:5498/read.php?board_id=notice&idx=
content [form page]
공지사항 > 게시글 > 댓글

[view page]
공지사항 > 게시글

 

Reflected XSS

1) URL : /search_result.php?catgo=&search=, 파라미터 : search

 

페이로드 : <script>alert(1);</script>

 

  자유게시판 페이지에 접속하여 게시판 입력 칸(search 파라미터)에 위의 페이로드를 입력 후 검색 버튼을 클릭한다.

 

 

  스크립트가 작동하는지 확인한다.

 

Stored XSS

1) URL : [form page] /write.php, [process page] /write_ok.php, [view page] /board.php?board_id=board, /read.php?board_id=&idx=, 파라미터 : title

 

페이로드 : <script>alert(1);</script>test

 

  자유게시판 페이지에 접속하고 글쓰기 버튼을 클릭한다. 게시글 제목 입력 칸(title 파라미터)에 위의 페이로드를 입력하고 글 작성 버튼을 클릭한다.

 

 

  자유게시판 페이지(/board.php?board_id=board)에서 스크립트가 작동하는 것을 확인한다.

 

 

  게시글 상세정보 페이지(/read.php?board_id=board&idx=201)에서도 스크립트가 작동하는지 확인한다.