Hijack a session 풀이
사용자의 인증 여부를 파악할 때 사용하는 Hijack cookie 값을 예측해 인증된 사용자의 Hijack cookie 값을 찾아내는 문제
실습 전 준비 사항
1. WebGoat 열기

Docker Desktop으로 열어보려 했으나 CPU가 0%로 나와서...PowerShell을 관리자 권한으로 실행하여 WebGoat를 실행해보았다.
docker ps #실행 중인 컨테이너 목록 확인
docker exec -it webgoat /bin/bash #실행 중인 컨테이너 진입
위의 명령어를 통해 WebGoat로 진입해준다.

pwd
cd
pwd
cd ./WebGoat
./mvnw spring-boot:run
그 후 위의 명령어를 차례로 입력 후 실행시켜준다.


2. Burp Suite 설정
WebGoat도 기본 포트를 8080포트로 사용하기 때문에 8080으로 포트 수정을 하였다.

※8080포트가 기본인데 왜 8888로 입력하는지 궁금해서 찾아보았는데 8080 대신 8888을 사용하는 것은 주로 충돌을 피하거나 다른 설정과의 차별화를 위해서라고 한다...
3. Burp Suite에서 WebGoat 실행
intercept on을 눌러 "127.0.0.1:8080/WebGoat"를 입력하여 WebGoat에 접속한다. 그 후 다시 intercept off를 누르면 아래와 같이 로그인 페이지로 넘어간다.

이후 intercept를 다시 on으로 변경하고 Username과 Password에 임의의 값을 넣어본다.
나는 Username으로 guest를, Password로 1234를 입력하였고 Burp Suite에 이와 같이 출력되는 것을 확인할 수 있었다.

문제 풀이
이제 기본 세팅이 끝났으니까 본격적으로 문제를 풀어보겠다,,,
먼저 WebGoat 홈페이지에 들어가야하니까 내 계정으로 로그인을 해준다.

WebGoat로 들어오면 Hijack a session을 눌러서 문제 페이지로 들어간다.
※처음에 여길 못들어가서 힘들었는데...버프 스위트 내의 on/off에 대한 이해가 부족했던 것 같다.
요청을 보낼 때는 -> off
가로채기 직전 -> on을 눌러서 가로챔
그리고 Hijack a session은 사용자의 계정을 모르는 상태에서 푸는 문제니까 문제 페이지에 접속 후! 임의의 값으로 로그인을 하여 문제를 풀어나간다.

아이디와 비번에 각각 test라는 임의의 값을 넣어주면서 문제 풀이를 시작한다.
-> 앞서 말한 것과 같이 로그인 계정에 대해 알고 있는 정보가 없으니 임의의 값을 입력한 후 엑세스 요청을 전송한다.
다시 버프 스위트로 돌아가 HTTP 요청 및 응답 기록을 보기 위해 [HTTP history]탭으로 이동한다.

위와 같이 요청 내용 중 POST 방식의 URL path가 "/WebGoat/HijackSession/login"인 HTTP 통신을 찾을 수 있다.
Request 영역에서 임의로 입력한 아이디와 비번을 확인할 수 있고 Response 영역의 HTTP 기록에서 Set-Cookie라는 응답 헤더를 볼 수 있다.
※/WebGoat/HijackSession/login으로 엑세스 요청을 보내면 응답 헤더에 hijack cookie를 포함하여 응답한다.
이제 intruder를 이용한 공격을 위해 Response 영역에 마우스 우클릭 후 'Send to Intruder'를 클릭한다.
※Intruder: 자동화 공격 도구로 동일한 HTTP 요청을 여러 번 반복적으로 보내는 무차별 공격을 자원하는데 필요 시 설정된 위치의 값을 변경 가능

intruder 탭을 클릭 후 Positions을 선택하면 아래와 같이 Payload positions를 볼 수 있다.

그 다음 무차별 공격 시 설정한 위치의 값을 변경하기 위해 초기화 작업을 진행한다.
1. 요청 내용을 ∮기호로 감싼 부분이 값을 변경할 위치
2. 초기화를 위해 Clear ∮ 클릭
3. Intruder를 사용하려면 무조건 변경할 값의 위치를 지정해줘야 하기 때문에 임의로 password 파라미터를 변경하여 공격을 수행 -> password 파라미터에 대입된 값을 드래그 후 Add ∮클릭
4. 드래그한 부분에 ∮가 추가되면서 위치가 지정

이제 Payloads 탭으로 들어가서 아래와 같이 설정을 맞춰준다.

- Payloads 탭: 앞에서 지정한 위치에 대입할 페이로드의 종류와 기타 사항을 설정하는 부분
- Payload sets 영역: 지정된 위치에 페이로드의 종류와 페이로드 개수 설정 -> 여기선 숫자를 대입하기로 했으니 Numbers로 설정
- Payload settings 영역: 위에서 숫자를 하나씩 더해가며 대입하기 위해 0부터 9까지 하나씩 공격할 수 있도록 설정
- Number format 영역: 대입할 숫자의 형태는 10진수(Demical)를 선택하고 숫자 자릿수의 최소와 최대를 설정하는 부분을 모두 1로 설정
위와 같이 설정 후 Start attack을 눌러 공격을 시작한다.

총 10번 전송된 요청을 확인할 수 있고, 통신에 대한 요청과 응답 내용을 볼 수 있다.
이제 0번 Payload부터 Response 영역을 살펴본다.


'-' 기호를 기준으로 앞에 숫자가 1만큼 증가한다. 즉, 요청을 보낼 때마다 숫자가 하나씩 증가하는 것을 알 수 있다.

위의 1번과 2번 Payload는 '-'기호를 기준으로 앞에 숫자가 2씩 증가한다. 즉, 2번과 3번 요청 사이에 누군가가 요청을 보냈고 그 요청에 대한 hijack cookie 값을 할당받았을 것이다!
2번 요청 쿠키 값: hijack_cookie=7168709634578499445-1726466988249
3번 요청 쿠키 값: hijack_cookie=7168709634578499447-1726466988622
- '-' 기호를 기준으로 앞에 3자리는 사잇값인 446으로 유추
- 가장 마지막 4자리가 8249와 8622 사이 값임을 유추
유추한 값을 기준으로 다시 공격을 수행한다.
Payload positions으로 돌아가 " hijack_cookie=7168709634578499446-1726466988622"을 추가한다.
(사이값인 446과 8622까지 범위)
추가한 뒤 마지막 4자리인 8622에 Add ∮를 해준다.

Payloads 탭으로 들어가 아래와 같이 설정을 맞춰준다.

Number format은 4자리니까 4로 맞춰준다. 그 후 Start attack을 눌러 공격을 수행한다.

길이가 다른 요청이 하나 있고 이 요청의 Response를 들어가면

문제 풀이에 성공했다고 나온다!
'2024 SWLUG > WebHacking' 카테고리의 다른 글
5주차_웹해킹 수업 정리 (0) | 2024.11.19 |
---|---|
4주차_웹해킹 수업 정리 (0) | 2024.11.13 |
3주차_웹해킹 수업 정리 (0) | 2024.10.30 |
2주차_웹해킹 수업 실습 (0) | 2024.10.01 |
[webhacking.kr] old-52 (0) | 2024.09.20 |