로그인은 그 사람이 맞는지 확인하는 작업이다.
이를 위해 인증과 식별이 모두 필요하다.
[식별]
수 많은 데이터 중 특정 데이터를 찾아낸다.
따라서 식별 정보는 Unique 해야 하며, 중복 값이 있어서는 안 된다.
해당 컬럼(보통 ID)을 PK(Primary Key)로 등록해야한다.
일반 식별정보와 고유식별정보로 나뉘며 각각 아래의 특징을 갖고 있다.
1. 식별 정보
노출이 되어도 상관 없는 정보
예시) ID, 전화번호, 이메일 등
2. 고유 식별 정보
노출이 되면 안 되는 정보로, 그 정보만 가지고도 해당 국가에서 그 사람을 특정할 수 있다.
예시) 주민등록번호, 운전면허번호, 여권번호
[인증]
그 사람 본인이 맞는지 확인하는 작업
인증 정보를 사용해서 인증을 하며, 흔히 비밀번호를 뜻한다.
예시) 비밀번호, OTP
로그인 할 때는 식별(ID)과 인증(PW)이 동시에 이루어 진다.
로직 >
식별 : 해당 id(와 pw)를 where을 사용하여 가져온다.
인증 : 입력된 pw와 DB에서 가져온 값을 비교하여 인증한다.
[로그인 4가지 로직 예시]
1. 식별/인증 동시
2. 식별/인증 분리
3. 1 + HASH
4. 2 + HASH
1. 식별/인증 동시
DB 질의를 한 번에 수행
예시) select * from member where user_id='pooh' and user_pass='1234'
두 가지를 동시에 확인하여 결과가 존재하면 로그인 성공, 결과가 없으면 로그인 실패
2. 식별/인증 분리
DB를 가져온 후, if문으로 사용자 입력 비밀번호와 비교
예시) 수도코드
sql = select * from member where id='____'
$db_pass = sql.ret['pas']
if($db_pass == $user_pass){
// 로그인 성공
}else{
// 로그인 실패
}
"ID나 비밀번호가 존재하지 않습니다." 와 같이 구체적으로 뭐가 틀렸는지 알려주지 않는게 더 안전하다고 정보보안 전문가들은 말한다고 함. 강사님은 해당 의견에 동의하지 않는다고 하심.
3,4. HASH
데이터의 모양을 바꿔주는 함수로서, 원래의 상태로 복구가 불가능한 일방향 함수이다.
암호화나 인코딩과는 조금 다른 개념.
노출되어도 평문을 알 수 없다.
암호화는 KEY가 있다면 원래의 데이터로 바꿀 수 있고,
인코딩은 데이터를 효율적으로 보내기 위해 사용하는 것으로 원래 상태의 글자로 바꿀 수 있다.
HASH의 유니크한 특징은 일방향 함수라서 원래 상태의 글자로 못 바꾸는 것.
예시)
sha256($user_pass) == 서버에 HASH 상태로 저장된 비밀번호
[로그인 유지 - 쿠키]
웹서버는 단순히 달라는 파일을 전달해주는 전달자라서
기본적으로는 달라는 친구가 누구인지 구분하지 못함.
구분하기 위하여 클라이언트가 메세지를 보낼 때 포스트잇에 "나 **이야" 라고 알려주면, 그걸로 구분하여 보내준다.
저 포스트잇을 "쿠키"라고 한다.
Set-Cookie : 너 인정 (웹서버로 요청 보낼 때마다 쿠키 넣어서 보내)
초창기에는 이 쿠키로 로그인 시스템을 만들었는데,
문제는 쿠키의 출발지가 클라이언트(이용자) 라는 것.
(해커도 클라이언트다.)
쿠키의 내용을 바꿔서(변조) 다른 사람으로 로그인 할 수 있는 문제가 있다.
이를 해결하기 위해서 출발지를 서버로 하기로 한다. (정보를 서버에 저장)
[로그인 유지 - 세션]
세션은 서버에 저장되는 정보로, 이 세션 ID 정보를 통해 누가 누구인지 식별할 수 있게 된다.
session_start();
$_SESSION['id'] = 'pooh';
세션 스타트 : 세션을 사용하겠다.
세션 id값에 id를 저장한다. (=세션을 식별하기 위한 식별값을 만든다)
세션이 저장되는 위치
/var/lib/php/sessions
저장된 세션 값 확인 방법 :
php -i | grep session.save_path
ls /var/lib/php/sessions
cat /var/lib/php/sessions/위에서 나온 값
세션 ID는 쿠키에 들어간다.

[세션 탈취]
쿠키를 잘 뜯어보면 세션 ID가 있다.
복사해서 쿠키에 넣고 그 페이지에 들어가면 로그인이 된다.
XSS, 웹 쉘, MitM 등 여러가지를 사용해서 세션아이디를 탈취 가능하다.
'모의해킹 공부하기 > 모의해킹 수업 복습' 카테고리의 다른 글
| [6주차] SQL Injection으로 데이터 추출하기 (UNION SQL Injection) (1) | 2023.12.04 |
|---|---|
| [5주차] SQL Injection으로 인증(Authentication) 우회(Bypass) (0) | 2023.12.04 |
| [4주차] Burp Suite 기본 사용 방법 (0) | 2023.11.22 |
| [2주차] Database (MySql) phpMyAdmin과 sql사용법 (0) | 2023.11.12 |
| [1주차] 웹 서버의 이해 (Web Server, Web Root 경로, WAS, 도커, PHP) (0) | 2023.10.27 |