본문 바로가기

SWLUG/CTF

[WebHack][WebGoat] 환경세팅 & Hijack a session

WebGoat 환경 세팅

 

 

[WebGoat] 실습 환경 종료 후 컨테이너 재실행

WebGoat를 도커 컨테이너에 올려 실습을 진행한 후 실습이 마무리 되어 종료하고 다시 실행할 경우에는 어떻게 다시 WebGoat 실습 환경으로 접속할 수 있을까? 그 방법에 대해 자세히 알아보고자 한

veriperi-dazzle.tistory.com

※ 안 되면 위의 방법으로 따라해볼 것

 

1. PowerShell 관리자모드로 실행

 

1.1  실행 중인 컨테이너 목록 확인

 docker ps

 

1.2 실행 중인 컨테이너 진입

docker exec -it webgoat /bin/bash

 

1.3

pwd
cd
pwd
cd ./WebGoat
./mvnw spring-boot:run

 

 

 

 

1.4 Burp Suite (버프 스위트) - settings에서 8080 포트 -> 8888로 수정

 

 

 

1.5 인터셉트 off -> 사이트 접속 -> 인터셉트 on -> sign in 

( -> 버프스위트에서 로그인 정보 확인 -> 인터셉트 off -> sign in -> 인터셉트 on)

http://127.0.0.1:8080/WebGoat

 

** 인터셉트 on인 상태로 [sign in] 누르면 계속 로딩되는데, 버프스위트에서 username과 passwd 확인 후 인터셉트 off 해주면 다시 로그인된다.

 

** 계속 버프스위트를 사용할 것이므로 인터셉트 off가 아닌 on 상태로 실습 진행

인터셉트 on 상태에서 확인한 로그인 정보

 

 

 

1.6 Hijack a session  페이지 접속

이 페이지를 접속하지 않으면 hijack cookie 값이 보이지 않아서 꽤 고생했다...

 

 

 


 

실습 

 

Hijack a session
사용자의 인증 여부를 파악할 때 사용하는 Hijack cookie 값을 예측해 인증된 사용자의 Hijack cookie 값을 찾아내는 문제
- 로그인 계정에 대해 알고 있는 정보가 없으니 임의의 값을 입력한 후 [Access] 버튼을 클릭해 액세스 요청 전송

 

 

 

1. 로그인 정보가 없으므로 임의의 id와 passwd를 입력한 후 Access 버튼을 눌러 액세스 요청을 보내나.

* 인터셉트 on인 상태에서 진행

 

1.1 버프스위트 [http history] 에서 

요청 내용 중 URI path가 /WebGoat/HijackSession/login 인 http 통신을 찾는다.

 

위에서 임의로 입력한 username과 passwd를 확인할 수 있다.

 

request 창 잘 안 떠서 인터셉트 off - on 반복하니까 갑자기 뜸;;

 

 

 

1.2 위의 창에서 request 화면에 우클릭 -> send to intruder

 

1.3 Intruder - Positions 창으로 이동

- payload positoins 화면을 볼 수 있음

 

* Intruder
자동화 공격 도구로 동일한 http요청을 여러 번 반복적으로 보내는 무차별 공격을 지원하는데, 필요 시 설정된 위치의 값을 변경 가능

 

 

1.4 우측 [clear] 버튼 클릭

 

 

1.5 password 값만 드래그 후, 우측 [Add] 버튼 클릭

 

인트루더 사용하려면 무조건 변경할 값의 위치를 지정해야 하므로임의로 Password 파라미터를 변경하여 공격 수행
- 드래그한 부분에 기호가 추가되면서 위치가 지정됨

 

 

 

1.6 페이로드 설정 후 Start Attack

[payloads] 탭 : 앞에서 지정한 위치에 대입할 페이로드의 종류와 기타 사항을 설정하는 부분

[payload sets] 

- 지정된 위치에 페이로드의 종류와 페이로드 개수 설정


[payload settings]

- 위에서 숫자를 하나씩 더해가며 대입하기 위해 [Number range]를 [Sequential]로 변경

- 0부터 9까지 하나씩 공격할 수 있도록 설정


[Number format]

- 대입할 숫자의 형태는 [Decimal(10진수)] 선택

- 숫자 자릿수의 최소와 최대를 설정하는 부분 모두 1로 설정

 

 

 

1.7

'-' 앞에 있는 수가 2 커진 경우 찾기

: 누군가 요청을 보냈고, 그 요청에 대한 Hijack cookie 값을 할당받았을 거란 걸 의미

 

다른 누군가가 할당받았을 것으로 예측되는 hijack cookie 값 찾기

1. '-'를 기준으로 2씩 건너뛴 사잇값인 91로 유추
2. 가장 마지막 4자리 범위는 465에서 728 사잇값으로 유추

4453454224392396291-1726486402465

 

 

 

 

 

1.8  [payload positions] 에서 hijack_cookie  값 직접 작성 -> clear -> 뒤에 숫자 범위 드래그 후 Add

 

 

 

1.9  다시 payload 설정 -> Start Attack

 

* Number format에서 Min/Max integer digits는 몇 자리 정수인지 범위 지정해주면 된다.

fraction digits는 소숫점 범위를 지정하는 것인데 나는 소숫점 고려하지 않기 때문에 0으로 해주었다.

 

 

 

 

2.0  response에 Congratulations~~~ 나오면 성공!

 

 


 

문제가 있는데 이대로 끝은 아닐 것 같아서 더 찾아보니까, 

찾은 hijack_cookie 값을 intercept에 추가로 작성해준 후, forward를 해주면 된다!

 

 

 

오예! 아래와 같은 화면이 나오면 성공이다 ㅎㅎ

 

 

참고

 

[WebGoat] Hijack a session 풀이

자체 세션 ID로 개발할 때 사용자별 세션 ID가 복잡하고 임의적이지 않으면 응용 프로그램은 세션 기반 브루트 포스 공격에 매우 취약하다고 한다. 공격을 통해 다른 사용자의 인증된 세션에 대

dangdangee.tistory.com

'SWLUG > CTF' 카테고리의 다른 글

[CTF/ Dreamhack] CProxy: Inject  (0) 2024.09.25
[WebHack][Webhacking.kr] old-52  (1) 2024.09.23
[CTF/ Dreamhack] Type c-j  (0) 2024.05.23
[CTF/ 써니나타스] Web -1  (0) 2024.05.23
[CTF/Dreamhack] easy-login  (0) 2024.05.21