문제에 접근하면 오직 gif 파일만 올릴 수 있다고 한다.
혹시 내가 모르는 취약점이 존재하지 않을까 하여 소스코드 내 여러 함수들을 보았지만 딱히 그래 보이는 것은 없었다.
그래서 gif와 php에 대해 검색을 하다보니 gif 파일 내에 포함되어 있는 PHP code가 실행이 되는 취약점이 존재하는 것을 보고 시도해보았다.
임의의 GIF 파일 내에 TEST 문자열 출력 코드를 삽입한 결과 잘 동작하는 것을 볼 수 있다.
이를 통해 간단히 풀 수 있겠다 하여 system 함수를 이용하여 시스템 명령어를 출력하려하였지만 동작하지 않았다. 하지만 phpinfo()를 해보았을 때도 역시 제대로 동작하는 것을 통해 시스템 명령어를 사용할 수 있는 함수들은 차단한 것으로 보인다.
그래서 PHP 함수 중 디렉토리 내 파일들을 확인할 수 있는 함수를 찾다 scandir 함수를 찾아 이를 통해 현재 디렉토리 내 파일들을 볼 수 있었다.
이후 show_source() 함수를 이용하여 flag.txt 를 읽어 FLAG를 획득하였다.
새로 알게된 사실들
1. scandir은 PHP 5 이상 지원한다. 그 아래의 PHP를 사용할 가능성은 낮지만 만약 그 아래라면 opendir, readdir, closedir 함수를 이용하여 동일한 기능을 이용할 수 있다.
2. echo, print_r, var_dump의 차이점은?
- echo는 단순 출력용 ( 배열을 출력하면 array라고 출력된다. )
- print_r의 경우 배열이나 객체를 출력할 때 사용된다.
- var_dump는 print_r과 비슷하지만 각 값들의 type까지 알려준다.
3. gif 확장자에서 PHP Code가 실행되는 이유는?
'Hacking > Web' 카테고리의 다른 글
MYSQL load_file & into outfile (0) | 2019.06.28 |
---|---|
[JAVA] AES256 decrypt Code (0) | 2019.04.25 |
[websec.fr] level 25 writeup with parse_url bug (0) | 2019.04.07 |
[WebSec.fr] level 17 writeup (0) | 2019.03.28 |
PHP Object Injection with websec level 4 (0) | 2019.03.26 |