PHP - file_put_contents манипулирование файлами - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь написать файл PHP на сервере и обойти расширение в конце.

Это файл PHP - 1.php:

<?php
file_put_contents("folder\\".$GET['file'].".PNG",$_GET['content']);
?>

Iпытаюсь обойти расширение PNG и написать файл PHP.как это:

1.php?file=attack.php%00&content=blabla

но это не работает

Я пытался:

Null char (%00,%u0000)

Long filename

CRLF chars

space char

?,&,|,>,<,(,),{,},[,],\,!,~,:,; chars

backspace char

../

php протокол

php://filter/write=convert.base64-decode/resource=1.php

(не будет работать, потому чтопапка в самом начале)

У кого-нибудь есть идеи?

Спасибо!

1 Ответ

0 голосов
/ 29 сентября 2018

Здесь есть несколько фундаментальных проблем:

  • Этот код очень небезопасен, я мог бы установить get как ../../1.php и перезаписать этот файл, чтобы делать все, что я хочу.Однако, похоже, что вы проводите некоторое тестирование безопасности, поэтому я думаю, что это может быть проблема
  • php не является протоколом, это язык, поэтому php://anything не должен работать.
  • folder\\ не имеет смысла, что это должно быть / do?

Тем не менее, для образовательных целей предваряющий ../../ должен позволить вам выйти из каталога folder/.

Например, если он находится в /home/Zak/mytest/ с ожидаемым каталогом в каталоге с именем folder, предназначенным для хранения этих файлов PNG, то file из ../../zak_homedir должен поместить файл в /home/Zak/zak_homedir.PNG из-за относительного разрешения пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...