题目: [HNCTF 2022 WEEK2]easy_include
打开环境 直接就给php代码了
如下:1
2
3
4
5
6
7
8
9
10
11
12<?php
//WEB手要懂得搜索
if(isset($_GET['file'])){
$file = $_GET['file'];
if(preg_match("/php|flag|data|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=/i", $file)){
die("error");
}
include($file);
}else{
highlight_file(__FILE__);
}代码很简单 审计一下 发现 这要是用php伪协议来写 php,=等
都被过滤了 这看来用不了php伪协议了没办法了 我们看看这个/文件的信息头
发现Server:nginx/1.18.0我们想到了 日志文件注入 去看看
我们打开burp抓包 由上面代码自动参数为file
我们payload:file=/var/log/nginx/access.log
看一下 发现可以看到日志内容
并且日志内容:
39.162.187.117 - - [29/Jan/2025:10:31:17 +0000] “GET / HTTP/1.1” 200 1534 “-“ “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36 Edg/132.0.0.0”发现内容都是User-Agent中的内容 Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0
发现一样我们对User-Agent中的信息注入 如下:
发现了flag
总结:
不一定非要用php伪协议来进行文件包含
有些题目的过滤非常严格 把php等都过滤了