-
Login Logic Case 분석웹 해킹 2024. 6. 16. 18:03
서버 소스코드에서 로그인 처리를 할 때 여러가지 변수에 따라 로그인 로직이 나뉜다.
WHERE문 뒤부터 설명하겠다.
CASE: 식별/인증
1. 식별/인증 동시 id 먼저
DB에서 id='___' and pass='___' 에 충족하는 데이터를 가져오는 동시에 가져오는데 성공한다면 id식별과 password로 인한 인증을 동시에 한 것이다. 이때 sql문에서 id가 먼저 온다.
2. 식별/인증 동시 pass먼저
DB에서 pass='___' and id='___' 에 충족하는 데이터를 가져오는 동시에 가져오는데 성공한다면 id식별과 password로 인한 인증을 동시에 한 것이다. 이때 sql문에서 pass가 먼저 온다.
3. 식별/인증 분리
DB에서 id='___' 에 해당하는 데이터를 식별해 먼저 가져온 다음, 그 다음 코드에서 입력한 pass와 db에서 가져온 pass를 비교한 뒤 인증하는 방식이다.
CASE: 괄호
1. 괄호 없음
sql문이 예를 들어 '식별/인증 동시 id먼저'일때 id='___' and pass='___' 인 경우이다.
2. 괄호 id, pass 각각
sql문이 예를 들어 '식별/인증 동시 id먼저'일때 (id='___') and (pass='___') 인 경우이다.
3. 괄호 동시에
sql문이 예를 들어 '식별/인증 동시 id먼저'일때 (id='___' and pass='___') 인 경우이다.
또한 '식별/인증 분리' 일때는 '괄호있음'에 해당하며 (id='___' ) 로 생각하면 된다.
CASE: 개행
1.개행X
sql문이 예를 들어 '식별/인증 동시 id먼저'일때 id='___' and pass='___' 인 경우이다. 줄 바꿈이 존재하지 않는다.
2.개행O
sql문이 예를 들어 '식별/인증 동시 id먼저'일때
id='___'
and pass='___' 인 경우이다. 줄 바꿈이 존재한다.
CASE: 해쉬 Hash
1.해쉬X
로그인 시 비밀번호를 해쉬처리해서 비교하지 않는다.
2.해쉬O
로그인 시 비밀번호를 해쉬처리해서 비교한다.
이때 주로 사용되는 해쉬 알고리즘에 따라 'SHA-1'와 'MD5'로 또 나뉠 수 있다.
CASE: Quote 사용 (따옴표 종류)
1.Single Quote 사용 ( ' )
sql문이 예를 들어 '식별/인증 동시 id먼저' 일때 id='___' and pass='___' 인 경우이다.
2.Double Quote 사용 ( " )
sql문이 예를 들어 '식별/인증 동시 id먼저' 일때 id="___" and pass="___" 인 경우이다.
Case 조합, 추정 sql문
ident = ['식별/인증 동시 id먼저','식별/인증 동시 pass먼저', '식별/인증 분리'] paren = ['괄호없음', '괄호id,pass각각', '괄호동시에'] newLine = ['개행X', '개행O'] hash = ['해쉬X', '해쉬O'] quote = ['\'사용', '\"사용'] for i in ident: for j in paren: for k in newLine: for l in hash: for m in quote: print("{} |".format(i),end=' ') print("{} |".format(j),end=' ') print("{} |".format(k),end=' ') print("{} |".format(l),end=' ') print("{}".format(m)) """ ident = ['식별/인증 동시 id먼저','식별/인증 동시 pass먼저', '식별/인증 분리'] paren = ['괄호없음', '괄호id,pass각각', '괄호동시에'] newLine = ['개행X', '개행O'] hash = ['해쉬X', '해쉬O'] quote = ['\'사용', '\"사용'] 파이썬으로 케이스를 조합해서 만들었다. 식별/인증 동시에 해당할때, 괄호id,pass각각과 개행O에 해당하는 것들은 제외했다. 그리고 식별/인증 동시에 해당할 때 '괄호동시에'는 '괄호있음'으로 변경하였다. """
/* 식별/인증 동시 id먼저 | 괄호없음 | 개행X | 해쉬X | '사용 SELECT id,pass from member WHERE id='___' and pass='___' 식별/인증 동시 id먼저 | 괄호없음 | 개행X | 해쉬X | "사용 SELECT id,pass from member WHERE id="___" and pass="___" 식별/인증 동시 id먼저 | 괄호없음 | 개행X | 해쉬O | '사용 SELECT id,pass from member WHERE id='___' and pass='___' 식별/인증 동시 id먼저 | 괄호없음 | 개행X | 해쉬O | "사용 SELECT id,pass from member WHERE id="___" and pass="___" 식별/인증 동시 id먼저 | 괄호없음 | 개행O | 해쉬X | '사용 SELECT id,pass from member WHERE id='___' and pass='___' 식별/인증 동시 id먼저 | 괄호없음 | 개행O | 해쉬X | "사용 SELECT id,pass from member WHERE id="___" and pass="___" 식별/인증 동시 id먼저 | 괄호없음 | 개행O | 해쉬O | '사용 SELECT id,pass from member WHERE id='___' and pass='___' 식별/인증 동시 id먼저 | 괄호없음 | 개행O | 해쉬O | "사용 SELECT id,pass from member WHERE id="___" and pass="___" 식별/인증 동시 id먼저 | 괄호id,pass각각 | 개행X | 해쉬X | '사용 SELECT id,pass from member WHERE (id='___') and (pass='___') 식별/인증 동시 id먼저 | 괄호id,pass각각 | 개행X | 해쉬X | "사용 SELECT id,pass from member WHERE (id="___") and (pass="___") 식별/인증 동시 id먼저 | 괄호id,pass각각 | 개행X | 해쉬O | '사용 SELECT id,pass from member WHERE (id='___') and (pass='___') 식별/인증 동시 id먼저 | 괄호id,pass각각 | 개행X | 해쉬O | "사용 SELECT id,pass from member WHERE (id="___") and (pass="___") 식별/인증 동시 id먼저 | 괄호id,pass각각 | 개행O | 해쉬X | '사용 SELECT id,pass from member WHERE (id='___') and (pass='___') 식별/인증 동시 id먼저 | 괄호id,pass각각 | 개행O | 해쉬X | "사용 SELECT id,pass from member WHERE (id="___") and (pass="___") 식별/인증 동시 id먼저 | 괄호id,pass각각 | 개행O | 해쉬O | '사용 SELECT id,pass from member WHERE (id='___') and (pass='___') 식별/인증 동시 id먼저 | 괄호id,pass각각 | 개행O | 해쉬O | "사용 SELECT id,pass from member WHERE (id="___") and (pass="___") 식별/인증 동시 id먼저 | 괄호동시에 | 개행X | 해쉬X | '사용 SELECT id,pass from member WHERE (id='___' and pass='___') 식별/인증 동시 id먼저 | 괄호동시에 | 개행X | 해쉬X | "사용 SELECT id,pass from member WHERE (id="___" and pass="___") 식별/인증 동시 id먼저 | 괄호동시에 | 개행X | 해쉬O | '사용 SELECT id,pass from member WHERE (id='___' and pass='___') 식별/인증 동시 id먼저 | 괄호동시에 | 개행X | 해쉬O | "사용 SELECT id,pass from member WHERE (id="___" and pass="___") 식별/인증 동시 id먼저 | 괄호동시에 | 개행O | 해쉬X | '사용 SELECT id,pass from member WHERE (id='___' and pass='___') 식별/인증 동시 id먼저 | 괄호동시에 | 개행O | 해쉬X | "사용 SELECT id,pass from member WHERE (id="___" and pass="___") 식별/인증 동시 id먼저 | 괄호동시에 | 개행O | 해쉬O | '사용 SELECT id,pass from member WHERE (id='___' and pass='___') 식별/인증 동시 id먼저 | 괄호동시에 | 개행O | 해쉬O | "사용 SELECT id,pass from member WHERE (id="___" and pass="___") 식별/인증 동시 pass먼저 | 괄호없음 | 개행X | 해쉬X | '사용 SELECT id,pass from member WHERE pass='___' and id='___' 식별/인증 동시 pass먼저 | 괄호없음 | 개행X | 해쉬X | "사용 SELECT id,pass from member WHERE pass="___" and id="___" 식별/인증 동시 pass먼저 | 괄호없음 | 개행X | 해쉬O | '사용 SELECT id,pass from member WHERE pass='___' and id='___' 식별/인증 동시 pass먼저 | 괄호없음 | 개행X | 해쉬O | "사용 SELECT id,pass from member WHERE pass="___" and id="___" 식별/인증 동시 pass먼저 | 괄호없음 | 개행O | 해쉬X | '사용 SELECT id,pass from member WHERE pass='___' and id='___' 식별/인증 동시 pass먼저 | 괄호없음 | 개행O | 해쉬X | "사용 SELECT id,pass from member WHERE pass="___" and id="___" 식별/인증 동시 pass먼저 | 괄호없음 | 개행O | 해쉬O | '사용 SELECT id,pass from member WHERE pass='___' and id='___' 식별/인증 동시 pass먼저 | 괄호없음 | 개행O | 해쉬O | "사용 SELECT id,pass from member WHERE pass="___" and id="___" 식별/인증 동시 pass먼저 | 괄호id,pass각각 | 개행X | 해쉬X | '사용 SELECT id,pass from member WHERE (pass='___') and (id='___') 식별/인증 동시 pass먼저 | 괄호id,pass각각 | 개행X | 해쉬X | "사용 SELECT id,pass from member WHERE (pass="___") and (id="___") 식별/인증 동시 pass먼저 | 괄호id,pass각각 | 개행X | 해쉬O | '사용 SELECT id,pass from member WHERE (pass='___') and (id='___') 식별/인증 동시 pass먼저 | 괄호id,pass각각 | 개행X | 해쉬O | "사용 SELECT id,pass from member WHERE (pass="___") and (id="___") 식별/인증 동시 pass먼저 | 괄호id,pass각각 | 개행O | 해쉬X | '사용 SELECT id,pass from member WHERE (pass='___') and (id='___') 식별/인증 동시 pass먼저 | 괄호id,pass각각 | 개행O | 해쉬X | "사용 SELECT id,pass from member WHERE (pass="___") and (id="___") 식별/인증 동시 pass먼저 | 괄호id,pass각각 | 개행O | 해쉬O | '사용 SELECT id,pass from member WHERE (pass='___') and (id='___') 식별/인증 동시 pass먼저 | 괄호id,pass각각 | 개행O | 해쉬O | "사용 SELECT id,pass from member WHERE (pass="___") and (id="___") 식별/인증 동시 pass먼저 | 괄호동시에 | 개행X | 해쉬X | '사용 SELECT id,pass from member WHERE (pass='___' and id='___') 식별/인증 동시 pass먼저 | 괄호동시에 | 개행X | 해쉬X | "사용 SELECT id,pass from member WHERE (pass="___" and id="___") 식별/인증 동시 pass먼저 | 괄호동시에 | 개행X | 해쉬O | '사용 SELECT id,pass from member WHERE (pass='___' and id='___') 식별/인증 동시 pass먼저 | 괄호동시에 | 개행X | 해쉬O | "사용 SELECT id,pass from member WHERE (pass="___" and id="___") 식별/인증 동시 pass먼저 | 괄호동시에 | 개행O | 해쉬X | '사용 SELECT id,pass from member WHERE (pass='___' and id='___') 식별/인증 동시 pass먼저 | 괄호동시에 | 개행O | 해쉬X | "사용 SELECT id,pass from member WHERE (pass="___" and id="___") 식별/인증 동시 pass먼저 | 괄호동시에 | 개행O | 해쉬O | '사용 SELECT id,pass from member WHERE (pass='___' and id='___') 식별/인증 동시 pass먼저 | 괄호동시에 | 개행O | 해쉬O | "사용 SELECT id,pass from member WHERE (pass="___" and id="___") 식별/인증 분리 | 괄호없음 | 개행X | 해쉬X | '사용 SELECT id,pass from member WHERE id='___' 식별/인증 분리 | 괄호없음 | 개행X | 해쉬X | "사용 SELECT id,pass from member WHERE id="___" 식별/인증 분리 | 괄호없음 | 개행X | 해쉬O | '사용 SELECT id,pass from member WHERE id='___' 식별/인증 분리 | 괄호없음 | 개행X | 해쉬O | "사용 SELECT id,pass from member WHERE id="___" 식별/인증 분리 | 괄호있음 | 개행X | 해쉬X | '사용 SELECT id,pass from member WHERE (id='___') 식별/인증 분리 | 괄호있음 | 개행X | 해쉬X | "사용 SELECT id,pass from member WHERE (id="___") 식별/인증 분리 | 괄호있음 | 개행X | 해쉬O | '사용 SELECT id,pass from member WHERE (id='___') 식별/인증 분리 | 괄호있음 | 개행X | 해쉬O | "사용 SELECT id,pass from member WHERE (id="___") */
케이스에 맞춰서 로그인 로직을 피할 수 있다.