ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • baby-union
    개인공부/드림핵 2025. 1. 2. 00:20

    이번 문제의 경우 Union Based SQL Injection 공격을 통해 FLAG를 획득하는 문제이다.

     

    [문제 해결]

    1. 문제 서버 접속

     

    윗 부분에 로그인 시 어떠한 쿼리를 이용하는지에 대한 쿼리문이 적혀 있다.

     

    이를 참고하여 SQL Injection 공격을 시도해본다.

     

     

    로그인 검증을 우회하는 SQL Injection 구문을 사용하였고 그 결과 현재 db에 저장되어 있는 모든 user들의 id가 노출된 것을 확인 하였다.

     

    이 공격을 통해 알 수 있는 사실은 해당 웹페이지가 SQLI 공격에 취약하다는 사실이다.

     

    2. Union Based SQLI(컬럼 수 확인)

    Union Based SQLI 공격에서 가장 중요한 점 중 하나는 컬럼의 수와 데이터 타입을 일치시켜야 한다는 것이다.

     

    만일 일치하지 않는 다면 동작하지 않는다.

     

    우선 컬럼의 수를 알아내기 위해 쿼리문을 입력한다.

     

    컬럼의 수를 한개라고 가정하고 쿼리문을 생성하였고 그 결과 아래와 같은 결과가 리턴되었다.

     

     

    에러가 발생하였기 때문에 컬럼의 수는 1개보다 더 많다는 것을 알았다. 수를 점점 증가시켜가며 확인을 진행한다.

     

     

     

    이를 통해 컬럼의 수가 4개라는 것을 알았다.

     

    이제 Union Based SQLI 공격을 수행하면 된다.

     

    보통 공격의 흐름은 DB->TABLE->COLUMN->DATA 순으로 진행한다.

     

    3. Exploit

    database()를 이용하여 현재 사용중인 데이터베이스를 알아 낼 수도 있지만 이번 문제의 경우 information_schema를 이용하였다.

     

     

    위와 같은 쿼리문을 upw 입력란에 입력하여 쿼리를 실행시켰고 아래와 같은 결과를 통해 현재 DB에 생성되어 있는 TABLE들에 대한 리스트를 확인했다.

     

     

    onlyflag라는 테이블이 의심스럽다.

     

     

    위 쿼리문을 이용하여 onlyflag 테이블 내의 컬럼들에 대해 조회했다.

     

     

    확인된 컬럼들에 대한 데이터를 아래와 같은 쿼리문을 이용하여 조회했다.

     

     

    그 결과로 아래와 같은 FLAG 조각들을 획득했고 이를 이어붙일시 최종 FLAG 획득이 가능하다.

     

     

    이 문제를 풀때 테이블 명 확인 후 컬럼을 조회할때 오류가 계속 발생해 해멨었는데 table_name='onlyflag' 부분에 작은 따옴표를 쓰지 않아서 그랬다.

     

    문자열을 표현할때 작은 따옴표 또는 큰 따옴표를 써야 문자열로 인식하는데 이걸 쓰지 않아서 컬럼 이름이나 변수 이름으로 인식하여 쿼리문이 계속 오류가 났던거였다.

     

    다음에는 주의가 필요하다.

    '개인공부 > 드림핵' 카테고리의 다른 글

    random-test  (0) 2025.01.18
    Type c-j  (0) 2025.01.04
    BypassIF  (0) 2025.01.01
    what-is-my-ip  (0) 2024.12.31
    Where-is-localhost  (0) 2024.12.31
Designed by Tistory.