2023SSSCTF WriteUp

Last updated on October 30, 2023 pm

2023SSSCTFのwrite up

PWN

test your nc

根据nc教程,下载并使用windows版nc,然后用powershell打开nc,键入’./ncat 地址 端口’,成功连接后,输入’cat /flag’就能拿到flag了

Hack Traffic Light

利用nc连接上服务器,
hardtriffic1.png
按照题目要求随便输入几个数,然后观察输出的变化!,不难发现,三个十六进制数中,第一个数字与第三个数字所对应的秒数互换了,所以我们只要将题目要求的秒数转换成十六进制,并交换一三位再输入,就能得到flag了!

strange graphic

利用nc连接上服务器,根据题目,我们不难猜测出这道题目要利用c语言中整形变量数据溢出的漏洞,因此我们只需要构造特定的数,来满足题目条件

  1. 第一小题,他们的和的两倍小于题目要求的,所以我们只需要让结果超出2147483648,让其为一个负数就行了
  2. 第二小题也是这样,不过构造起来麻烦一点(其实是我忘了,我记忆中好像是构造了一个结果超过了两倍的2147483648的数,让他溢出后变成了一个小正数9,满足题目要求) 然后这里利用了网上的一个分解整数的软件,链接就不放了,网上蛮多的
  3. 第三部分输入-1和2147483648就行了,下面放图片
    strange1.png

这就是我所做出pwn试题

REVERSE

操控加密

题目给了我们一串密文和一个用来加密的程序,输入字符便能给我们返回加密后的数据,
caokongjiami1.png
根据flag的开头,然后把键盘上
个字母的大小写和数字输进去,然后人肉破解(解密是真不会啊),这样我们就能得到flag了

这就是我所做出REVERSE试题

WEB

ezphp

题目给了我们一个网站,我们打开网页源代码可以看见这样一行提示ezphp1.png
将getflag.php输入到url后面,我们可以进录到一个新的页面,打开源码,有以下信息Snipaste_2023-10-12_19-37-31.png这明显是想要提示我们利用get传参的办法,于是加入?DLUT=2023SSSCTF,成功获取flag.
另外,进入网页的robots.txt文件我们还能获取到彩蛋的最后一个碎片

INFO SELECTION

一进到网页网页提示说不会让我们获取源码,我们点击f12,检查源码,可以发现hint
info1.png
提示我们敏感文件都有哪些,我们不难想到flag可能藏在如roobots.txt www.zip 备份(其实是我忘记了第三个是什么貌似是一个.bak文件?)等文件中,在URL中加上这些我们就能够获取到flag的三个碎片,从而得到正确的flag了

YuanのSQL

进入网站(我超,原),观察到网站下方的提示,不难想到这是一个有关于sql注入的题目
yuansql.png
不难发现php语句中缺少了引号,键入数值为1的id时,我们获取到了“scr1w”,当键入的数值为2时,我们就成功获取到了flag(具体流程给忘了,所以说的有点不清楚,但大致流程确实是这样的)

ezphp2.0

进入网页后我们能看见网页给的php代码
ezphp2.png
阅读代码我们不难知道我们首先要让’DLUT=A306’成立,代码中要求WEB1不等于WEB2但都要等于114514,而”==”为弱相等,我们便可以将他们分别等于114514a于114514b,以get传参后出现
ezphp2_2.png
根据弹出的内容,我们可知这有关php伪协议,且经测试flag.php中的flag不能直接获得,所以要经base64编码后获得,满足这两条后,我们构造payload
http://210.30.97.133:10009/?DLUT=A306&WEB1=114514a&WEB2=114514b&file=php://filter/convert.base64-encode/resource=flag.php
获取base64编码后的内容
T0hISEhISEhISEhISCEKWW91IEp1c3QgR2V0IFRoZSBGbGFnISEhIQpTbyBOZXdCZWUh4pSAPeKJoc6jKCgo44Gk4oCizIDPieKAosyBKeOBpOKUgD3iiaHOoygoKOOBpOKAosyAz4nigKLMgSnjgaTilIA94omhzqMoKCjjgaTigKLMgM+J4oCizIEp44GkClRoaXMgaXMgdGhlIGZsYWc6Cjw/cGhwCiRGTEFHID0gJ2ZsYWd7ZDczYmE2ZmItZWJjMC00MWYxLWE3MGYtY2MwOWRlMjlhMjNmfSc7Cj8+
再解码就能获得flag了

SleepyHead

进入网页,看见有关使用浏览器的信息
sleephead1.png
猜测可能与http headers的修改有关,于是拖进burpsuite中查看,将浏览器改为Scr1w后变为:
sleep2.png
加上Referer:Scr1w.Studio
sleep3.png
加上DNT:1变成:
sleep4.png
加上via:claaaaash.mono
sleep5.png
加上X-Forwarded-For:127.0.0.1
sleep6.png
成功获取flag,
phase7.png

