본문 바로가기

Security/Web Hacking

No.7 SQL 인젝션 공격 실습

SQL인젝션 공격 실습법의 종류

 

1.인증 우회

=> 말  그대로 우회 즉 돌아서 인증을 거치겠다는 것입니다.

SQL의 가장 대표적인 공격법입니다.

 

한번 알아보겠습니다

가. OR연산 이용

즉 입력 폼에 'or'1='1문을 입력하여 결과값을 참으로 하는 법입니다.

 

예를들어

아이디를 TEST_ID로 하고 패스워드를 test'or'1'=1'을 입력하게 되면 어떻게 될까요?

데이터베이스에 요청하는 쿼리문은 최종적으로

select * from member where id = 'TEST_ID' and bPass\'test'or'1'='1' 과 같이 전달되고

삽입된 or조건에 의해서 or 앞이나 뒤의 두 조건중 단 하나라도 참이면 결과값이 참이 전달이 되어 로그인이 가능하게 되는것입니다.

 

여기서 주의해야 하실점은 (') 의 사용입니다.

위의 예제에서도 보시다시피

문법상 (')은 2개를 사용하셔야 되죠?  그래서

패스워드 입력시에 test' or 1'1='1 등이 입력되는것입니다.

만약 test'or'1'=1 이 되면 문자열 앞에 닫히지 않는 인용부호가 있다는 에러가 발생되게됩니다.

(허나 요즘 싸이트 대부분은 이런에러를 보여주지않습니다^^)

 

과연 저 위에 or대입법만 존재하냐 그것은 아닙니다

어떤 종류가 더있는지 알아보겠습니다.

or 'usual'='usual'

or'ab'='a'+'b'

or'anything'like'any%'

or2>1

or'test'>'t'

or'whatever'IN('whatever')

or2between1and3

 

등이 있습니다.

 

과정을 좀더 자세히 살펴보면 연산자 우선순위에 의해 and는 or보다 먼저 계산이 됩니다 즉.

bId='TEST_ID' and bPass='test'가 먼저 계산되어 결과가 FALSE가 되고 그 후 FALSE or (1=1)이 그다음 계산 되어 즉, FALSE or TRUE가 되어 결과적으로 TRUE가 되어

테이블의 모든값을 가져옵니다.

이때

주의 깊게 보셔야될껀 관리자 즉, admin계정은 거의 테이블의 가장 상위에 위치하고

결과적으로 TEST_ID의 비밀번호를 우회 접속했으나 결과는 admin계정 권한을 얻어 올수 있다는 것입니다.

 

나. 주석문을 이용한 admin 로그인 

 

주석문을 이용해 뒤에것을 무시해보자 라는 취지에서 나온 공격법입니다. 

ex.1)select * from member where bid='admin' and bPass='test' or '1'='1'

ex.2)select * from member where bid='admin'--and bPass=''

ex.3)select * from member where bid='admin'

 

자 ex1위 문을 ex2처럼 바꾸면 'admin'-- 이후에 bPass는 아예 무시

ex3처럼 변하게 되고 비밀번호 없이 바로 로그인이 가능합니다. 

 

'Security > Web Hacking' 카테고리의 다른 글

No.9 SQL인젝션 방어법  (0) 2012.07.11
No.8 SQL인젝션 공격 실습(2)  (0) 2012.07.11
No.6 SQL인젝션 알아보기  (0) 2012.07.11
No.5 WebHacking의 시작 WebGoat설치  (0) 2012.07.11
No.4 XSS 공격 실습  (0) 2012.07.11