SQLi 데이터 추출
sql 질의문의 결과가 화면 상에 출력되는 경우와,
화면 상에 출력되지 않는 경우는 다른 방식으로 SQLi 공격을 해야한다.
sql 질의문 결과가 화면에 출력 되는 경우 : UNION sqli 공격
step 1. 공격 서버의 쿼리문 추리
select ???? from ???? where ???? 까지 추리하는 건 어렵지 않다.
step 2. 취약점 확인
간단한 and 문 (ex) and '1'='1 을 넣어서, sqli 공격을 가늠한다.
step 3. 컬럼(column)개수 확인
union문을 쓰려면 union문 양 옆의 select문의 컬럼 개수가 같아야 한다.
이를 위해 order by 구문을 활용한다.
만약 order by 1, order by 2 입력했을 때는 정상 출력되고, order by 3을 입력했을 때 에러 뜬다면 해당 데이터가 속한 컬럼은 2개라는 뜻이다.
step 4. data 출력 위치 파악하기
화면에 출력되는 데이터가 몇 번째인지 파악한다.
위에서 컬럼 개수를 알았으니 union select '1', '2', (...컬럼 개수만큼) 넣으면 쉽게 알 수 있다.
step 5. 데이터베이스 이름 확인
select database() 를 이용한다. 이때 위에서 알게 된 데이터 출력 위치에 맞게 넣으면 된다.
step 6. 테이블 이름 확인
다음 구문을 이용한다.
select table_name from information_schema.tables where table_schema = '데이터베이스 이름'
따라서 아래의 예시는
watch%' union select '1',table_name,'3','4' from information_schema.tables where table_schema = 'segfault_sql' #
을 입력했을 때 화면이다.
step 7. 컬럼 이름 확인
다음 구문을 이용한다.
select column_name from information_schema.columns where table_name='테이블 이름'
아래의 예시는
watch%' union select '1',column_name,'3','4' from information_schema.columns where table_name='secret' #
을 입력해서 secret 테이블의 컬럼을 출력한 화면이다.
step 8. data 추출
이제 원하는 데이터를 select를 이용하여 추출하면 된다.
'Hacking_study > 해킹과제' 카테고리의 다른 글
Error based SQL injection (0) | 2023.05.01 |
---|---|
로그인 로직 및 각 로직의 우회, 공격 기법(1) (0) | 2023.04.22 |
워게임 만들기! (Lv2. 응답변조. 미완..) (0) | 2023.04.16 |
워게임 만들기! (Lv1. 브루트포스) (2) | 2023.04.16 |
워게임 만들기! (Lv0. process jump) (0) | 2023.04.16 |