klaus

[week_3] 스터디 정리 및 복습 (20221028) 본문

수업/모의해킹

[week_3] 스터디 정리 및 복습 (20221028)

klus! 2022. 10. 28. 18:28

0.  목표 및 사전준비

 - 4주차 스터디 전 목표

더보기

> Challenges 2~3회 더 풀어보기

> burp suite 사용법 익히기(설치는 했으나, 사용법 및 응용할 줄 모름 ㅠ)

> 로그인 페이지 가독성,최대한 취약점X, 등 다시 만들어보기

> 보고서 및 과제 하기 (보고서는 3주차에 알려주신 내용 최대한 적용하여 작성해보기) 

> SQL책 빠르게 읽어보기 ("정처기 실기 SQL부분" AND "SQL 첫걸음")

목차
[스터디 커리큘럼]
- SQL Injection
: Union SQL Injection
: Error Based SQL Injection

지난, 2주차에서는 SQLi의 개념과 인증 우회 방법에 대해 공부를 진행하였습니다.

이번 3주차에서는 조금 더 자세하게 알아보는 수업으로 진행되었습니다.

 

2주차 과제 중 하나였던 보고서 관련된 피드백으로 시작되었다.

 

[1] 보고서 팁

    1) 파일명 : [보고서명]_[날짜]_[버전]_[작성자]

       예 SQL injection_20221028_v0.1_홍길동 (버전이 1.0인 경우 완성본이라는 이야기)

      TMI~~ 매번 v1.0,v2.0과 같은 완성본만 보다보니 작성중인 보고서에 대한 지식을 배울 수 있는 기회였다.

    2) 표지페이지 만들기

    3) 단락 (스타일을 사용하여 제목1,제목2, 등 디자인 사용하거나 스타일 수정하여 자신의 템플릿 만들기)

    4) 처음설정보다 여백은 좁게(레이아웃-여백-좁게)

    5) 페이지 번호 (바닥글)

    6) 그림 또는 이미지 삽입시 그림의 메타데이터 표기

    7) 그림과 표 너비 일정하게 테두리는 검정색 (그림/형식 -너비 or 테두리)

    8) 보고서의 글자크기와 그림의 글자 크기는 일정하게

    9) 캡처를 사용할 때는 조금 크게 캡쳐 후 그림크기 자르기(그림서식 -자르기 사용) 

 

캡쳐를 억지로 마출려고 했었는데 딱 걸렸다......대충대충이란 없다!!ㅎㅎ

또 맥북에서는 뭔가 단축키도 생소하다.  ㅠㅠ 회사 노트북 반납하고 새로 장만했는데....

 

1. SQLi 종류

  - LOGIN 우회

  - DATA 추출,탈취

 

지난 시간에는 로그인 우회하는 방법에 대해 알아보았습니다.

이번시간에는 SQLi의 데이터 추출 2가지 유형에 대해 공부하였습니다.

 

2. SQL Injection 데이터 추출 유형

- SQL 질의문이 화면에 보이는가? or 안보이는가?? 일단 유형 파악하기!

- SQL 질의문이 화면에 보이는 경우

  ==> UNION SQL injection

- SQL 에러가 응답에 포함되는 경우

  ==> ERROR BASED SQL Injection

- SQL 질의문 결과가 화면에 안나오는 경우

 ==> BIind SQL Injection

이번시간에는 UNION SQLi와 ERROR BASED  SQLi에 대해 공부를 하였습니다.

 

3. UNION SQLi

1) UNION ?? 테이블을 위/아래로 연결하는 SQL 질의

    - SQL 형식  : [SELECT ...] UNION [SELECT ...] 

    - 특징 : UNION을 사용하려면 각 연결하려는 테이블의 컬럼 수가 동일해야 합니다.

참조 : https://www.guru99.com/unions.html

 

2) UNION SQLi  공격 Step

더보기

Step1. 취약점 확인하기

(1) LIKE 연산자를 사용해보기?  

(2) and 1=1 추가 등 여러 방법으러 시도하였을 때 동일하게 출력된다?? 취약할 가능성이 있음 

 

Step2. 컬럼 수 확인하기

(1) 위에서 언급한 것처럼 UNION은 컬럼의 수가 맞아야 연결이 가능하기 때문에 컬럼 수를 확인해봅시다.

(2) ORDER BY함수를 사용하여 SQL문 작성

    > ORDER BY는 SELECT [컬럼1,컬럼2,...] FROM ... ORDER BY[컬럼1,컬럼2,][정렬 ASC/DESC]

     => ORDER BY 뒤에는 컬럼명 외에 인덱스를 적어서 조회가능 즉, 1부터 차례로 입력 후 8에서 출력 안된다는 것은?????

 

Step3. DATA 출력 위치 확인하기

(1) 위에서 컬럼의 갯수를 해보았습니다. 이번에는 화면상으로 출력되는 데이터 위치를 확인해 봅시다.

    > 예를들어 컬럼이 Step2에서 7개의 컬럼이 존재한다고 했는데 화면에 출력되는 컬럼은 4개라고 하자 그럼 어느컬럼이 화면에

     출력되는가??라는 것도 확인이 필요하다(원하는 데이터를 화면에 출력하기 위하여)

(2) SELECT ... FROM ... UNION SELECT 1,2,3,4,5,6,7 #

      그럼 출력 화면에 출력되는 위치를 확인하기 위해 위와 같이 SQL문에 대입

 

Step4. DB명 확인하기

(1) 시스템 테이블 database() 사용

  > Mysql의 경우

  ==> 현재 DB 확인: SELECT database()
  ==> 모든 DB 이름은 : SELECT schema_name FROM information_schema.schemata #

 

Step5.  TABLE명 확인하기

(1) SELECT table_name FROM information_schema.tables WHERE table_schema=[DB명]

 

Step6. COLUMN NAME 확인하기

(1) SELECT column_name FROM ~~~ WHERE table_name=[TABLE명]

 

Step.7 DATA 추출하기

(1) SELECT [컬럼명] FROM[테이블명]

(2) UNION SELECT [컬럼 1],2,[컬럼 2],4,5,6,7] FROM [TABLE명]

    > 출력이 되는 컬럼에 확인한 컬럼명 대입 후 원하는 컬럼 출력

    > 예) %'UNION SELECT id,2,password,4,5,6,7] FROM unser_info #

 

3.  Error Based SQLi

1 ) SQL 에러가 응답에 포함되는 경우!!!

논리적인 에러를 발생시켜 원하는 정보를 찾아내는 방법

여기서 말하는 논리적인 에러는.. SQL Error or DB Error를 의미합니다.

논리적인 에러가 아닌 문법 에러가 발생한다면 문턱도 못 밟아보고 끝나는 경우입니다.

 

2) error Based SQLi 활용함수

updatexml, ExtractValue, limit 등 DB에 따라 사용되는 함수가 많음

외우기 보다는 이해하기(어느정도 알고 있어야함......)

3) Error Based SQLi  공격 Step

더보기

Step 1. Error 메세지 출력되는지 확인

Step 2. Error 출력 함수 선정하기

Step 3. DB이름 확인하기

Step 4. DABLE 이름 확인하기

Step 5. culumn 이름 확인하기

Step 6. data 추출하기 

 

 

 

 

 

Comments