본문 바로가기

SQL Injection4

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.
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.