이 블로그는 개인적인 공부 목적으로 정리한 내용입니다.
설명에 틀린 부분이 있을 수 있으며 잘못된 부분에 대한 지적은 언제나 환영입니다.
저번 포스팅에서는 SQL Injection의 기본 원리와
공격 기법 중 하나인 UNION SQL Injection에 대해서 알아봤습니다.
이번에는 Normaltic님께서 제공해 주신 SQL Injection을 활용해서 풀 수 있는
CTF 문제풀이를 해보겠습니다.
SQL Injection 1번 비밀 데이터를 찾아내라!

1번 문제입니다. 게시판이 있고 User ID를 검색할 수 있고
아래에는 각 사용자마다 ID, Level, Rank Point, Rate 이렇게 정보가 있네요.
저번 포스팅때 얘기했던 데로 SQL Injection을 위한 7단계 프로세스로 접근해 보겠습니다.
SQLi 7단계 프로세스를 알고 싶은 분들은 아래 링크를 통해서 이전 포스팅을 참고해 주세요!
2023.12.03 - [모의해킹] - 데이터 추출! UNION SQL Injection 공격
데이터 추출! UNION SQL Injection 공격
이 블로그는 개인적인 공부 목적으로 정리한 내용입니다. 설명에 틀린 부분이 있을 수 있으며 잘못된 부분에 대한 지적은 언제나 환영입니다. 저번 포스팅에서는 SQL Injection 원리에 대해서 알아
teng2.tistory.com
1. SQLi 포인트 찾기
당연히 SQL Injection CTF니깐 가능하겠지만 그래도 실무에서는 포인트를 찾아야 하기에
한번 bello' and '1'='1' # 과 bello' and '1'='2' # 을 넣어보겠습니다.
실제로 넣어보니 첫 번째는 참이라 bello에 대한 결과가 나오고 두 번째는 거짓이라 나오지 않습니다.
그렇다는 건 SQLi 공격이 가능할 가능성이 큰 지점이라는 것입니다.
2. column 개수 찾기
그다음은 column 개수를 찾아봐야겠죠? order by를 이용해서 찾아보겠습니다.
bello' order by 1 # 부터 4까지는 조회가 되는데 5부터는 조회가 안됩니다.
그 말은 column은 4개까지 있다는 얘기죠! column 개수도 찾았으니 다음으로 넘어가겠습니다.
3. 출력되는 column 위치 확인
column 위치를 확인하기 위해 union select를 사용해 볼게요!

column 개수가 4개인걸 확인했기 때문에 bello' union select 1,2,3,4 # 이렇게 입력할 수 있었고요
보시는 거와 같이 column 위치도 확인 가능합니다.
4. DB이름 알아내기
SQL에서 DB이름을 출력해 주는 명령어는 SELECT database()입니다.
UNION SELECT을 통해 DB이름을 알아내보도록 하겠습니다.

4를 빼고 database()를 넣으면 4번 자리에 DB 이름이 나오게 됩니다.
5. table이름 알아내기
저번 포스팅에서 information_schema라는 데이터베이스에
tables라는 테이블에 table명이 저장되어 있다고 했습니다.
그래서 아래와 같은 명령어를 사용하면 talbe이름을 알아낼 수 있습니다.
select table_name form information_schema.tables where table_schema = ‘DB이름’

그럼 위와 같이 table 이름을 알아낼 수 있습니다.
6. column 이름 알아내기
이제 5번에서 알아냈던 table이름을 통해 column이름도 알아낼 수 있습니다.
똑같이 information_schema라는 데이터베이스 안에 columns라는 테이블에 column의 정보가 있습니다.
아래처럼 입력하면 조회가 가능하겠죠
select column_name from information_schema.columns where talbe_schema = 'DB이름' AND table_namet = ‘테이블이름’

그럼 위처럼 column이름까지 알아냈습니다.
7. 데이터 추출
자, 그럼 정보는 다 모였고 정보를 활용해서 원하는 데이터를 추출하면 됩니다.
select을 이용해서 원하는 DB안에 원하는 table안에 원하는 column의 데이터를 조회해 보면 되겠죠?

그럼 이렇게 flag가 나왔습니다!
이렇게 노말틱님 SQL Injection 1번 CTF 문제풀이를 해봤습니다.
포스팅할 때 flag는 가려달라 하셔서 가렸어요!
풀어보면 풀어볼수록 CTF 문제풀이는 재미있는 거 같습니다.
다음 포스팅에서는 또 다른 문제를 들고 오겠습니다
'모의해킹' 카테고리의 다른 글
| DB랑 업&다운게임? Blind SQL Injection (0) | 2023.12.09 |
|---|---|
| Error를 이용해서 데이터 탈취! Error Based SQL Injection (2) | 2023.12.08 |
| Normaltic님의 SQL Injection 2번 CTF 문제풀이 (4) | 2023.12.07 |
| 데이터 추출! UNION SQL Injection 공격 (4) | 2023.12.03 |
| 인증 우회! SQL Injection의 원리 (2) | 2023.11.23 |