第三周2

题目: [HNCTF 2022 WEEK2]easy_include

  1. 打开环境 直接就给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__);
    }
  2. 代码很简单 审计一下 发现 这要是用php伪协议来写 php,=等
    都被过滤了 这看来用不了php伪协议了

  3. 没办法了 我们看看这个/文件的信息头
    发现Server:nginx/1.18.0

  4. 我们想到了 日志文件注入 去看看

  5. 我们打开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”

  6. 发现内容都是User-Agent中的内容 Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:134.0) Gecko/20100101 Firefox/134.0
    发现一样

  7. 我们对User-Agent中的信息注入 如下:

    发现了flag

  8. 总结:
    不一定非要用php伪协议来进行文件包含
    有些题目的过滤非常严格 把php等都过滤了