본문 바로가기

Web/SQL Injection6

DB 종류, 버전 알아내기 1. 쿼리 실행 결과가 출력되는 경우DBMS에서 지원하는 환경 변수 값을 이용하여 버전 출력하기SELECT @@versionSELECT version()애플리케이션에서 실행하면서 에러 메세지를 출력하는 경우, 에러 메세지에서 버전 정보 알아내기SECLECT 1 UNION SELECT 1,2;MySQL => ERROR 1222 (21000): The used SELECT statements have different ~~~.애플리케이션에서 쿼리 실행결과로참 거진 여부만 출력할 경우, Blind SQL Injectionmid(@@version, 1, 1)='5';substr(version(), 1, 1)='P';2. 쿼리와 관련된 어떠한 결과도 출력하지 않는 경우시간 지연 이용sleep(10)pg_sleep.. 2024. 8. 15.
System table 정보 수집은 모의 해킹에 있어서 가장 중요한 단계 중 하나. 공격 대상이 사용하는 웹 서버와 개발 언어, DBMS와 내부 정보 등을 알아내는 과정이 이에 해당되는데 SQL Injection 취약점이 존재하는 경우  System table을 활용할 수 있다. 모든 DBMS에는 데이터베이스의 정보를 포괄하는 시스템 테이블이 존재한다. 시스템 테이블에는 설정 및 계정 정보 외에도 테이블과 칼럼 정보, 그리고 현재 실행되고 있는 쿼리의 정보 등 다양한 정보를 포함하고 있다.  실제로 SQL Injection을 수행할 때 특정 계정이나 비밀번호를 알아내기 위해 쿼리를 삽입하는 경우, 해당 정보가 포함된 테이블명과 칼럼명을 알아야 하기 때문에 이를 모르는 경우에 시스템 테이블을 먼저 공격하여 해당 정보를 알아낼 수.. 2024. 8. 15.
Error & Time based SQL Injection 게시판 서비스에서 SQL Injection 취약점이 발견되면 게시글의 제목, 본문 등 쿼리의 결과가 출력되는 부분을 통해 DB의 정보를 추출할 수 있는데, 이와 달리 쿼리의 결과가 출력되지 않아 공격자가 확인하지 못하는 경우 Error &Time based SQL Injection을 이용할 수 있다.Error based SQL Injection임의로 에러를 발생시켜 정보를 획득하는 공격 기법사용자가 데이터 입력을 받는 폼에 잘못된 쿼리를 삽입하게 되면 문법 에러가 발생되고 에러 메세지와 같은 결과는 직접적으로 노출되지 않는다. 에러를 이용하여 공격을 하려 한다면 이와 같이 DBMS에서 쿼리가 실행되기 전에 발생하는 에러가 아닌 런타임(Runtime) 즉, 쿼리가 실행되고나서 발생하는 에러가 필요하다.SE.. 2024. 8. 7.
Blind SQL Injection Blind SQL Injection쿼리의 실행 값이 화면에 출력되지 않을 때 사용하는 SQL Injection 기법스무고개와 유사한 방식의 공격 1. Leak lengthSELECT * FROM user WHERE username='admin' and  length(password)=n --1' and password='1'username이 'admin'이면서 password의 길이가 n인 user를 SELECTLogin Fail => password.length != nLogin Success => password.length == n2. Leak charatersSELECT * FROM user WHERE username='admin' and  ascii(substr(password,n,1) = 65.. 2024. 8. 6.
UNION / Subquery 1. UNION다수의 SELECT 구문의 결과를 결합하는 절쿼리의 결과 값이 화면에 출력될 때 유용하게 사용할 수 있으며 실제로도 많이 발생하는 취약점이다.SELECT title, content, user FROM board WHERE idx-1 UNION SELECT 1,2,3  SELECT title, content, user FROM board WHERE idx-1 UNION SELECT 1, password, 3 FROM users where id="admin"  1.1 주의SELECT 구문과 UNION을 사용한 구문의 칼럼 개수가 같아야 한다.SELECT title, content, user FROM board WHERE idx-1 UNION SELECT 1,2,3 특정 DBMS에서는 SELEC.. 2024. 8. 6.
DML SQLDDL (Data Definition Language), DML (Data Manipulation Language), DCL (Data Control Language) 총 세 가지의 질의 언어를 제공하며 그중 DML은 DB에서 조회, 추가, 삭제,수정을 수행하는 구문으로 대다수의 기능을 처리한다.SELECT   SELECT uid, title, boardcontent FROM board WHERE boardcontent like '%abc%' ORDER BY uid DESC LIMIT 5;  board 테이블에서 uid, title, boardcontent 값을 조회하는데,조건(WHERE) = boardcontent 데이터에 "abc" 문자가 포함되어 있어야하고정렬(ORDER BY, DESC) = .. 2024. 8. 6.