Today I Learned …
[수업] 3주차 정리 본문
* 해당 주차의 수업 내용을 정리합니다.
0. 들어가기 전
[1] SQL Injection
① 인증 우회 (지난 주)
② 데이터 추출 (이번 주)
[2] SQL Injection Wargame : Lord of SQL Injection
⇒ 현장은 또 다르기 때문에 직접 개발한 웹에서의 실습도 중요하다.
[3] 보고서 관련 TIP
① SQLi 공격 연구 보고서 안에 크게 세개의 카테고리가 있게끔 한다.
⑴ SQLi 개념, 원리...
⑵ 인증 우회
⑶ 데이터 추출
② 구성 및 디자인
⑴ 표지 페이지
⑵ 단락 (스타일 사용 : 제목1, 제목2 등... 디자인 맘에 안들면 스타일을 수정해서 자신만의 템플릿 만들어보기)
⑶ 기본 여백 보다 좁게 (레이아웃 - 여백 - 좁게)
⑷ 페이지 번호 매기기 (바닥글로)
⑸ 머리글 추가 (표 삽입해서 메타 데이터 보여주기)
⑹ 그림과 표 너비 일정하게 (그림형식 - 너비)
⑺ 보고서의 글씨 크기와 그림의 글씨 크기가 비슷하게
⑻ 그림 테두리도 표 테두리와 동일하게 (전체적인 통일감 부여)
⑼ 그림 - 캡션 삽입 (필드 업데이트 활용)
⑽ 캡쳐할 때 팁 ⇒ 픽픽 사용해보기
1. SQLi 데이터 추출에는 2가지 타입이 있다.
[1] SQL 질의문 결과가 화면에 보이는 곳
⇒ 게시글 검색, 주소 검색 기능 등
⇒ Union SQLi를 사용한다.
[2] SQL 질의문 결과가 화면에 보이지 않는 곳
⇒ 로그인, ID 중복 체크 등
⇒ Blind SQLi를 사용한다.
[+] Error 메시지가 출력되는 경우
⇒ Error Based SQLi를 사용한다.
2. SQL Injection의 종류
데이터 추출이 쉬운 순서이다.
① Union SQLi
② Error Based SQLi
③ Blind SQLi
3. Union SQLi
[1] Union
① [SELECT ~] UNION [SELECT ~]
② 메인쿼리와 서브쿼리의 컬럼수가 같아야한다.
[2] 공격 순서
① Step1. 취약점 확인
⒧ 문자열 합치기
⑵ and 1=1 추가
⇒ 이것저것 시도해봤을 때 출력에 문제가 없으면 취약할 가능성이 있음.
② Step2. 컬럼 개수 알아내기 (Order By)
⑴ SELECT [컬럼명들] FROM ... ORDER BY [컬럼명] [ASC / DESC]
⇒ ORDER BY 뒤에는 컬럼명 말고 인덱스를 적어줘도 됨 (1부터 시작)
⇒ ORDER BY 6까지는 조회가 되고, 7부터는 안된다? 「컬럼이 6개라는 뜻」
③ Step3. Data 출력 위치 확인
⑴ SELECT ... FROM ... UNION SELECT 1, 2, 3, 4, 5, 6 #
⇒ 화면에 출력되는 컬럼이 몇번째 컬럼인지 확인한다.
④ Step4. DB 이름 알아내기
* 시스템 테이블 database() 사용
⑴ 현재 DB 이름 : SELECT database()
⑵ 모든 DB 이름 : SELECT schema_name FROM information_schema.schemata #
⑤ Step5. 테이블 이름 알아내기
⑴ SELECT table_name FROM information_schema.tables WHERE table_schema=[DB명]
⑥ Step6. 컬럼 이름 알아내기
⑴ SELECT column_name FROM ... WHERE table_name=[테이블명] #
⑦ Step7. Data 추출
⑴ SELECT [컬럼명] FROM [테이블명]
⑵ mario%' UNION SELECT [컬럼명1], 2, 3, [컬럼명2], 5, 6 FROM [테이블명] #
* 암기 X 알기 O
⇒ 위 내용은 MySql의 경우이고 다른 DB는 또 다름.
⇒ 이걸 다 외우고 다닐 수는 없고 필요할 때마다 구글링하는게 맞음.
⇒ 단, 어떤 것들이 어디에 있고 어떨 때 어떻게 사용한다.. 에 대해 잘 알아둬야 함.
* Data type 확인하는 방법
⇒ %' UNION SELECT null, null, null, null, null, null 을
⇒ %' UNION SELECT 1, null, null, null, null, null
⇒ %' UNION SELECT '1', null, null, null, null, null
...
이렇게 하나씩 바꿔가면서 노가다로 체크한다 ㅎ...
4. Error Based SQLi
[1] 기본
① Error가 출력되는 곳에서 사용할 수 있다. (SQL Error = DB Error 말하는 것임)
② 「논리에러」여야 한다. (문법에러 아님!)
⇒ DB는 쿼리문을 받으면 무조건 문법 체크부터 하기 때문에 문법이 틀리면 그냥 입구컷 당한다.
[2] Error Based SQLi 활용 함수
① updatexml, extractvalue...
⇒ 암기 X 검색 O (Cheat Sheet 만들어봐도 됨)
올려주신 자동화 파이썬 코드에 대해서는 다음 포스팅에서 자세히 분석해본다.
'Study > 수업' 카테고리의 다른 글
[수업] 5주차 정리 (0) | 2021.11.18 |
---|---|
[수업] 4주차 정리 (0) | 2021.11.04 |
[수업] 2주차 정리 (1) | 2021.10.22 |
[수업] 1주차 정리 (0) | 2021.10.16 |
[수업] OT 정리 (0) | 2021.10.16 |