[webhacking.kr] 48번 문제 풀이[Command Injection]

최대 1 분 소요

💡 Webhacking.kr challenge(old) 48번 문제에 대한 풀이입니다.

문제

image

문제 풀이

문제에 접속하면 그림처럼 메모와 파일을 업로드할 수 있는 기능이 있습니다.

처음엔 문제의 의도 파악이 안되서, 메모에 긴 데이터 입력, 파일 업로드(php파일), sql injection등 여러가지 방법을 시도해 봤는데 모두 안되었습니다.

이번 문제는 아무리 생각해도 잘 모르겠어서 다른 분들의 writeup을 보고 힌트를 얻었습니다.

우선 문제는 Command Injection 문제였습니다. 아마 이번 문제에서는 파일을 삭제할때 다음과 같은 로직으로 파일을 지워서 command Injection 취약점이 발생하는 것 같습니다.

  #$files 에는 파일명이 들어감
  $command = "rm -rf ".$files;
  system($command);

따라서 위처럼 코드를 작성하면 파일명에 test.txt;ls를 입력하면 rm -rf test.txt;ls가 shell에서 실행되어 command injection이 발생하는 것입니다.

추가로 php에서는 이러한 command injection이 발생하지 않게 php서버에서 파일을 삭제할 수 있는 함수인 unlink() 함수를 제공합니다. 아래의 코드는 php에서 unlink 함수를 사용하여 파일을 삭제하는 코드입니다.

  unlink($files);

본 문제에서는 파일 명을 통해서 delete 시에 command injection이 가능하므로 다음과 같이 파일명을 만들어 업로드 후 삭제를 해봅니다.

  1;ls

image

image

image

댓글남기기