두번째, 세션을 유지하는 방법

먼저 session을 유지하는 방법을 알아보기 위해서는 해당 페이지의 통신 과정과 통신으로 인한

데이터가 어떻게 유지 되는지 알아야 한다.

우선 Whireshark로 통신을 보면 아래 이미지와 같다.

/login.php로 접근을 하여 로그인이 성공이 되면 post /login.php로 통신이 이루어 지는데

get /index.php로 자동으로 넘어가면서 메인 페이지인 /vulnerabilities/brute로 넘어가는데

이때 통신은 get으로 바뀐다.

간단하게 말하면 POST /login.php -> /index.php -> GET /vulnerabilities/brute의 순서인 것이다.

Burp Suite로, login을 성공하고나서 /vulnerabilities/brute페이지에서

로그인을 성공하는 경우의 정상적인 통신을 캡쳐해보자

그럼 아래 이미지와 같이 목록을 확인 할 수 있는데

우선 URL을 보면 /login.php로 시작하여 /index.php -> /vulnerabilities/brute/ -> /vulnerabilities/brute/?username=admin&password=password&Login=Login 순서대로 통신이 진행되고 있는 것을 확인 할 수 있다.

그럼 Request는 어떻게 통신이 진행되고 있을까?

아래 이미지를 보자

기본적으로 메인 로그인 후, cookie 값과 security, Upgrade-Insecure-Requestes가 동일하게 유지 되고

초록색 형광팬으로 칠해진듯한 값들이 변형을 할 수 있는 데이터 값들인데

값을 보면 PHPSESSID, security, username, password, login, user_token으로 분류 된다.

/vulnerabilities/brute/?username=admin&password=password&Login=Login를

성공하는 정상적인 로그인 성공 통신 과정은 아래와 같다.

로그인을 하고 나서 "cookie 값과 security, Upgrade-Insecure-Requestes가 동일하게 유지를 하고 있는 상태"에서 headers와 payload의 값을 추가해줘야 session이 유지되기 때문에 정상적인 통신이 가능하다. 통신에서 보면 아래 이미지처럼 여러 값이 보이는데

이렇게

payload: username, password, login

cookies: PHPSESSID, security

header: Upgrade-Insecure-Requests, Accept, Referer, Accept-Encoding, Accept-Language, Connection

payload, cookies, header로 분류를 한 상태에서 통신을 시도해야 세션값이 유지가 된다.

그럼, 아래 이미지와 같이 test5.py 파일을 실행하면

Length가 4704로 통신이 OK 된 것을 확인 할 수 있으며

OK 통신이 떨어진 패킷에서 Response를 보면 'Welcome' 문구를 확인 할 수 있는데

이 'Welcome' 문구는 아래 이미지와 같이 로그인이 성공 했을 때에 화면이란 것을 확인 할 수 있다.

해당 Whireshark 통신은 아래와 같다.

아래는 소스 코드 이다.

---

메인 로그인을 끝낸 뒤 /vulnerabilities/brute 엔드포인트를 향해 무작위 대입 브루트포스 공격을 하는 코드는 다음의 리포에서 찾을 수 있다.

해당 코드를 실행시키면 다음과 같은 결과가 나온다.

Last updated