Blog to Blog

[Webhacking] 2019 사이버작전 경연대회(화이트햇) 라이트업 - Hidden Command 본문

Hacking/Writeup

[Webhacking] 2019 사이버작전 경연대회(화이트햇) 라이트업 - Hidden Command

kookhh0827 2019. 8. 19. 23:09

해당 문제는 2019 사이버작전 경연대회(구 화이트햇) 에서 출제된

Hidden Command라는 문제의 writeup 입니다.

 

간단한 웹해킹 문제입니다

 

제공된 flask로 작성된 웹서버 파일
제공된 문제 사이트

먼저 위와같이 flask로 작성된 웹서버 파일과

문제 사이트를 줍니다.

 

해당 문제 사이트에서 취약점을 찾아서 flag를 따내는 것이 목표입니다.

 

웹사이트의 분석부터 먼저 해보겠습니다.

 

회원가입 페이지

회원가입 페이지입니다.

 

실제로 회원가입을 하고 로그인을 해봤습니다.

 

게시글 리스트
Secret Document를 읽을 수 없다

 

로그인하면 게시글 리스트 확인과 게시글 작성이 가능합니다.

하지만 본인 글이 아닐 경우 확인이 불가능합니다.

 

그리고 게시글 리스트 맨 처음에 Secret Document라는 admin의 게시글이 존재하는 것으로 보아

이를 읽으면 flag를 줄 것으로 예상했습니다.

 

이제 python으로 작성된 서버 파일을 보고 취약점을 찾아보도록 하겠습니다.

 

딱 봐도 수상한 함수

 

열어보면 딱봐도 수상한 함수가 상단부에 정의되어 있습니다.

clear_user 함수가 user을 admin으로 바꿔주는 것으로 추측됩니다.

 

clear_user 함수가 불리는 부분

그리고 해당 함수는 /forget을 방문했을 경우에 불리게 됩니다.

 

먼저 POST로 요청이 왔는지 확인하고, form.validate 함수는 제대로된 양식으로 왔는지 확인하는 함수로 보입니다.

 

그리고 form 속의 내용물을 쿼리로 날려 db에 있는지 확인합니다.

 

다음에 user의 패스워드를 새로운 랜덤 패스워드(10자리)로 바꾸고, forget_res.html로 보냅니다.

 

만약 정상적인 경우라면 다음과 같은 결과물을 얻을 수 있습니다.

 

정상적으로 처리된 forget 페이지

 

이렇게 초기화된 패스워드를 가르쳐줍니다.

 

하지만 중요한 것은 해당 페이지에서 clear_user 함수를 부른다는 사실입니다.

 

추측컨데 forget을 정상적으로 처리되도록 유도한 후에

 

Secret Document를 방문하면 flag를 딸 수 있을 것으로 보입니다.

 

로그인 된 상태로 forget에 들어갔다

 

그래서 먼저 로그인하고 forget에 들어가서

 

정상적으로 비밀번호 초기화가 되었다

 

정상적으로 비밀번호를 초기화시켰습니다.

 

여기서 비밀번호 초기화 할 때 접속한 유저의 세션을 초기화시키지 않기 때문에

 

바로 List Board로 가서 확인이 가능했습니다.

 

 

FLAG를 정상적으로 획득했다

 

그리고 가서 확인한 결과

 

예상대로 현재 유저가 admin으로 변경되어

 

정상적으로 Secret Document를 읽어올 수 있었습니다.

 

정답 : FLAG{N0t_s3cur3_4t_411}

 

Comments