안규 공부방

security > fliedownload hacking 파일다운로드 해킹

등록일 : 2017-06-30 15:14 조회수 : 93,500

다음은 파라미터로 적절치 않은 값을 넘겨주는 예를 알아볼 것이며, 파일 업로드, 다운로드 취약점에 대해 공부해 보겠습니다 ^^ 동적으로 어떤 특정 파일을 열어 그 파일 내용을 웹에서 보여주는 ASP가 있다고 합시다 대량의 html이나 txt 파일들을 읽어 웹에서 보여주는 로직들이 많지요
(저도 많이 썼습니다 -_-;)

동적으로 그 파일에 대한 정보를 파라미터로 읽어온다면 어떻게 될까요?
Response.ContentType = "application/unknown"

VFilePath = Request("FilePath")
FilePath = Server.MapPath(VFilePath)

set fso=Server.CreateObject("SiteGalaxyUpload.filesystemobject")
set file= fso.OpenBinaryFile(FilePath,1,false)
Response.BinaryWrite file.readall

Set fso = nothing
Response.End
다음과 같은 요청을 보낸다면.. http://localhost/file.asp?FilePath=/default.asp



충격적이게 서버에 있는 default.asp 파일의 소스 내용이 모두 다운되는걸 확인할 수 있습니다.
언젠가 해킹자료를 찾아보던중 어느 개발자분이 써 놓은 글을 읽은적 있습니다.
아무리 좋은 방화벽이 있더라도, 개발에 최일선에 있는 개발자가 대충 대충 개발한다면, 그 웹싸이트는 안전하지 못하다.
그러므로, 해킹에 대한 모든 책임은 개발자에게 있다.....
그리고, 이런글도 적었습니다....
자기가 아는 어느분은 방화벽같은 기존 장비를 쓰지 않고도 웹해킹을 거의 완벽하게 막을 수 있게 소스작업을 하고, 또 거의 100%로 웹 해킹을 막고 있다....
이런 글을 읽고 참 충격이였습니다.
나도 개발기간은 오래됐지만, 해킹에 대해 깊게 생각하지 않고, 시간에 쫓겨 대충 대충 코딩을 했거든요..
위의 파일다운로드 소스는 어떤식으로 막아야 할까요...???
아래와 같은 소스를 추가시켜, 해킹에 대비해야 할것 입니다.
Response.ContentType = "application/unknown"

down_path = "/up_file"

VFilePath = down_path & Request("FilePath")

if instr(VfilePath,"../")>0 then
	Response.write "잘못된 접근입니다."
	Response.end
end if

FilePath = Server.MapPath(VFilePath)

set fso=Server.CreateObject("SiteGalaxyUpload.filesystemobject")
set file= fso.OpenBinaryFile(FilePath,1,false)
Response.BinaryWrite file.readall

Set fso = nothing
Response.End
먼저 down_path = "/up_file" 부분은 다운로드할 기본적인 폴더명 입니다.
보통 다운로드할 파일은 특정한 폴더 밑으로 업로드가 됩니다.
여기에서는 up_file 폴더에 모두 올려져 있기 때문에 이 폴더 밑에 있는 파일만을 다운로드 하게 안전장치를 넣었습니다.

http://localhost/file.asp?FilePath=/default.asp 위와 같이 경로를 /default.asp 을 다운받으려고 할때, 프로그램에서는 자동으로 /up_file/default.asp 파일을 찾을려고 할것 입니다.
그럼, 파일이 존재하지 않기 때문에 에러를 발생하게 될것입니다.
그러나, 이 부분만 추가한다면 또 다른 구멍이 생깁니다.
예를 들어 http://localhost/file.asp?FilePath=/../default.asp 이런식으로 FilePath 값을 던지면 어떻게 될까?
모두들 알다시피, ../ 명령은 상위폴더로 이동하라는 명령이 됩니다.
그럼, /up_file/../default.asp 경로가 되어서 마찬가지로 루트에 있는 default.asp 파일을 다운로드 할 수 있습니다.

../ 문자가 들어 왔을때, 넘어본 파일문자열을 필터링 하게 됩니다. 아무쪼록 해킹에 대비를 잘 하시기 바랍니다.
※ 혹시 도움이 되셨다면 댓글에 한마디 남겨주세요!
작성자   비밀번호
자동글 방지     (자동글 방지 기능입니다.)
내용   댓글달기 
이메일 문의 : cak0280@nate.com  
Copyright 2000 By ENTERSOFT.KR All Rights Reserved.