Self-Improvement

쿠키와 세션2 본문

Web

쿠키와 세션2

JoGeun 2019. 8. 26. 10:25

https://www.hackingarticles.in/hack-milnet-vm-ctf-challenge/

 

Hack the Milnet VM (CTF Challenge)

This is a boot2root challenge which we will try to complete. This VM is created by Warrior and is a basic exploitable VM so we do not need to worry about any advance exploits and reverse engineering. Download the VM from –> https://www.vulnhub.com/entry/mi

www.hackingarticles.in

쿠키

쿠키는 서버가 브라우저로 보내는 작은 데이터 조각으로, 사용자가 탐색하는 동안 사용자의 컴퓨터에 저장됩니다.쿠키는 HTTP 헤더를 사용하여 브라우저와 서버간에 생성 및 공유됩니다.

서버가 클라이언트에서 데이터를 저장하고 검색 할 수 있도록합니다. 클라이언트 측의 파일에 저장되며 저장할 수있는 쿠키의 최대 크기는 모든 웹 브라우저에서 최대 4K로 제한됩니다. 쿠키는 브라우저가 닫히 자마자 만료 날짜와 시간이 있기 때문에 기간이 짧습니다.

예를 들어 YouTube를 방문하여 Bollywood 노래를 검색하면 브라우징 기록에 표시되며 다음에 브라우저에서 YouTube를 열면 쿠키가 인터넷 사용 기록을 읽고 YouTube 홈페이지에 Bollywood 노래가 표시됩니다.

쿠키 생성

이기에, setcookie () 함수는 쿠키에 대한 사용은 HTTP 헤더의 나머지 부분과 함께 확인할 수 있습니다.

개발자는 setcookie 함수를 사용하여 쿠키를 만들 때  적어도 세 개의 인수를 지정해야합니다. 이러한 인수는 setcookie ( name , value , expiration )입니다.

이미지 출처 : Google

쿠키 속성

  1. 이름 : 쿠키 이름을 지정합니다
  2. 값 : 쿠키 값을 지정합니다
  3. 보안 : 쿠키가 보안 HTTPS 연결을 통해서만 전송되어야하는지 여부를 지정합니다. TRUE는 보안 연결이 존재하는 경우에만 쿠키가 설정됨을 나타냅니다. 기본값은 FALSE입니다
  4. 도메인 : 쿠키의 도메인 이름을 지정합니다. example.com의 모든 하위 도메인에서 쿠키를 사용할 수있게하려면 도메인을“example.com”으로 설정하십시오. www.example.com으로 설정하면 www 하위 도메인에서만 쿠키를 사용할 수 있습니다.
  5. 경로 : 쿠키의 서버 경로를 지정합니다. "/"로 설정하면 전체 도메인 내에서 쿠키를 사용할 수 있습니다. "/ php /"로 설정하면 쿠키는 php 디렉토리와 php의 모든 하위 디렉토리에서만 사용할 수 있습니다. 기본값은 쿠키가 설정되는 현재 디렉토리입니다.
  6. HTTPOnly : TRUE로 설정하면 쿠키는 HTTP 프로토콜을 통해서만 액세스 할 수 있습니다 (스크립트는 스크립팅 언어로 쿠키에 액세스 할 수 없음). 이 설정은 XSS 공격을 통한 신원 도용을 줄이는 데 도움이됩니다. 기본값은 FALSE입니다
  7. 만료 : 쿠키 만료 시간을 지정합니다. time () + 86400 * 30 값은 쿠키가 30 일 안에 만료되도록 설정합니다. 이 매개 변수를 생략하거나 0으로 설정하면 세션이 끝날 때 (브라우저가 닫힐 때) 쿠키가 만료됩니다. 기본값은 0

쿠키의 필요성

쿠키는 다양한 목적으로 사용될 수 있습니다 –

  • 고유 방문자 식별
  • Http는 상태 비 저장 프로토콜입니다. 쿠키를 사용하면 사용자 컴퓨터에 저장된 작은 파일을 사용하여 응용 프로그램의 상태를 추적 할 수 있습니다.
  • 각 사용자가 웹 사이트에서 보내는 시간을 기록합니다.

쿠키의 종류

세션 쿠키

이 유형의 쿠키는 브라우저의 메모리에 저장되어 있기 때문에 브라우저를 닫으면 죽습니다. 그들은 전자 상거래 웹 사이트에 사용되므로 사용자는 장바구니에 넣은 내용을 잃지 않고 계속 탐색 할 수 있습니다. 브라우저를 닫은 후 사용자가 웹 사이트를 다시 방문하면 이러한 쿠키를 사용할 수 없습니다. 브라우저 이외의 개발자는 액세스 할 수 없으므로 더 안전합니다.

영구 쿠키

