ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Union SQL Injection
    IT/웹 해킹 2024. 1. 9. 19:49

    [이 블로그는 해킹 공부하면서 가볍게 정리용으로 기록 및 내 생각을 끄적여 두기 위한 블로그(라 쓰고 일기라 읽는)이다.]

    • 목차
    1. Union SQL Injection 이란
    2. Union SQL Injection Process

    1. Union SQL Injection 이란

    SQL에서 Union 문법은 여러 개의 질의문을 하나로 합쳐서 질의하는 것이다. (각 질의문의 컬럼 개수는 같아야 한다는 주의 사항이 있다. 같지 않으면 문법 오류가 나게 된다.) 만약 Test로 SQL Injection을 해봤을 때 작동한다면 이를 이용하여 기존의 질의문에 Union 문법을 적용하여 다른 질의문을 추가로 덧 붙여서 원하는 데이터를 탈취하는 것이다.

     

    2. Union SQL Injection Process

    • Union SQL Injection Point 찾기
    • Column 개수 확인
    • 출력 Column 확인
    • DB 이름 확인
    • Table 이름 확인
    • Column 이름 확인
    • Data 추출

    1) Union SQL Injection Point 찾기

    우선 공격을 위해선 SQL 쿼리문을 삽입하여 질의문이 작동하는지 확인할 필요가 있고 Data가 제대로 출력이 되는지 확인이 되어야한다.

     

    Union SQL Injection을 연습할 수 있는 예제 사이트

     

    우선 Placeholder에 Overwatch라고 써져 있는 것을 볼 수 있다. 여기에 Overwatch라고 입력해 보면?

     

     

     

    이렇게 column name이 Overwatch라는 데이터가 추출됐다. Server Side SQL Query라는 서버 측 코드를 펼쳐보면 아래 스크린샷과 같이 나온다.

     

     

     

    여기서 SQL문이 통하는지 Test 구문을 삽입해 보자.

     

     

     

     

    그러면 이렇게 overwach를 검색했을 때 나온 결과가 똑같이 나오는 것을 볼 수 있다. (여기서 like문은 부분적으로 일치하는 column을 찾을 때 쓰는 문법이며 % 와 같이 사용한다.)

    그럼 이제 여기는 Union SQLi를 적용할 수 있는 Point 인 것이다.

     

    2) Column 개수 확인

    컬럼 개수를 확인할 때는 order by 트릭을 이용하면 된다. 보통 order by로 정렬을 할 때 컬럼이름을 쓰고 asc나 desc로 오름차순 또는 내림차순 정렬을 시켜주는데 열의 숫자로 정렬을 해줄 수도 있다. order by 1 은 '1번째 열로 정렬하라'라는 뜻이다. 그럼 여기에서 이제 트릭을 눈치챌 수 있다. 만약 5번째 열이 없다면? 그러면 오류가 나게 된다. 그렇다면 column의 개수는 4개인 것이다.

     

     

     

    3) 출력 Column 확인

     

     

     

    이렇게 union 구문으로 select를 사용하여 각 컬럼에 데이터를 삽입한 화면이다. 여기서 첫 번째 컬럼은 존재하지만 데이터는 출력되지 않는 컬럼으로 확인된다. 이곳에는 데이터를 추출하기 위한 구문을 넣지 않도록 하자.

     

    4) DB 이름 확인

     

     

     

    두 번째 컬럼에 database의 이름을 알아내는 쿼리를 삽입한다. 그러면 두번째 컬럼의 데이터가 출력되는 자리에 DB이름이 나오게 되는 화면을 볼 수 있다.

    삽인한 쿼리문 : database()

     

    5) Table 이름 확인

     

     

     

    테이블 이름을 확인할 수 있는 쿼리문을 삽입한다.

    삽인한 쿼리문 : table_name from information_schema.tables where schema = 'db이름'

     

    6) Column 이름 확인

     

    컬럼이름을 확인할 수 있는 쿼리문을 삽입한다.

    삽입한 쿼리문 : column_name from information_schema.columns where table_name = 'table이름'

     

    7) Data 추출

     

     

     

    획득한 정보를 바탕으로 secret 테이블에서 컬럼정보를 넣어 데이터를 추출하면 끝!

     

     

    'IT > 웹 해킹' 카테고리의 다른 글

    Blind SQL Injection  (1) 2024.01.10
    Error Based SQL Injection  (1) 2024.01.10
    SQL Injection  (2) 2024.01.09
    버프스위트(burp suite) 간단 사용법_Decoder  (0) 2024.01.08
    버프스위트(burp suite) 간단 사용법_Repeater  (1) 2024.01.08
Designed by Tistory.