Write-Up
해당 페이지 접근 시, 위 그림 1과 같이 파일 업로드 기능과 memo 기능 그리고, 이전에 작성된 글과 그림이 출력되어 진다. 우선, <script> 태그 및 기타 태그 삽입을 시도했었다.
그 결과는 아래와 같다.
<b>1234</b>
HTML Entity Encoding 이 적용되어, XSS 공격이 시행될 수 없다.
그럼에도 불구하고, XSS 공격을 계속 시도하였다... SVG image를 이용한 XSS를 시도했는데, 그 결과는 아래와 같았다.
페이지에 출력되는 그림이 ./7.jpg 이므로, file upload와 path_traversal과 svg_xss를 이용해 스크립팅을 일으키고자 했다. 실패했고, HTML Entity Encoding 또한 적용되어서 실패할 수 밖에(?) 없었다.
결국 다른 Write-Up을 보면서 힌트를 받았다.
위 그림 3과 같이 happy;ls 인 파일 명을 업로드 한다. 해당 서버에는 파일 delete 시, command injection 취약점이 존재하기에 다음과 같은 로직으로 파일이 삭제 될 가능성이 있다.
rm /upload/업로드된_파일명 그럼 happy;ls 인 파일명을 업로드 했으므로, rm /upload/happy;ls 와 같이 명령이 수행될 수 있다. 그럼 ; 앞의 rm upload/happy 명령이 먼저 수행되고, 수행 결과와 관계 없이 ls가 수행되기에 아래 그림 4와 같은 결과를 볼 수 있다.
추가적으로, php 에서 Command Injection에 취약한 함수는 아래와 같다.
exec(), system(), passthru(), popen(), rquire(), include(), eval(), preg_replace(), shell_exec(), proc_open(), eval()
Command Injection 에 이용되는 메타 문자 ( &&, || , ; , |[파이프] ) 중 ; 는 단순히 명령어 구분을 위해 사용하며, 앞 명령어의 에러 유무와 관계 없이 뒷 명령어를 실행한다.
참고