#############
## 세션 & 쿠키
#############
웹에서 사용하는 HTTP 는 연결을 유지하지 않는 프로토콜이다.
SSH, Telnet 의 프로토콜은 연결을 유지하는 프로토콜이다.
HTTP 이용한 웹 클라이언트와 웹 서버간에 연결을 유지하는 역할을 하는게 쿠키와 세션을 이용한다.
쿠키 : 클라이언트에 정보가 저장된다.
세션 : 서버에 정보가 저장된다.
예전 : 인증에 성공하면 쿠키로 관련 정보를 저장했다. (정보가 클라이언트에 저장되기 때문에 보안에 문제가 생기게 되었다.)
요즘 :
인증에 성공하면 세션으로 관련 정보를 저장하고 세션ID를 클라이언트에게 전송해서 클라이언트에서는 세션ID를 쿠키로 저장한다.
그리고 서버에 접속을 할때마다 세션ID를 쿠키로 가지고 다니고 서버가 이를 확인해서 사용자를 판단한다.
실습> 세션 파일을 이용한 로그인 분석
세션파일 :
http 프로토콜은 연결이 유지되지 않는 프로토콜이므로 세션 파일을 이용해서 연결을 유지시켜준다.
ex) 로그인
1. 소스코드 작성
테스트할 소스코드를 작성한다.
[root@www ~]# cd /var/www/html/
[root@www html]# vi session1.php
<?
// 세션을 사용하기 위해서는 session_start(); 함수를 사용한다.
// 이 함수를 사용하기 전에 HTML 코드가 하나라도 전송되면 안된다.
session_start();
?>
<!doctype html>
<html>
<head>
<meta charset=utf-8>
<title> ::: session 테스트 ::: </title>
</head>
<body>
세션 테스트
</body>
</html>
2. EditThisCookie 플러인 추가
EditThisCookie : 크롬에서 쿠키를 관리해주는 플러그인 프로그램
https://chrome.google.com/webstore/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg/related?hl=ko
3. 쿠키 삭제
EditThisCookie 플러그인을 추가하면 고정으로 설정해 놓고 쿠키를 삭제한다.
4. 세션 파일 삭제
/etc/php.ini 설정 파일
[Session]
session.save_handler = files
:
:
/etc/httpd/conf.d/php.conf 설정 파일
php_value session.save_handler "files"
php_value session.save_path "/var/lib/php/session"
PHP 세션디렉터리 : /var/lib/php/sessions
리눅스 서버에서 세션을 관리하는 디렉터리인 /var/lib/php/session/ 디렉터리 이동해서 세션 파일들을 삭제한다.
[root@www html]# cd /var/lib/php/session/
[root@www session]# rm -f *
5. burp 설정
Intercept is on 으로 설정한다.
6. 클라이언트 접속
브라우저에서 아래 URL로 접속한다.
http://192.168.108.101/session1.php
7. Request 분석
클라이언트에서 접속한 Request 정보를 확인한다.
GET /session1.php HTTP/1.1
Host: 192.168.108.101
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
Connection: close
8. burp에서 전송
burp에서 Forward 버튼을 클릭해서 서버로 웹 데이터를 전송한다.
서버입장 :
session1.php 를 서버에서 실행할 때 session_start(); 함수가 실행되면서 세션 디렉터리(/var/lib/php/session)에
랜덤 문자열을 생성하고 서버에서 확인하면 아래처럼 세션파일이 생성된다.
세션 파일명 : sess_랜덤문자열
[root@www session]# ls -ld
drwxrwx---. 2 root apache 45 1월 20 13:13 .
[root@www session]# ls -l
합계 0
-rw-------. 1 apache apache 0 1월 20 13:13 sess_142v2qnvgghevrumcojk949937
클라이언트에게 Set-Cookie: PHPSESSID=142v2qnvgghevrumcojk949937; path=/ 를 HTTP 헤더에 담아서 전송한다.
HTTP/1.1 200 OK
Date: Thu, 20 Jan 2022 04:13:10 GMT
Server: Apache/2.4.6 (CentOS) PHP/5.4.16
X-Powered-By: PHP/5.4.16
Set-Cookie: PHPSESSID=142v2qnvgghevrumcojk949937; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 157
Connection: close
Content-Type: text/html; charset=UTF-8
<!doctype html>
<html>
<head>
<meta charset=utf-8>
<title> ::: session 테스트 ::: </title>
</head>
<body>
세션 테스트
</body>
</html>
burp에서 Forward 버튼을 클릭해서 클라이언트에게 웹 데이터를 전송한다.
클라이언트가 서버가 보내준 쿠키를 자신이 관리하는 임시 웹 디렉토리에 쿠키를 저장한다(굽는다).
9. 서버 재접속
클라이언트가 서버로 재접속을 할 때 자신이 저장한 쿠키를 가지고 서버로 접속한다.
세션 이름은 /etc/php.ini 설정 파일에 설정되어 있다.
형식 : session.name = PHPSESSID
형식 : Cookie: PHPSESSID=142v2qnvgghevrumcojk949937
GET / HTTP/1.1
Host: 192.168.108.101
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: PHPSESSID=142v2qnvgghevrumcojk949937
Connection: close
10. 로그인
클라이언트가 로그인 시도한다.
id : admin
pw : 111111
[root@www session]# ls -l
합계 4
-rw-------. 1 apache apache 44 1월 20 13:25 sess_142v2qnvgghevrumcojk949937
[root@www session]# cat sess_142v2qnvgghevrumcojk949937
userid|s:5:"admin";username|s:9:"관리자";
'Linux > 모의해킹' 카테고리의 다른 글
| session 이해하기 (0) | 2022.01.21 |
|---|---|
| 터미널에서 로그인 / 로그아웃 분석하기 (0) | 2022.01.21 |
| SwitchyOmega 에서 Auto Switch 설정하기 (0) | 2022.01.20 |
| Brute Force 로그인 공격 (0) | 2022.01.20 |
| Client Validation (JavaScript & PHP) (0) | 2022.01.20 |