min8282

[Week4] Burp Suite - CTF(간단 퀴즈) 본문

Normaltic Study/CTF

[Week4] Burp Suite - CTF(간단 퀴즈)

min8282 2024. 5. 13. 00:57

https://ctf.segfaulthub.com/

> Proxy

 - Intercept

 - HTTP history

> Repeater

> Decoder

> Comparer

 

위 기능들을 사용한 간단한 Burp Suite - CTF 문제다.


Burp Suite Prac 1

Open browser 버튼 클릭해서 프록시가 연결된 상태의 브라우저를 킨다.

각자 아이디와 패스워드로 로그인을 하고

총 4문제가 있다.

Burp Suite Prac1을 클릭하면 위 그림처럼 나온다. Flag란에는 해당 문제에서 찾은 플래그를 작성하고 Submit을 누르면 틀렸는지 맞았는지 확인해 준다. 먼저 링크로 들어가 보자

해당 링크에는 별다른 정보가 없다. 이제 Burp에서 확인해보자

지금까지 요청된 기록이 모두 남아있고, 현재 접속한 링크에 대한 요청과 응답 기록도 볼 수 있다. Response 부분을 보면 주석처리로 된 문장이 있다. User-Agent에 segfaultDevice라고 넣어서 요청을 보내라고 한다. User-agent란 사용자가 사용하는 브라우저를 나타낸다. User-agent를 변경하기 위해서는 웹 사이트의 요청을 중간에 가로챈 다음 데이터를 수정해서 서버로 보내야 한다. 이때를 위해 Intercept를 사용해 보겠다.

Intercept로 이동해서 현재는 꺼져있는 intercept 기능을 켜준다.

중앙 아이콘을 보면 신호등이 빨간불도 바뀐 것을 볼 수 있다. 즉, 인터셉트 기능이 켜졌고 웹 사이트의 요청을 잠깐 멈추게 한 상황이다. 반대로 인터셉트 기능을 끄게 되면 이전 그림처럼 신호등이 초록불로 바뀐 것을 볼 수 있다.

다시 1번 문제의 링크를 클릭해서 접속하면

burp에서 요청을 서버에 보내지 않고 멈춰두고 있기 때문에 웹 사이트는 요청을 보낸 상태에서 멈춰 있다. 이때 burp를 확인해 보면

웹 사이트로부터 받은 요청을 중간에 볼 수 있다. 앞서 User-agent를 segfaultDevice로 변경하라고 했기 때문에 위에 박스 친 부분을 segfaultDevice로 변경해 보겠다.

User-agent를 변경하고 Forward 버튼을 클릭하면 내가 잡고 있던 request를 서버로 보낼 수 있다.

브라우저를 확인하면 위와 같이 축하한다는 메시지가 나온다. 한 번 더 burp에서 HTTP history를 확인해 보면

가려진 부분에 Prac1번의 Flag를 찾을 수 있다. 이제 맞는지 확인하러 가기 전에 계속 인터셉트당하면 forward 버튼을 클릭하기 귀찮으니까 인터셉트 기능을 끄고 정답을 확인하러 가자.


Burp Suite Prac 2

2번 문제 링크로 이동

역시나 별게 없다. burp를 확인해 보자

a.html과 b.html 두 데이터를 확인해 보라고 한다. 각각 접속해 보면

a.html
b.html

둘 다 거의 똑같은 문장이 작성되어 있다. 이 두 사이트를 비교하는 게 이번 문제의 핵심이다. 이때 사용할 기능은 Comparer 기능이다.

a.html 부분에 작성된 글을 복사해서

comparer로  이동하고 Paste(붙여넣기)를 클릭하면

복사한 내용이 가져와진 것을 확인할 수 있다. 동일하게 b.html 내용도 가져온다.

Words 버튼을 클릭하여 두 내용을 비교해 보자

비교 결과 다른 부분이 있는 것을 찾았고, 해당 내용을 2번 Flag에 넣어보면 정답을 확인할 수 있다.