这就是我所做出的WEB试题

CRYPTO

等比数列?

根据题目的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from Crypto.Util.number import *
a0 =
q =????
n = 710009

for i in range(100):
a = a0*q % n
a0 = a
if i == 30:
print(a)
if i == 66:
print(a)
# 338473
# 519563

可写出这样一个代码(实际上是GPT写的),

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from Crypto.Util.number import *

n = 710009

# 遍历所有可能的 a0 和 q 的值
for a0 in range(1000, 10000):
for q in range(2, n):
# 计算第31项和第67项
a31 = a0
for i in range(30):
a31 = a31 * q % n
a67 = a31
for i in range(36):
a67 = a67 * q % n
# 检查是否满足题目给出的值
if a31 == 338473 and a67 == 519563:
# 打印出一组解
print("a0 =", a0, "q =", q)
break

最后破解出a0和q的值分别为3202和2023,从而得出flag(GPT立大功)

basic-RSA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# python是ctf中最常用的语言,请你通过搜索引擎,自行安装python,并学习如何为python安装第三方库
# 在配置好python环境后,你需要自行安装pycryptodome库、gmpy2库
# 在完成所有配置后,可以运行这段代码,得到你的flag!
from Crypto.Util.number import *
# 导入我们下载的crypto库,方便后续使用库中的函数

# bytes_to_long()函数,把字母转成数字
m = bytes_to_long(b'**********************************')

# 生成两个随机的素数,取名p和q
e = 65537
p = getPrime(512)
q = getPrime(512)

# 计算p乘q
n = p*q

# RSA加密,pow()实现了次幂运算,第三个参数是模数,例如pow(2,4,3)=(2*2*2*2) % 3 = 1
c = pow(m, e, n)

# 输出p、q、c
print(p, q, c)

# 下面是解密代码,当你配好所需要的python环境后,上网自行搜索RSA解密的步骤,补全代码进行解密
p = 11272029161810989637077873599019496877008218675207504587156140192021377360482704022176035187554108368278190548694137066116291687848811218316609251992398531
q = 8907273588185400007517004981004813156071713948292117095141121709405743482454098895087505262599398998351848699006495710441163005192326918043131527773275261
n = p*q
e = 65537

d =86878502655260118864644922031588477057410536348819682235197775008566666793725177071665880121392724687843582788113205748413157483597543224904923252083988393307886889482606627681815785098540071203174556413083407356299373068894395628419702691762298577890184942379591377595895204260258458213890493837578458778073
c = 59456089016060766225332390698350903116623033134514592830079717766948507914949032997169195220803642273910722815705790231122189278462009688705900558121892002228836045157732582528181395382772779860190430228823868911649968133987708461443646703064201375236983090379446718660629027030001866595377945046940440636896
print(long_to_bytes(pow(c, d, n)))

安装好所对应的库之后,掏出我们的
bas_rsa1.png
一个个输进去就能解出flag了

X^2-RSA

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from Crypto.Util.number import *
import gmpy2

p = getPrime(512)
q = getPrime(512)
e = getPrime(512)
n = p*q
c = pow(bytes_to_long(flag), e, n)
gift1 = p+q
gift2 = e**2 % p

n = 119599732159422912237126092503633593127444912729791769936188025920440247693519660056564377003327876458608897540804699714727762677074095341934117636626737553788910255544086673845028462552403437563867021138226332533523261069120346290748100178821888057505879672808893138750370221354811388445573458187283950529329
c = 26993320920246459282903918258141924700555534517795083322600888678032578078748098842182757614410623183383625789026194273160849599428611123639374938192451695449150144414006335708435850583611654329589400433382496740881780217929655022786322641976440238749489472351300088441838107888022748740774750642665176409512
gift1 = 21880888517757890831027504308354774959604394643578725603877760598995238359425630435298497116759287279215040830436678520457866585439083039292573782745193150
gift2 = 10396530748040666625822969282831155457018939705806203185375728535142910851038248041763489482743937736843953702379394388895553869400661190661679347693932652

代码如上
先算出p,q的值,根据p+q,q*q,写出py代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from sympy import symbols, Eq, solve

def calculate_p_q(product, sum):
p, q = symbols('p q')
# 设置方程
eq1 = Eq(p*q, product)
eq2 = Eq(p+q, sum)
# 解方程
solution = solve((eq1,eq2), (p, q))
return solution

# 已知的p*q和p+q的值
product = 119599732159422912237126092503633593127444912729791769936188025920440247693519660056564377003327876458608897540804699714727762677074095341934117636626737553788910255544086673845028462552403437563867021138226332533523261069120346290748100178821888057505879672808893138750370221354811388445573458187283950529329 # 这是p*q的值
sum =21880888517757890831027504308354774959604394643578725603877760598995238359425630435298497116759287279215040830436678520457866585439083039292573782745193150 # 这是p+q的值

solution = calculate_p_q(product, sum)
print(f"解: {solution}")

