웹 취약점 점검기준 - 3
A4 - Broken Access Control
A4, Broken Access control과 관련된 취약점들은 다음과 같다.
유형 | 설명 |
---|---|
파일 다운로드 | 파라미터 변조를 통해 시스템파일 및 소스코드에 접근하는 것을 의미한다. |
파일 업로드 | 실행 가능한 파일 업로드를 통해 시스템권한을 획득하는 것을 의미한다. |
URL 파라미터 조작 | 게시판에서 사용되는 파라미터 조작을 통해 타인의 글을 위/변조하는 것을 의미한다. |
자바스크립트 우회 | 자바스크립트로 구성한 접근제한 메커니즘을 우회하는 것을 의미한다. |
1. 파일 다운로드
파라미터를 조작(상위 디렉터리 요청)하여 시스템 관련 파일등에 접근하여 해당 파일을 다운로드하는 공격기법을 의미한다.
이를 위해서 운영체제별 상위 디렉터리를 요청하는 패턴을 알아야한다.
구분 | *nix | 윈도우 |
---|---|---|
최상위 디렉터리 | / | 드라이버:₩ |
디렉터리 구분 | / | / 또는 ₩ |
상위 디렉터리 이동 | ../ | ../ 또는 ..₩ |
*nix 계열에서 운영되는 어플리케이션의 경우, ../../
와 같은 문자열을 통해 시스템 파일인 /etc/passwd
에 접근을 시도할 수 있다.
http://xxx.xxx.xxx/xxx.jsp?page=../../../etc/passwd
윈도우 계열에서 운영되는 어플리케이션의 경우, ..₩..₩와 같은 디렉터리 이동 문자열을 통해 윈도우에 존재하는 ₩windows₩boot.ini
파일 접근시도 또한 가능하다.
http://xxx.xxx.xxx/xxx.jsp?page=..₩..₩..₩..₩windows₩boot.ini
Boot.ini란
boot.ini
파일은 윈도우 시스템이 설치된 부트 파티션의 정보를 가지고 있는 파일이다.리눅스에 lilo , grub의 역할을 한다.
즉, 해당 부팅 파일의 경로 또는 파일이 잘못될 경우 부팅이 불가능하다.
물론 사이트의 구조에 따라 윈도우임에도 불구하고 *nix 형태로 접근할 수 있다.
http://xxx.xxx.xxx/xxx.jsp?page=../../../../windows/boot.ini
1) Null byte Injection
C/C++
에서 Nullbyte
문자열(%00, 0x00)은 문자열의 끝을 의미하기 때문에 특정 확장자를 숨기기 위한 목적으로 사용될 수 있으며, 해당 부분의 취약점은 C 루틴을 처리하거나 내부의 C API를 호출하는 함수를 사용하는 경우 발생할 수 있다.
대표적 예시로, C
로 개발된 Perl
의 경우, FILE()
함수에 입력된 값은 마지막 처리단계에서 C Process
로 전달되기 때문에 %00과 같은 널 문자 삽입 공격을 주의해야 한다.
외부로부터의 입력값에 .jpg
를 붙여 처리하도록 구성되어있는 펄 루틴이 존재한다고 가정했을때,
다운로드를 원하는 파일의 확장자가 .jpg
로 끝나야 정상적이다.
즉, 정상적인 URL
형태는 아래와 같다.
http://xxx.xxx.xxx/bbs.pl?file=aaa.jpg
그러나 널바이트와 .jpg
를 같이 삽입할 경우 상기 로직을 우회할 수 있다.
http://xxx.xxx.xxx/bbs.pl?file=../../../../../../../../../../etc/passwd%00.jpg
PHP
또한 C로 개발되었기 때문에 해당 취약점이 발생할 수 있기에 주의하여야 한다.
<?php
$file = $_GET['file'];
include("$file.gif");
?>
위 코드에서 php.gif
를 호출하는 경우, 아래와 같이 호출하여야 한다.
http://xxx.xxx.xxx/bbs.php?file=./php.gif
그러나 널 바이트를 삽입하는 경우 문자열이 끝난줄 알고 .gif
를 무시하기 때문에 아래와 같이 동일한 위치에 있는 log.txt
파일을 읽을 수 있다.
http://xxx.xxx.xxx/bbs.php?file=log.txt%00.gif
대체로 웹 취약점 스캐닝 도구에서는 파일 다운로드 취약점 여부를 판단하기 위해, 디렉터리 이동패턴과 함께 특정 시스템 파일을 호출하고 해당 파일을 읽을때 Response body
에 특정 키워드 boot loader
가 보이면 취약점으로 판단한다.
2. 파일 업로드
게시판과 같은 업로드 기능이 존재하는 폼에서 파일에 대한 검증이 수행되지 않을 경우발생하는 취약점이다.
웹 서버에서 실행 가능한 확장자를 살펴본다.
언어 | 실행가능 확장자 |
---|---|
ASP, ASPX | asp, aspx, htm, html, asa ...etc |
PHP | phtml, php, php3, php4, php5, inc, htm, html ...etc |
JSP, JAVA | jsp, jspx, jsw, jsv, jspf, htm, html ...etc |
Perl | pl, pm, cgi, lib, htm, html ...etc |
ColdFusion | cfm, cfml, cfc, dbm, htm, html ...etc |
1) Content-Type 값 변조
일반적으로 확장자 검사를 통해 파일업로드 공격을 통제하고 있으나, 파일 타입(Content-Type) 변조를 통해 간단한 검증 로 직 우회 시도가 가능하다.
실행파일들을 업로드하는 데이터를 프록시 도구를 통해 가로채면, Content-Type
값은 실행 파일을 의미하는 application/octet-stream
으로 되어있다.
해당 값을 이미지 파일의 파일 타입image/jpeg
으로 변조하여 전송할 경우, 단순한 루틴을 우회할 수 있다.
URL 파라미터 조작
1) 타인 비밀글 보기
사용자는 자신이 작성한 글을 비밀글로 등록하여 작성자 및 관리자만이 볼 수 있도록 설정한 경우가 있으나, 이를 우회하는 방법 또한 존재한다.
이러한 글 들은 열람을 위해 접근 시, 비밀번호를 요구하여 타인의 글 열람을 차단한다.
가장 간단히 시도 가능한 부분은 자신이 직접 글을 쓰고 수정 페이지로 이동한 후, 페이지 이름 및 글 번호를 의미하는 index
값의 변화를 추적하는 것 이다.
/bbs/qna_view.asp?seq=13
자신의 페이지 번호가 seq=13
라고 가정하였을 때, 현재의 글번호를 다른 글번호 ex: seq=11
로 변경하여 타인의 비밀글 접근 가능 여부를 확인해볼 수 있다.
2) 공지사항 글 변조
관리자만이 접근 가능한 공지사항 등은 일반적으로 보기기능 밖에 제공되지 않기 때문에, 주소 및 파라미터 값을 변조하여 접근을 시도해 볼 수 있다.
http://www.xxx.xxxx/bbs.do?cmd=view&no=21
페이지에서 사용되는 cmd
파라미터의 값 view
를 write
로 변경하여 접근을 시도해본다.
/bbs.do?cmd=write&no=21
기능 | 페이지 및 파라미터 이름 |
---|---|
보기 | view |
쓰기 | write |
수정 | modify, modi, edit |
삭제 | del, delete |
4. 자바스크립트 우회
1) 관리자 글쓰기 게시판 우회
관리자만이 접근 가능한 공지사항 페이지에서 "소스보기"를 통해 수정 및 삭제 관련 정보를 획득한다.
function jsDelete() {
if(confirm('~')) {
document.dForm.action = "bbsDelete.do";
document.dForm.submit();
}
}
function jsUpdateForm() {
document.dForm.action = "bbsUpdateForm.do";
document.dForm.submit();
}
function displayComment(datas) {
dwr.util.setValue("bbsCommentTemplate", datas);
}
위와 같은 코드가 존재한다고 가정하였을 때, 삭제는 bbsDelete.do
, 수정은 bbsUpdateForm.do
페이지를 호출하는 것으로 판단해 볼 수 있으므로 관리자 페이지를 호출하는 페이지 정보를 변조하여 접근해본다.
2) 관리자 페이지 우회
일반적으로 일반 권한의 사용자가 관리자 메뉴인 [게시판 생성/관리]를 클릭했을 때 접근 통제 관련된 창이 팝업된다.
여기서 중요한 포인트는 통제 수단을 자바스크립트로 제공하느냐를 판단해 보는 것이다.
클라이언트 사이드 자바스크립트와 서버 사이드 자바스크립트를 구분하는 일반적 방법은 팝업속도로 어느 정도 판단이 가능하다. 접속 시 팝업창이 즉시 발생되는 경우는 웹 브라우저에서 이벤트를 보내는 경우이므로 클라이언트 사이드 스크립트라고 이해하고 접근해도 무방하다.
관리자임을 검증하는 메서드를 찾고 해당 검증 루틴을 모두 삭제하고, True
값을 반환하도록 한다면 관리자 계정 및 암호 없이도 관리자 페이지에 접근할 수 있는 취약점이 존재한다.
3) 파일 업로드 우회
일반적으로 사진 올리기 기능을 제공한다면 그림 파일 형식 (gif, jpg, png ...etc)만을 첨부하도록 하는 검증 루틴이 존재할 것 이다.
이러한 경우 또한 프록시를 통해 클라이언트에서 서버로 전달하는 해당 페이지를 가로채어, 확장자를 정의하는 부분에 whitelist
에 포함되는 확장자를 입력하여 검증 로직을 우회할 수 있다.
'Hacking & Security > Web' 카테고리의 다른 글
웹 취약점 진단 관련 끄적임 (0) | 2020.02.03 |
---|---|
SQLI - Statement & PreStatement (0) | 2020.01.19 |
웹 취약점 점검기준 - Broken Authentication and Session Management (0) | 2020.01.07 |
웹 취약점 점검기준 - Injection (0) | 2020.01.07 |
SQL Injection - 1 (0) | 2019.12.30 |