이 쿠키는 브라우저 컴퓨터 파일에 저장되므로 브라우저 세션에 의존하지 않습니다. 사용자가 브라우저를 닫은 다음 웹 사이트에 다시 액세스하면 이러한 쿠키를 계속 사용할 수 있습니다. 이 쿠키의 수명은 쿠키 자체에 만료 시간으로 지정됩니다. 그들은 덜 안전합니다.

타사 쿠키

브라우저 주소 표시 줄에 나타나는 도메인 이름이 아닌 도메인 이름으로 설정된 쿠키이 쿠키는 주로 사용자 브라우징 패턴을 추적하거나 사용자에 대한 광고 추천을 찾는 데 사용됩니다.

보안 쿠키

보안 쿠키는 암호화 된 연결을 통해서만 전송할 수 있습니다. 쿠키에 보안 플래그를 추가하여 쿠키를 안전하게 만듭니다. 보안 플래그를 지원하는 브라우저는 요청이 HTTPS 페이지로 이동하는 경우에만 보안 플래그와 함께 쿠키를 보냅니다.

HTTP 전용 쿠키

이 특정 쿠키는 서버에서만 액세스해야한다는 것을 브라우저에 알려줍니다. 클라이언트 스크립트에서 쿠키에 액세스하려는 시도는 엄격히 금지됩니다. 이것은 세션 쿠키에 대한 중요한 보안 보호입니다.

좀비 쿠키

좀비 쿠키는 삭제 후 다시 생성되는 HTTP 쿠키입니다. 쿠키는 웹 브라우저의 전용 쿠키 저장소 외부에 저장된 백업에서 다시 생성됩니다.

세션

PHP 세션 : 사용자가 로그인 또는 로그 아웃과 같은 웹 응용 프로그램을 변경하면 서버는 시스템의 해당 사용자가 누구인지 알 수 없습니다. 이 문제를 해결하려면 여러 웹 페이지에서 사용할 사용자 정보를 저장하는 PHP 세션을 소개합니다.

세션 변수는 한 명의 단일 사용자에 대한 정보를 보유하며 한 응용 프로그램의 모든 페이지에 존재합니다.

예 : 로그인 ID 사용자 이름 및 비밀번호

세션 ID

PHP 코드 등이 알려져 5f7dok65iif989fwrmn88er47gk834 32 16 진수 랜덤 문자열이 특정 세션에 대한 해시 형태의 고유 ID를 생성 PHPsessionID를 .

세션 ID  나 토큰은 웹 사이트에 로그인 한 사용자를 식별하는 데 사용되는 고유 번호입니다. 세션 ID는 서버 내부에 저장되며 해당 사용자의 방문 기간 동안 특정 사용자에게 할당됩니다 ( session ). 세션 ID는  쿠키, 양식 필드, 또는 URL로 저장할 수 있습니다.

설명:

이제이 그림을 살펴보고이 그림이 무엇을 말하는지 봅시다 :

주어진 그림에서 HTTP Client , HTTP server  Database (holding session ID)의 세 가지 구성 요소가 있음을 분명히 알 수 있습니다 .

1 단계 : 클라이언트가 POST 또는 GET을 통해 서버에 요청을 보냅니다.

2 단계 : 웹 서버에서 생성 된 세션 ID 서버는 세션 ID를 데이터베이스에 저장하고 쿠키 설정 기능을 사용하여 세션 ID를 클라이언트 브라우저에 응답으로 보냅니다.

3 단계 : 클라이언트 브라우저에 저장된 세션 ID를 가진 쿠키가 서버에서 데이터베이스와 일치하는 서버로 다시 전송되고 HTTP 200 OK로 응답을 보냅니다.

이미지 출처 : http://nikolaisammut.blogspot.com/2012/04/php-sessions-cookies.html

세션 도용

공격자가 중간자 (man-in-middle) 공격을 통해 또는 XSS를 통해 세션을 스니핑하고 세션 ID 또는 세션 토큰을 훔칠 때 다른 사용자가 고유 한 세션 ID를 가짐을 세션 하이재킹이라고합니다. 공격자가 도용 세션 ID를 웹 서버에 보내면 서버는 데이터베이스에 저장된 세션 ID에서 해당 ID를 찾습니다. 둘 다 서로 일치하면 서버는 HTTP 200 OK로 응답 하고 공격자는 적절한 식별을 제출하지 않고 액세스에 성공합니다.

예 1 :  서버가 사용자에게 발행 한 세션 쿠키 사용.

