2024 SWLUG/Dreamhack

1주차_CTF 문제풀이(2) - session

un_plugged 2024. 5. 22. 12:11

▶문제

(1) - cookie와 문제는 비슷하다. 다만, 이 문제에서는 세션으로 인증 상태를 관리한다는 내용이 추가되었다.

▶문제 용어 정리

  • 세션

→ 사용자가 웹 브라우저를 통해 웹서버에 접속한 시점으로부터 웹 브라우저를 종료하여 연결을 끝내는 시점까지의 클라이언트의 요청을 하나의 상태로 보고, 그 상태를 일정하게 유지하는 기술.

즉, 방문자가 웹 서버에 접속해있는 상태를 하나의 단위로 보고 그것을 세션이라고 한다.

쿠키의 경우는 사용자의 정보를 사용자 컴퓨터 메모리에 저장하는 반면

세션은 방문자의 요청에 따른 정보를 방문자 메모리에 저장하는 것이 아닌 웹 서버가 세션 아이디 파일을 만들어 서비스가 돌아가고 있는 서버에 저장한다.

쿠키와 다르게 서버에 저장되므로 비교적 보안이 필요한 데이터는 쿠키보다 세션에 저장된다. 서버가 종료되거나 유효기간이 지나면 사라진다.

 

▶풀이

(1) 문제와 마찬가지로 이 부분에 주목할 필요가 있다. 보아하니 guest, user, admin 계정이 있고 이 중 admin 계정으로 로그인을 하여야 flag를 얻을 수 있다. 우선 비밀번호를 모르는 admin 계정 말고 guest, user 계정으로 로그인 해본다.

두 계정 모두 로그인 할 시 admin이 아니라는 문구와 함께 위의 사진과 같은 쿠키를 볼 수 있다. 여기서 sessionid의 value값을 admin의 값으로 넣어줘어야 admin 세션으로 변경되어 flag를 얻을 수 있다. 즉, admin의 sessionid를 구해야한다. 그래서 소스코드를 살펴보았다.

수많은 소스코드 중 admin에 관련된 소스코드 위주로 살펴보았다. 그 중 admin을 정의하고 있는 이 부분이 중요한 것 같다.

os.urandom(1).hex(): OS에서 1바이트(8비트)의 무작위 바이트를 생성하고 그것을 16진수 문자열로 변환한다. 이렇게 생성된 문자열은 세션 스토리의 key로 사용되고, admin은 해당 세션의 value로 저장된다. 즉, 이 코드를 실행하면 세션 스토리지에 임의의 세션 키와 'admin' 값이 추가된다.

따라서 무작위 대입을 통해 admin의 sessionid를 얻는다. 일일이 다 할 수 없으니 Burp Suite 프로그램의 intruder 기능을 이용하여 무작위 대입 공격을 시도해본다.

※Burp Suite의 intruder

웹 애플리케이션을 대상으로 사용자 정의 공격을 할 수 있는 자동화 도구. 주로 무차별 대입공격(Brute Force) 에 많이 사용된다.

https://portswigger.net/burp/communitydownload

여기서 Burp Suite를 다운받을 수 있다. Burp Suite는 프록시 서버를 사용하기 때문에 네트워크 설정에서 프록시 서버를 켜준다. (꼭 Burp Suite 사용 시에만 켜기. 안그러면 인터넷 이용이 안된다...)

다운을 받으면 위의 화면처럼 시작된다. 여기서 상단의 Proxy-Intercept를 클릭한다.

 

다음으론 Open browser를 클릭하여 Burp Suite 내에서 브라우저를 열어준다. 거기서 드림핵 문제 사이트로 들어간다.

※인증서 오류

처음에는 이 화면에서 넘어가지 않았다. 구글링을 해보니 인증서 문제로 인해 접속이 되지 않는거였다.

밑의 블로그를 참고하여 이 문제를 해결하였다.

https://secuity-lighthouse.tistory.com/15

 

사이트에 들어가서 guest 혹은 user 계정으로 로그인해준다. 여기선 guest 계정으로 로그인해주었다.

그 후 다시 돌아가서 Intercept on을 켜주고 그 옆에 HTTP history를 들어가준다.

Method는 GET이고, URL은 / , MME type은 HTML, Tittle은 Index Session인 기록을 클릭한다. 그러면 밑에 Request- Raw에서 sessionid를 확인할 수 있는데 이를 우클릭한 후 Send to Intruder을 클릭한다.

여기서 주의할 점은 꼭 sessionid 값을 드래그 후 우클릭을 해야한다!

위의 사진처럼 상단의 Intruder가 주황색으로 들어온다. Intruder로 들어간다.

Payloads를 위의 사진과 같이 설정한다. 그 후 Start attack을 눌러 무차별 대입 공격을 시작한다.

공격을 하다보면 위와 같이 Length가 혼자 다른 값이 나온다. 이를 클릭 후 Reponse-Pretty로 들어가면

Hello admin, flag is DH{...}의 형태로 flag값이 나온다.

문제 풀이에 성공하였다!