Web - Security/Login

[JS, PHP, MYSQL] 로그인, 로그인 우회 - 3.1

잉카콜라 2023. 5. 10. 15:32

로그인 과정에서  SQL 질의문에 대해서 검사하는 기능을 만들었다

 

로그인 페이지 

이전에 만들어놨던 login_2 데이터베이스와 로그인페이지를 이름만 변경하였다

 

데이터 베이스 연결 변수명을 login_2에서 login_3으로 바꾼 것을 제외하고 달라진 건 없다

 

5 ~ 8
로그인페이지의 입력값을 받아오고 아이디와 비밀번호가 있다면 아래의 과정을 이어가고 없다면 로그인 실패처리한다

11 ~ 19
사용자 입력을 받은 SQL 질의문을 검증하는 단계를 추가해 줬다
완성된 SQL 질의문에서 SELECT, FROM, WHERE 단어의 개수를 구해주고
SELECT, FROM, WHERE의 개수가 모두 1개여야만 데이터베이스에 SQL 질의문을 전달하도록 한다

 

21 ~ 44
만약 일치하는 회원이 존재한다면 로그인 성공 페이지로 이동하고 존재하지 않는다면 로그인 페이지로 이동하게 한다

 

변수이름 : "test1, test2, test3, test4"

, 의 개수 : substr_count(변수이름, "개수 세고 싶은 것 여기에")
3 = substr_count(변수이름, ",");

 

 

 

로그인 테스트

로그인과정에는 문제가 없다

 

 

 

login_3  -  로그인 우회 및 취약점

 

CASE 1 - SQL Injection

normaltic 계정만 존재하지만 위와 같은 SQL Injection을 이용하여 로그인에 성공했다

 

CASE 2 - 로그인 페이지로 바로 이동

입력값에 대한 검증만 강화하여 로그인 홈페이지로 바로 넘어가는 경우는 막지 못한다

 

CASE 3 - Brute Force ( 취약점 )

이 로그인 페이지에서는 로그인 시도 횟수를 확인하지 않고 있다

아이디가 normaltic 이고 비밀번호가 1234 이므로 사전대입공격으로 충분히 로그인이 가능하다

 

 

 

대응방안

CASE 1 - SQL Injection

select, from, where 를 포함하여 and 와 or 의 개수도 추가해 주도록 한다

 

CASE 2 - 로그인 페이지로 바로 이동

로그인에 성고을 해야만 접근이 가능하도록 세션을 이용해 주도록 한다

 

CASE 3 - Brute Force

 로그인 시도 횟수를 확인하여 Brute Force 공격을 차단하도록 한다

728x90