본문 바로가기

해킹/Web Hacking

[2주차] 해킹 스터디 정리 - 쿠키,세션,세션ID,Burp Suite 사용법

HTTP : Hypert Text Transfer Protocol

쉽게 말해 통신 양식이다

관공서같은 곳에서 서류 작업을 할 때 제출해야 하는 양식

 

 

* 로그인 구현

   -HTTP 프로토콜

    > "요청" / "응답"

 

HTTP는 로그인 후 다른 작업을 할 때 다시 인증을 받아야 하는 문제가 생긴다.

 

즉 연결성이 없다.

 

쿠키

이를 해결하기 위한 것이 쿠키

쿠키는 Set-Cookie를 통해 서버가 포스트잇처럼 client에 넣어주고 다음부터 client가 요청할 때마다 딸려오게 된다.

그럼 서버는 그 쿠키를 보고 사용자임을 알고 추가 인증을 할 필요가 없는 연결성을 부여해줍니다

 

여기서 취약점이 발생합니다

클라이언트에서 출발한다는 점이 변조가 가능하다는 것이다.

mario라는 사용자가 cookie를 변조하여 bokyu 로 요청을 보낸다면 서버는 bokyu 라는 쿠키를 보고 다른 사용자의 로그인 화면을 보여주게 된다.

출처 : https://thecodinglog.github.io/web/2020/08/11/what-is-session.html

 

세션

이를 보완하기 위해 나온 것이 세션이다.

세션은 클라이언트가 아니라 서버에 저장된다.

출처 : https://thecodinglog.github.io/web/2020/08/11/what-is-session.html

세션은 서버에 저장되고 세션ID라는 것을 클라이언트에 쿠키와 같이 보낸다. 단, 이는 클라이언트에게 보내는 것이므로

절대 신뢰성이 없다고 보고 유추가 불가능한 문자와 숫자의 배열로 구성된다.

 

 

HTTP history를 검사하면 이런식으로 나온다

 

PHPSESSID라는 곳을 admin id 값을 알아내서 바꾸면 admin 아이디로 로그인이 가능하다 비밀번호를 모른다고 하더라도

 

 

 

** Burp Suite과 개발자 도구의 차이점?

Burp Suite은 인터셉트로 실제 웹사이트의 흐름을 막아 (Proxy) 패킷을 변경하여 보낼 수 있다.

하지만 개발자 도구는 흘러온 패킷이 어떤 형태인지 볼 순 있지만 변경은 불가능함

 

Cookie 변조

클라이언트에 저장되는 Cookie는 변조가 가능한데, Burp Suite를 통해

패킷 값의 쿠키를 변경하여 비밀번호를 몰라도 상대방의 계정으로 로그인할 수 있다

출처 : https://raonctf.com/essential/study/web/session_connection

 

-------------------------------------------------------------------------------------------------------------------

 

**Burp Suite  사용법

1. intercept

2. history

3. repeater ( 엄청 자주 씀) : 반복적인 패킷을 계속 보낼 때

4. intruder : 양이 많거나 조금씩 변형되는 패킷을 보내야할 때

 

이 사용법을 좀 더 면밀히 보기 위해 테스트 페이지를 살펴보자

 

강사님이 말해주시는 테스트 사이트이다.

기본적으로 4개의 메뉴가 있다

 

 

1. Intercept

Click 하면 페이지로 data가 날라가고 그 데이터를 intercept on 으로 막아서 데이터를 바꾼 후,

변경된 패킷을 날려보내면 될 것 같다

intercept를 on으로 바꾼 후, 살펴보니 16번째 줄에 data가 존재한다.

이 데이터를 normaltic으로 변경하려 하면, 변경이 가능하다 마치 메모장처럼

변경한 패킷을 forward를 눌러 날려보내면, 현재 상태가 GOOD으로 바뀐다

 

 

2. history

ctrl+shift+del을 눌러 쿠키를 제거한 후, 새로고침을 누르면 밑의 HTTP history에 불려온 페이지들이 쫙 뜰 것이다

여러 페이지들이 있는 데, 어떤 곳에 힌트가 있을 지 살펴보면

 

이건 아니고...

 

whfkoikve라는 이상한 파일명에서 SecretData를 찾았다

이걸 입력창에 넣으면 GOOD으로 바뀐다

 

 

 

3. Repeater (정말 많이씀)

data : 1이라는 데이터를 한번 보내보자

 

history에 보낸 데이터가 남는다

 

근데 data= data+%3A+1이라는 모습으로 나온다

이건 인코딩 때문인데, 

 

인코딩

특수문자나 영어/문자/한글이 섞일 때 인코딩 규칙이 적용된다

 예를 들어, 띄어쓰기 공백은 '+' 기호로 표시된다

%3A라는 건 : (콜론)을 HEX로 표현한 것이다

 

그래서 data : 1 이라는 데이터가 data+%3A+1로 표현된 것이다

 

 

어쨌든, 이 페이지를 Repeater로 보내보자

마우스 오른쪽 클릭 후, Send to Repeater를 누름

그럼 현재 페이지에서 데이터를 변경해서 패킷을 마음껏 보내볼 수 있다

 

무차별적으로 넣어보다가 14에서 GOOD으로 변경된 것을 볼 수 있다

Pretty가 아니라 Render를 누르면 화면으로도 볼 수 있다

 

4. Intruder

이것도 Repeater 때 처럼 data : 1 을 한번 보내보자

 

이제는 Repeater가 아니라 현재 페이지를 Send to Intruder로 보낸다.

 

보내면 위와 같은 창이 뜰 텐데, Intruder 자체에서 변경하면 좋을만한 곳을 자동으로 추천해서 보여주는데,

Clear를 눌러서 제거해준다.

 

그 후, 바꿀 영역을 드래그 해서 Add를 누르면 영역으로 표시가 된다

 

그러고나서 Payloads를 누르면 밑과 같은 설정 창이 뜬다

 

 

Payload type은 숫자를 보낼 것이므로 Numbers로 바꾼다

 

순차적으로 (Sequential) 1부터 100까지의 패킷을 보낼 것으로 설정하자 Step은 간격이다

 

설정을 끝마쳤으면 Start attack!!

규칙에 따라 1부터 100까지의 패킷을 보내다가 Length가 다른 페이지가 포착되었다. 이것은 글자가 추가되었거나 변형되었다는 뜻이다

 

입력창에 data : 43 을 입력하면 

페이지가 GOOD으로 바뀐다