Burp Suite Prac 3

Prac3은 1~20이라는 숫자 힌트가 있다. 먼저 링크를 접속해 보자

마찬가지로 별내용 없다 Press F5, 새로고침을 하란다.

새로고침을 해봤지만 응답에 변경되는 점이 보이지 않는다. 요청 부분을 보면 Cookie에 answer라는 파라미터가 있고 1이라는 값이 할당되어 있다. 앞에 힌트에서 1부터 20이라는 숫자를 힌트로 줬기 때문에 이번에도 중간에 웹 사이트 요청을 인터셉트해서 answer부분의 값을 1부터 20까지 하나씩 넣어보면서 응답 결과를 확인하면 찾을 수 있을 것 같다. 하지만, 이렇게 하면 너무 복잡하고 귀찮기 때문에 Repeater라는 기능을 사용해 보자. Repeater는 burp에서 지원하는 반복되는 요청과 응답 결과를 보다 쉽게 확인할 수 있는 기능이다.

먼저 Request 부분에 마우스 커서를 올려놓고 Send to Repeater를 클릭한다.

Repeater 탭으로 이동하면 Request 부분이 복사되어 있다. 이제 여기서 answer 부분의 값을 변경하고 Send 버튼을 클릭하면 그 결과를 확인할 수 있다. 1부터 20까지 하나씩 대입해 보자.

하나씩 answer의 값을 바꿔서 넣어보면 유일하게 달라지는 응답 결과를 확인할 수 있다. 해당 결과가 정답인지 확인해 보자.


Prac 4

마지막 문제도 해당 링크로 접속해 본다.

You are Not Admin.

음 아무래도 admin 계정으로 접속을 해야 우리가 원하는 플래그를 찾을 수 있을 것 같다. 이번에도 request 부분을 살펴보자. Cookie 부분에 level이라는 파라미터가 있고 dxNlcg%3D%3D의 값이 할당되어 있다. 아무래도 level은 사용자 레벨. 즉, 유저인지 admin인지 적혀있는 것 같다. 지금은 우리가 알아볼 수 없게 해시처리 되어 있지만 burp의 Decoder 기능을 사용하면 쉽게 해독할 수 있다.

Decoder 탭으로 이동해서 level의 할당된 dXNlcg%3D%3D를 입력하고, 오른쪽 부분의 Decode as ... 탭에서 어떤 것으로 Decode 할지 선택할 수 있다.

먼저 URL 방식으로 디코딩해봤다. URL 방식의 색상인 빨간색으로 내가 입력한 값이 decode 된 것을 볼 수 있고, dXNlcg==라는 결과가 나왔다. 

이번에는 base64로 인코딩해봤더니 user라는 값이 나왔다. 그럼 admin으로 요청하기 위해 admin을 base64로 인코딩해서 그 결과를 request의 level 부분에 넣어서 응답 결과를 확인해 보자.

admin의 인코딩 결과는 위와 같다.

인터셉트를 켜고 level 부분의 값에 admin을 base64 방식으로 인코딩한 결과를 입력하고 보낸다.

기존 you are not admin과 다른 암호화된 결과가 나왔다. 이것도 디코딩해서 확인해 보자.

처음 디코딩 한 번으로 결과가 안 나와서 base64로 계속 디코딩한 결과 3번 만에 우리가 찾는 Flag를 찾을 수 있었다. 이제 이게 맞는지 정답을 확인해 보자

'Normaltic Study > CTF' 카테고리의 다른 글

[Week6/CTF] - SQL Injection 1  (0) 2024.06.18
[Week5/CTF] Secret Login  (2) 2024.05.22
[Week5/CTF] PIN CODE Bypass  (2) 2024.05.22
[Week5/CTF] Get Admin  (1) 2024.05.22
[Week5/CTF] Login Bypass 1,2  (1) 2024.05.22