it-gundan.com

세션을 가로채는 방법?

질문의 명백한 제목에도 불구하고, 이것은 실제로 진정한 목적을위한 것입니다.

내 사이트는 PHP 다음과 같은 코드를 사용합니다.

    $select="select id from tableA where user_id='".$_SESSION['sess_user_id']."'";

나는 실제로 해커처럼 생각 하고이 값을 어떻게 바꿀 수 있는지 알아 내려고 노력하고 있습니다. 세션 하이재킹에 대해 이야기하는 기사를 읽었지만 어떻게 할 수 있는지 모호합니다 ...

25
Steve

기본적으로 누군가의 세션을 가로 채면 세션 ID를 가져 와서 자신의 척을합니다. 일반적으로 sessionID는 쿠키로 전송됩니다. 즉, 상대방 쿠키에 액세스 할 수 있으면 쿠키를 자신의 쿠키에 넣고 세션을 도난 당했을 수 있습니다.

예를 들어 무선 네트워크를 스니핑하고 전송중인 HTTP 패킷을 보거나 XSS attack 을 통해 피해자 브라우저에 쿠키 정보를 공개하도록 지시하는 등 여러 가지 방법으로 수행 할 수 있습니다.

귀하의 질문에 설명 한 예가 SQL-Injection에 취약 할 수 있다고 언급하고 싶습니다. 쿠키의 sessionID를 다음으로 변경하면

asdf' OR 1=1-- 

유효한 사용자로 인증되었을 가능성이 큽니다. 이를 방지하려면 데이터를 어떤 용도로든 사용하기 전에 클라이언트에서 들어오는 더티 데이터에 대해 적절하게 위생 처리해야합니다.

10
Chris Dale

데모에 관심이 있다면 Twitter가 얼마나 쉬운 지 보여주는 좋은 예입니다. 너는 필요할거야:

  • 두 대의 컴퓨터
  • Firebug가 포함 된 Firefox (분명히 다른 옵션이 있지만 인기가 있고 쉽게 구할 수 있습니다)
  • Advanced Cookie Manager와 같은 쿠키 편집기 (Firefox를 통해 쉽게 설치할 수있는 애드온)

파이어 폭스와 파이어 버그가있는 컴퓨터 A에서 비 https 사이트의 Twitter 계정에 로그인하십시오. 로그인하면 Firebug를 열고 "GET Twitter.com"라인을보십시오. 확장하면 응답 헤더 섹션 아래에서 Set-Cookie를 찾습니다. 거기에는 _Twitter_sess라는 쿠키가 있습니다. 값을 강조 표시하고 복사하십시오 (세미콜론까지).

이제 컴퓨터 B의 고급 쿠키 관리자로 Firefox를 열고 Twitter 로그인 페이지로 이동하십시오. 고급 쿠키 관리자를 열고 Twitter.com을 필터링하십시오. Twitter.com 도메인과 쿠키 목록을 찾으면 _Twitter_sess라는 쿠키가 표시됩니다. 삭제하십시오. 이제 다른 컴퓨터에서 이름이 "_Twitter_sess", 경로 "/"및 "Value"인 새 쿠키를 만듭니다. 쿠키를 저장하십시오.

이제 쿠키 관리자를 닫고 트위터 로그인 페이지로 돌아가서 페이지를 새로 고치십시오.

이제 다른 사람의 세션 (open wifi, xss)을 얻을 수있는 영리한 방법을 고안하면 세션 하이재킹이 수행되는 방법 중 하나입니다.

7
Safado

Karrax의 코드는 세션 하이재킹 공격이 아닌 SQL 인젝션 공격입니다.

$select="select id from tableA where user_id='"
    .mysql_real_escape_string($_SESSION['sess_user_id'], $db_handle)
    ."'";

세션 하이재킹에서 Bob은 Alice에 할당 한 세션 ID의 값을 훔칩니다. 이것은 HTML 스트림에 대한 MITM 공격, 네트워크 스니핑, 사이트에 자바 스크립트를 삽입 할 수있는 CSS 버그 또는 기타 방법의 결과 일 수 있습니다.

쿠키에 SSL 및 HTTP 전용 플래그를 설정하고 Bob이 사이트에 액세스하기 전에 Alice의 컴퓨터를 공격하고 특정 값을 세션 ID 그런 다음 Bob은 자신의 컴퓨터에서 동일한 값을 설정할 수 있으며 그의 요청은 Alice와 동일한 세션에 바인딩됩니다. 따라서 인증 할 때 새로운 세션 ID를 생성해야합니다-session_regenerate_id () 참조

4
symcbean

세션 하이재킹에는 일반적으로 사용자의 쿠키를 훔치는 것이 포함됩니다. 예를 들어 Firesheep은 보안되지 않은 Wi-Fi를 통해 세션을 훔치는 Firefox 용 플러그인입니다. HTTP는 상태 비 저장 프로토콜이므로 사람들을 인증하기 위해 최선을 다하는 것은 쿠키를 사용하는 것입니다.

질문에있는 PHP 코드는 could SQL 주입에 취약한 코드의 예입니다. 일반적으로 변수를 삽입하기 전에 소독하는 것이 가장 좋습니다. 그런 쿼리.

2
WalterJ89