pathtraversal

- 홈페이지 접속 후
guest를 입력한 상태로View버튼을 누르면 아래와 같은 텍스트가 출력 됩니다.

/get_info경로로 접근(GET)할 때 응답 값을 확인해보면, 아래와 같은 결과를 확인할 수 있습니다.- 입력 폼을 채운 후
View버튼을 누르면, users() 함수가 호출 - users() 함수는
get_info경로로 POST 요청을 보내는데, 이 때userid파라미터가 함께 전달 userid파라미터는 입력 폼에 입력된 값에 따라 0 혹은 1 값으로 설정- guest : 0 / admin : 1
- 입력 폼을 채운 후

admin입력 후View버튼 누르면 서버로부터 아래와 같은 응답이 옵니다.

- 문제에서
/api/flag경로로 접근하면 플래그를 확인할 수 있다고 하였으므로, 이 경로로 접근을 해보았는데요.- POST 요청은 허용되지 않은 메소드로 확인 되었고,
- 이전에
get_infoPOST 요청으로 획득한 정보를 활용해 보아도 401 비인가 응답이 떨어졌습니다.

- 음.. 소스코드를 뜯어서 분석을 해보겠습니다.
- 42라인의
get_info()함수를 보면 POST 메소드로 요청을 보낼 때/api/user/{userid}API를 호출하고 있습니다.- 이 때
userid파라미터 값은 사용자 측에서 입력(조작)이 가능한 값입니다.
- 이 때
- 추가로,
flag()함수는/api/flag경로로 API를 호출해서 플래그 값을 가져오는 용도로 사용됩니다.- 사용자가 직접
/api/flagAPI를 호출하는 것은 불가(401)하지만get_info로 POST 요청은 가능합니다. - 따라서, POST 요청 시에
userid값을 변조하면 서버 측에서flag함수를 호출해 볼 수 있겠네요.
- 사용자가 직접

- POST 메소드로
get_info경로로 요청을 보낼 때,userid값을 아래와 같이 변조하면 플래그 획득이 가능합니다.- (원본) {API_HOST}/api/user/{userid}
- (변조) {API_HOST}/api/user/{../flag}

🐛.. 🐛.. 🐛..