예를 들어, 모든 웹 사이트에서 공식 사용자가 로그인했으며 서버가 해당 사용자에 대한 세션 쿠키 SESSION-TOKEN을 생성했습니다. SESSION-TOKEN이 해당 사용자의 세션을 인식 한 쿠키 인 경우 공격자는 SESSION-TOKEN 쿠키 값을 도용하여 합법적 인 사용자로 로그인 할 수 있습니다. 공격자는 교차 사이트 스크립팅 또는 다른 기술을 수행하여 피해자의 브라우저에서 쿠키를 훔칠 수 있습니다.

침입자가 쿠키 PHPSESSID = user-raj-logged-in-2341785645를 훔친다고 가정 해 봅시다. 이제 다음 요청과 함께 쿠키를 사용하여 피해자의 홈 페이지에 상태 (HACKED !!!!!!)를 게시 할 수 있습니다.

 

1

2

3

4

5

6

POST /home/post_status.php HTTP/1.1

Host: www.facebook.com

Cookie: PHPSESSID=user-raj-logged-in-2341785645

Content-Length:38

Content-Type:application/x-www-form-urlencoded

Status= HACKED!!!!!&Submit=submit

공격자는 권한이 부여 된 사용자의 쿠키를 사용하여 사용자 세션을 제어합니다.

예 2 :  쿠키 생성에 복잡한 알고리즘이 사용되지 않은 경우 사용자의 쿠키 값 추측

예를 들어, 웹 사이트에서 알고리즘을 사용하여 사용자를위한 쿠키를 생성한다고 가정 해보십시오. 사용자 이름이"raj"인 경우 사용자에 대해 생성 된 쿠키는 "LOGINID = -772017- qszbik "일 수 있습니다. 이 경우 쿠키를 생성하는 데 사용되는 알고리즘은 다음과 같습니다.

쿠키 의 첫 번째 부분  날짜입니다. 즉 7/7/2017이고 두 번째 부분  사용자 이름 "John"의 각 문자에 대한 이전 및 다음 알파벳 문자 의 배열입니다 (즉, r의 이전 문자는 "q"입니다) 다음 문자는 "s"입니다. 공격자가 알고리즘을 위반할 수 있으면 사용자 쿠키를 추정하고 세션을 해킹 할 수 있습니다.

  r = qs

  a = zb

  j = ik

공격자가 관리자 세션을 해킹하기로 결정한 경우 쿠키를 LOGINID = 772017- zbcelnhjmo 로 만들고 raj의 세션에 로그인 한 후 계정에 상태를 게시 할 수 있습니다.

 

1

2

3

4

5

6

Host: www.facebook.com

Cookie:LOGINID =772017- zbcelnhjmo

Content-Length:45

Content-Type:application/x-www-form-urlencoded

Todays_status=I am hacked!!!!!!&Submit=submit

Session hijacking tutorial

이 자습서에서는 DVWA를 대상으로했습니다. 여기서 쿠키 이름은 dvwa Session입니다.

참고 : 이 페이지의 세션 ID는 브라우저를 닫을 때마다 변경됩니다.

이제 burp suite를 사용하여 브라우저 요청을 캡처하십시오 .

주어진 이미지에서 쿠키가 PHPSESSID P38kq30vi6arr0b321p2uv86k0을 보유하고 있음을 알 수 있습니다 . 이제이 인터셉트 된 데이터를 리피터  보내 응답을 관찰하십시오.

이에 대한 응답으로 강조 표시된 데이터 표시 set-cookie : dvwaSession = 1 이 서버 측의 HTTP 200 OK 응답보다 큼을 볼 수 있습니다 .

개발자에 따르면 매번 새로운 세션 ID 가 서버에 의해 생성되지만 공격자는이 세션 ID P38kq30vi6arr0b321p2uv86k0  스니핑 하여 무단 로그인합니다.

데이터를 가로 챌 때 다음 번에 우리는 또 다른 세션 ID를받을 트림 스위트  PHPSESSID = gutnu601knp4qsrgfdb4ad0te3, 다시 전송 이에 데이터를 가로 챌 리피터 의 반응을 관찰 할 수 있습니다.

그러나 응답을 인식하기 전에 이전 PHPSESSID에서 새로운 PHPSESSID를 교체하십시오 .

주어진 이미지에서 SESSION ID를 교체 한 다음 set-cookie : dvwaSession = 6 및 서버 측에서 HTTP 200 OK 응답으로 응답을 생성합니다. 

이제 인터셉트 된 데이터 내부의 값을 변경 한 후이 요청을 서버로 전달하십시오.

 

'Web' 카테고리의 다른 글

[Hacker101] BugDB v1 Writeup (GraphQL)  (0) 2021.12.28
PUT 메소드 취약점 공략  (0) 2019.08.26
SQLi 페이로드  (0) 2019.07.22
PHP 문자열 필터링 함수 취약점(POSIX Regex --> PCRE Regex)  (0) 2018.10.20
php strcmp() 함수 취약점  (0) 2018.10.20