2017-01-09 1 views
-2

이 SQL 주입 문제에 대한 약간의 도움이 필요합니다.매개 변수가있는 프로 시저로 SQL 주입

다음은 매개 변수화 된 저장 프로 시저의 버전입니다. @v_string이 동적 SQL로 취급되지 않도록하려면 어플리에서 호출하는 방법을 제외하고 있습니까?

저는 이것이 상당히 단단하다고 생각합니다. 실행되거나 연결된 SQL이 없지만 세미콜론을 삽입해도 추가 데이터가 반환 될 수 있습니다.

나는이 질문을 고려하기 위해 여러 단계를 알고 있지만 주입 질문의 대다수가 동적 쿼리와 관련되어 있기 때문에 누락 된 몇 가지 간단한 해결책이 있는지 알고 싶습니다.

create table dbo.Employee (EmpID int,EmpName varchar(60)) 


declare 
    @v_id int, 
    @v_string varchar(60) 
begin 

    set @v_string='test'''; waitfor delay '0:0:5' -- 

    if @v_id is null 

    begin 
     set @v_id =   (select EmpID 
           from  Abc.Employee 
           where [email protected]_string); 
    end 


    print @v_id 
end 
+0

SP가 사용자가 직접 제공 한 쿼리의 매개 변수를 사용하고 select 문에 직접 연결되어있는 경우에만 문제가 발생할 수 있습니다 (매개 변수). –

+0

"세미콜론을 삽입하면 추가 데이터가 반환 될 수 있습니다." 그 일이 어떻게 일어날 지 모르겠습니다. 이 세미콜론을 삽입하는 위치와 그로 인해 추가 데이터가 반환된다는 것을 어떻게 알 수 있습니까? –

+0

select * with sys.databases –

답변

2

동적 SQL로 처리되는 것을 방지 할 @v_string 어쨌든 무엇입니까?

나는 T-SQL 코드가 EXECUTE 또는 EXECUTE sp_executeSQL에는이 없기 때문에 @v_string 여기에 동적 SQL로 취급 기대하지 않을 것이다. 이 값은 실행되지 않지만 SQL 주입에 취약하지 않은 WHERE 절 값으로 처리됩니다.

이 질문에 답하지 않으면 동적 SQL로 취급되는 값을 나타내는 전체 예제를 게시하십시오.

+0

위와 같이 :'@ v_string = 'test' ''; waitfor delay '0 : 0 : 5'- 전달 된 값입니다. 내가 볼 수있는 한 두 번째 집합이 삽입 된 SQL이 실행됩니다. –

+0

@v_string 값이 쿼리에 전달되지만 값 within은 실행되지 않습니다. 업데이트 된 질문의 코드에 우려되는 문제가 표시되지 않습니다. –

2

자신 만의 테스트로 혼란스러워하고 있습니다. 라인은 :

set @v_string='test'''; waitfor delay '0:0:5' -- 

test'@v_string의 문자열을 작성하고 waitfor delay '0:0:5'을 실행한다. 실제 Employee 쿼리가 실행 중입니다. 당신이 당신의 추가 예제를 그대로 쿼리를 실행 그래서 경우

:

set @v_string='test'''; select * from sys.databases 

... 무엇이 일어날 것인가하는 코드의 라인은 즉시 select * from sys.databases을 실행 test'@v_string을 설정합니다 입니다. 나머지 코드는 실행되어 실제 선택이 실행됩니다. 그래서 당신은 Employee 쿼리의 결과 다음select * from sys.databases의 결과를 볼 수 있습니다,하지만 당신이 실제로 실현하지 않고 프로 시저에 문 select * from sys.databases을 하드 코딩 때문이 문자열을 원하는 경우는

을 :) @v_stringtest'; waitfor delay '0:0:5'으로 설정하면 got the string quoting이 잘못되었습니다.

set @v_string='test''; waitfor delay ''0:0:5''' 
+0

실제로 구문 강조에서 볼 수 있습니다. – Ben

관련 문제