Sh4n3e
[SQL Injection]SQL 함수(문자열 관련) 본문
문자열 함수
문자열 함수에서 사용되는 문자열의 길이가 MySQL 서버 파라미터 중의 max_allowed_packet 값보다 크면 함수의 결과로 NULL 이 리턴된다. 그리고 모든 문자열 함수에서 문자열의 첫번째 문자의 위치값은 숫자로 1이다. 0이 아님에 유의하자.
또한 참고로 알아둘 것은 일반적으로 얘기할때 '문자' 와 '문자열' 은 의미가 다르다. 여기서 말하는 '문자' 는 한 character 의 문자 즉 문자 하나를 의미하며 '문자열' 은 여러개의 character 로 이루어진 문자열은 의미한다.
ASCII(str)
문자열 str 의 가장 왼쪽에 있는 문자의 아스키 코드값을 가져온다. str 에 문자 대신 숫자가 들어가면 숫자를 문자열 형태로 변환하여 가장 왼쪽 문자의 아스키코드 값을 가져온다.
ORD(str)
문자열 str 의 가장 왼쪽에 있는 문장의 아스키 코드값을 가져온다. 특히 한글과 같이 2byte 이상으로 이루어진 문자에 대해서도 비트연산을 톤해 값을 가져올 수 있다. 따라서 한글과 같은 문자의 아스키 값을 가져올 때 사용할 수 있다.
CONV(N, from_base, to_base)
from_base 진수로 N 인 수를 to_base 진수로 변환한다. 예를 들어 CONV(5, 10, 2) 는 10 진수로 5 인수를 2 진수로 변환한 값 101 을 가져온다.
BIN(N)
N 을 2 진수로 표현한 문자열을 가져온다.
OCT(N)
N 을 8 진수로 표현한 문자열을 가져온다.
HEX(N_or_S)
N_or_S 가 숫자이면 16 진수로 표현한 문자열을 가져오고, N_or_S 가 문자열이면 16 진수 숫자를 가져온다.
CHAR(N, ...)
아스키 코드 값 N 을 문자로 변환한 뒤 합쳐서 하나의 문자열을 가져온다.
CONCAT(str1, str2, ...)
문자열을 합친다. str 이 숫자형인 경우 문자형으로 변환한 뒤 합친다.
CONCAT_WS(separator, srt1, str2, ...)
문자열 사이에 구분자를 두어 합친다.
LENGTH(str) 혹은 OCTET_LENGTH(str) 혹은 CHAR_LENGTH(str) 혹은 CHARACTER_LENGTH(str)
문자열의 길이를 가져온다.
BIT_LENGTH(str)
문자열의 길이를 bit 값으로 가져온다.
LOCATE(substr,str) 혹은 POSITION(substr IN str)
str 에서 substr 이 처름 나타나는 지점의 위치를 가져온다.
LOCATE(substr, str, pos)
str 에서 pos 위치부터 시작해서 substr 이 처음 나타나는 지점의 위치를 가져온다.
INSTR(str, substr)
str 에서 substr 이 처음 나타나는 지점의 위치를 가져온다. 인자 순서만 바뀌었을 뿐 LOCATE(substr,str) 와 기능은 같다.
LPAD(str, len, padstr)
문자열이 len 만큼 길이가 될 때까지 str 의 왼쪽에 padstr 을 계속 붙인다.
RPAD(str, len, padstr)
문자열이 len 만큼 길이가 될 때까지 str 의 오른쪽에 padstr 을 계속 붙인다.
LEFT(str, len)
str 문자열에서 len 길이만큼 왼쪽부터 잘라서 가져온다.
RIGHT(str, len)
str 문자열에서 len 길이만큼 오른쪽부터 잘라서 가져온다.
SUBSTRING(str, pos, len) 혹은 SUBSTRING(str FROM pos FOR len) 혹은 MID(str, pos, len)
문자열 str 에서 pos 위치부터 len 길이만큼 잘라낸다.
SUBSTRING(str, pos) 혹은 SUBSTRING(str FROM pos)
문자열 str 에서 pos 위치부터 끝까지 문자를 잘라낸다.
SUBSTRING_INDEX(str, delim, count)
문자열 str 에서 구분자 delim 의 count 번째 위치만큼 잘라낸다. count 가 양수이면 문자열의 왼쪽에서부터 delim 의 순서를 세고, count 가 음수이면 문자열의 오른쪽에서부터 delim 의 순서를 센다.
LTRIM(str)
문자열 왼쪽의 모든 공백을 제거한다.
RTRIM(str)
문자열 오른쪽의 모든 공백을 제거한다.
TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)
문자열 str 로부터 양쪽으로 모든 remstr 문자열을 제거한다. remstr 이 지정되지 않으면 공백을 제거한다. [BOTH | LEADING | TRAILING] 은 옵션으로서 BOTH 는 문자열 양쪽, LEADING 은 문자열 왼쪽, TRAILING 은 문자열 오른쪽의 모든 remstr 문자열을 제거한다.
SPACE(N)
N 길이만큼 공백을 가져온다.
REPLACE(str, from_str, to_str)
문자열 str 에서 from_str 문자열을 to_str 문자열로 바꾼다. 한글과 같은 다중 바이트 문자에도 잘 적용된다.
REPEAT(str, count)
문자열 str을 count 번 반복하여 가져온다.
REVERSE(str)
문자열 str 을 거꾸로 읽어서 가져온다.
INSERT(str, pos, len, newstr)
문자열 str 을 pos 위치부터 len 길이만큼 자나낸 후 그 자리를 newstr 로 대체한다.
ELT(N, str1, str2 ,str3, ...)
str1, str2, str3, ... 중 N 번째 문자열을 가져온다. ELT() 함수는 FIELD() 함수와 상호보완된다.
FIELD(str, str1, str2, str3, ...)
str1, str2, str3, ... 중 str 이 몇번째 문자열인가를 가져온다.
FIND_IN_SET(str, strlist)
컴마 (,) 로 구분된 문자열 strlist 에서 str 이 몇번째 문자열인가를 가져온다. 문자열 str 에 컴마가 들어가 있으면 제대로 동작하지 않는다.
LCASE(str) 혹은 LOWER(str)
문자열 str 은 소문자료 변환한다.
UCASE(str) 혹은 UPPER(str)
문자열 str 을 대문자로 변환한다.
LOAD_FILE(file_name)
시스템 파일로부터 값을 읽어들인다. 이 때 파일은 시스템에 존재해야 하며, file_name 은 절대 경로로 표시되어야 한다. 또한 file 은 시스템의 읽기 권한이 있어야 하며 MySQL 사용자는 user 테이블의 FILE 권한이 있어야 한다. 이 조건들을 만족하지 못할 경우 NULL 을 가져온다.
QUOTE(str)
문자열 str 에 작은 따움표 (') 가 들어 있으면 SQL 문장이 문법적으로 잘못될 수 있다. 예를 들어 INSERT 문에서 저장할 문자열 데이터에는 따움표 (') 를 붙이는데 데이터 자체에 따움표가 들어 있는 경우 따움표가 중복되어 INSERT 문이 제대로 실행되지 못한다. 그러한 경우를 방지하기 위해 QUOTE() 를 사용한다. QUOTE() 는 문자열에 작은 따움표가 있으면 앞에 역슬패쉬 (\) 를 붙여서 작은 따움표 문자(\') 로 변환시켜주는 함수이다.
'Web Hacking > SQL Injection' 카테고리의 다른 글
[SQL Injection] DVWA로 알아보는 SQL INJECTION 2 (0) | 2018.04.25 |
---|---|
[SQL Injection] DVWA로 알아보는 SQL INJECTION 1 (0) | 2018.04.24 |