然后通过gift2和p算出e

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 定义一个函数,用扩展欧几里得算法求解线性同余方程
def exgcd(a, b):
if b == 0:
return a, 1, 0
d, x, y = exgcd(b, a % b)
return d, y, x - (a // b) * y

# 输入x^2%p的值和p的值
r = int(input("请输入x^2%p的值:"))
p = int(input("请输入p的值:"))

# 判断r是否是p的二次剩余,即是否存在x满足x^2%p=r
d = exgcd(r, p)[0] # 求r和p的最大公约数
if d != 1: # 如果r和p不互质,那么无解
print("无解")
else: # 如果r和p互质,那么有解
# 使用费马小定理求r的模p平方根,即x^2%p=r
# 费马小定理:如果a和p互质,那么a^(p-1)%p=1
# 令a=r,两边同时开方得到r^(p+1)/4%p=x或-x
x = pow(r, (p + 1) // 4, p) # 使用pow函数快速求幂取模
print("一个可能的解是:", x)

解出p q e后丢风二西里就能解出flag了

这就是我所做出的CRYPTO试题

MISC

快来签到吧!

一眼社会主义核心价值观加密,找网上工具就能解决了

不许发电

用101editor打开(或者放linux里面),用png.bt模板,发现ihdr的crc校验报错(放linux图片会打不开,因为linux也有crc校验),怀疑改了宽高,修改高后发现底部有一个二维码
power.png
扫描完二维码就能获取到flag了(所以这题为什么300分)

尊嘟假嘟

直接丢excel里面,然后按一下A1那个框就会停止跳动?(猜测出题人应该是想要让我们写个py程序,自动读取A1框的值,然后返回到A2,但不知道为什么点一下就会暂停。。),使用时间暂停大法后,输入值,将返回值进行base64解密,从而获取flag(所以这题为什么300分)

未经禁止,允许垂钓!

拿到图片,先修改高,成功获取一个fakeflag
之后丢进kali里用pngcheck,发现有zip压缩文件,提取出来得到
chuidiao.png
打开fulage.txt发现
chuidiao2.png
又是一个fakeflag
打开010editor,上面没什么问题,滑到最下面,
chuidiao3.png
chuidiao4.png
可以发现这是一张png图片,但是有些问题,观察标题和图片
chuidioa5.png
chuidiao6.png
发现读法就是加密的方式
于是编写个py脚本来解密

1
2
3
4
5
6
7
8
9
10
11
12
def process_hex(hex_string):
hex_list = hex_string.split()
pairs = [hex_list[i:i+2] for i in range(0, len(hex_list), 2)]
odd_pairs = pairs[::2]
even_pairs = pairs[1::2]
return odd_pairs + even_pairs

hex_string = "00 49 00 00 45 4E 00 00 44 AE 00 00 42 60 00 00 82 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"
pairs = process_hex(hex_string)

output = ' '.join([' '.join(pair) for pair in pairs])
print(output)

PS;这玩意一次只能解密两行,然后一共有190行,你猜我按了几次ctrl CV?,所以说学会python是件好事(
将解密后的16进制码以16进制文件导入010editor保存为png得到
chuidiao8.png
一眼base64,解码后就能得到flag了()

这就是我做出来的misc试题

OSINT

身在曹营心在汉

无意间在设计组群看到一个奇怪的名字(我是用电脑版qq看的,所以一眼就看到了),点开就发现了flag

CanCanWord

将照片导入手机相册,
cancanneed.jpg
然后发现图片右下角的
cancanneed2.png
猜测是从上海浦东国际机场到大连周水子国际机场的飞机,打开flightaware根据时间和起飞将落地,找到对应航班
cancanneed3.png
网上搜索不难知道,CA8954是波音737-800型,搜索大连航空飞机的座位表,结合图片,我们不难知道图片所拍摄的是紧急逃生出口,我们在紧急逃生出口的后一排,结合角度,判断出在19C的位置上

这就是我所做出的OSINT题目

##GAME
###Crossy Road
简单地过马路(实际上是拼手速),完成三条后,页面会提示我们魂斗罗的作弊码,我们在网页中输入上上下下左右左右ba后,页面会提示我们去控制台,这样我们就能获得第一条彩蛋碎片。
###Pacman
困难模式下胜利我们可以获得flag,简单模式下失败我们会获得第二条彩蛋碎片(其实在控制台里全都能直接看到),
看在我解出了三条彩蛋碎片的份上,能不能给我一些奖励(,sleephead里的彩蛋实在是找不到啊,翻了两三遍了。。

####这就是我所做出的GAME试题

以上,就是我在本次2023SSSCTF中做出的所有题目的的writeup了


2023SSSCTF WriteUp
https://txpoki.github.io/2023/10/22/2023SSSCTF-WriteUp/
Author
John Doe
Posted on
October 22, 2023
Updated on
October 30, 2023
Licensed under