Race Condition that could Result to RCE - (A story with an App that temporary stored an uploaded file within 2 seconds before moving it to Amazon S3)

링크:

요약:

  1. sql injection으로 내부 dashboard의 admin 권한을 얻음
  2. upload.php라는 기능에서 php 확장자를 필터링하지만 modify.php라는 이전에 올린 파일을 수정하는 기능에서는 php 필터링을 확장하지 않아서 쉽게 php 파일을 업로드하는 것이 가능했다. (웹쉘 업로드)
  3. 문제는 이 웹쉘 업로드한 것을 S3로 옮길 뿐더러 경로를 알 수 없다는 것. 이것을 우회하기 위해 modify.php에 여러번 리퀘스트 패킷을 발생시키니 레이스 컨디션이 발생하여 에러와 함께 파일의 풀경로가 출력됨
  4. 위의 얻은 경로를 계속 요청하며 파일을 업로드하면 S3로 옮기기 전에 파일이 남아있을 때 운좋게 접속하면 쉘 획득