第四届海啸杯wp

=-=本来想好好打pwn结果做了签到题我就不行了

pie保护泄露我感觉没问题啊就是打不通绝了我这个憨批

第四届海啸杯wp

pwn-guess

上图关键函数

如图所示只检查了上溢出,但是对于数组下标为负数的下溢出没有进行检测

mmexport1617566608443.png

我们可以去康康数组的bss段
很好,num和chance,round临近

依据题意,我们需要答对十次,也就是让num[any]==1

那我们先输八次,chance因为是–chance就会变成1

chance不会因为答对而改变(答对了加一,重新执行guess又-1不变)

我们可以寻到num距离chance的距离

我们可以从bss段判断nums首地址和chances首地址差距十进制28

看见伪指令dd,可以判断为int,一个数据占位4个字

28/4=7,同理,rounds为8 so我们输入-7就是chances

-8就是round

mmexport1617566608443.png

实验图

mmexport1617459927418.png

结果图

mmexport1617568895184.png

misc

隐藏的书

第一题字符隐写

阅读所提供的文献,

3.1 隐写信息的编码 编码算法首先应获取秘密信息每一位的 ASCII 码,之后把 ASCII 码转换为十六进制 数,最后用 Unicode 编码字符表示从 ASCII 码转换过来的十六进制数。考虑的中文 ASCII 编码的特殊性,中文一个字符占两个字节,则我们将每个字节分别转为对应 的 ASCII 码,即一个英文字符用两个不可见字符表示,而一个中文字符用四个不可 见字符表示。

我们可以知道用101编辑器打开的那些字符就是Unicode表示的hex数,按照提示两两拼凑

对照16进制的ASCII表拼凑得出flag{8f807f74-9088-11eb-b255-00163e0620b4}

ps:101中对应的00直接忽略,文献中的信息提取比较重要

mmexport1617204194349.png

use time:10minutes(这压缩包有毒害我换了好多软件才打开=-=)

你能看到图片里的flag吗?

本来要用社会主义核心价值观密码解密==

但是我用画图3D打开后调个色调然后掏出手机拍照

非常的清晰

示例图

IMG_20210404_185525.jpg

拼凑完得到flag

flag{Th1s_1s_4_h1dden_F14g}

神秘铃声

一道非常皮的题目,第一次做杂项直接去csdn逛街

搜索ctf 音频

基本确定这题的工具有au是最长见的。。。可是我下的有问题用不了

还有就是DTMF类型的,我就找了解密器解出来如图

=-=一窜神秘东西,还是就是misc经常套娃,平时也做了点逆向

我就习惯性的用txt打开发现最后有一窜base64编码

就拿去网上转码,看见flag.txt还有文件头pk

想复制直接转为压缩包,结果里面有写空格之类的打不开,

就去csdn,看雪,博客园到处找

最后在csdn搜索到了这个脚本

1
2
3
4
5
6
import base64
code=""
r=base64.b64decode(code)
test_file=open("test.rar","wb")
test_file.write(r)
test_file.close()

直接转为rar 好耶

打开发现要密码,刚才音频里面给出来的应该是

=-=可是我吐了呀怎么输入都不对

还是去csdn逛街慢慢看 找到一个比赛题提到了键盘密码

前面的DC9A16B不符合,后面的79176172如果两两组合的话

第一个范围1-9 第二数范围1-4 不符合

我打开了自己手机的拨号器

看见7第一个对应P *也对应P

9第一个对应#

其他的没有符号

我就想着要么 #* 要么*#去插入密码里面

可能还要分开

于是我就试了 #*DC9A16B

D#*C9A16B结果就很骚就在这里试出来了

Detect DTMF Tones:http://dialabc.com/sound/detect/index.htm

这个网站可以直接解码DTMF

打开flag里面一看=-=

以前用pygame做过飞机大战 看见这些我想起来了坐标

在博客园最后找到了脚本

1
2
3
4
5
6
7
8
9
10
import Image

flag_image = Image.new('RGB',(300,300),(0,0,0))

f = open('hint.txt')
for line in f.readlines():
point = line.split()
flag_image.putpixel([int(point[0]),int(point[1])],(255,255,255))
f.close()
flag_image.save('flag_image.jpg')

画了个二维码给我

扫描得到flag

hsnctf{8384b52d-6b32-49d8-a0be-1bb15e9985dc}

密码学

easyrsa

=-= 我以后都不想摸密码学了 第一次尝试 差点劝退 废话少说

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import libnum

with open("flag.txt") as f:
flag = f.read()

m = libnum.s2n(flag)

p = getPrime(1024)
q1 = getPrime(1024)
q2 = getPrime(1024)

e = 65537
n1 = p * q1
n2 = p * q2
c = pow(m, e, n1)

print(n1, n2, c)
'''
output:
19927995886914135335416406082647120895619334038709715664270614604151473749182691765161766917756826761209408429340053534661116540440455731883912107733536490306892185777306017692334819486621137392115368637822832208615896079869167332092773633150006570996052837028257313679389522817781164233607188350606757597836490056930318266077647703629309920052447748365274174530490094908252256551706625163193805930254664728936230312618043386165963458944225026036816776258340041222542638064896328642143272486093326421275373201421890802797828158807121957406664052135737278317985129996476960525575320786302386904366901933941877871977923
18891582332322922179757256935338383228362622765536723954262749118724360227437890613511811834258619933112000032816774390665802252670355559592889246899049387975273869584023100438870426265843757686044290924963164327025399130980205072334359825236874676865799829315906270559180981769846264222745663893031262917781276708151305378259082579089031371101323253330053986819164120184785001094503410745573822883437760154804937523455385157947633996347870180978374764506128842545299334183115882288528664242409706229889871455032394406814666870814759869179655535890356720047754561351306758635949531548031922969386197250253432717160713
13464724434881083014378360688491414344998156133411847847874051353940035862995104112542330206199732554180770508723141951625606376158124527681508374976085150535523169426812879850201999337951347258663163526945777620586135979743047015305904146804741356004618021619877806139998460893541631182931447449498967591502111403371136690476476964569301404706879044022446236796126968424261474149501366709514040581812492269780027443526915046387838380291031527967274048028552563236517463115042981801314702717397461735551656092225777678039402709019728332707310411968980746101194493745338399939010674127078293589259391068943187148009190
'''

关于这种rsa的解法,就是用python自己写个求最大公因数的脚本

1
2
3
4
5
def gcd(a,b):
if b ==0:
return a
else:
return gcd(b,a%b)

输入n1 n2可以得到p

接着呢我们再去求q1

q1=n1/p

下一步求出φ(n)

fv=(q1-1)*(p-1)

继续去求给的e的逆元d

这里我们就要当脚本小子嫖别人脚本了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def EX_GCD(a,b,arr): #扩展欧几里得
if b == 0:
arr[0] = 1
arr[1] = 0
return a
g = EX_GCD(b, a % b, arr)
t = arr[0]
arr[0] = arr[1]
arr[1] = t - int(a / b) * arr[1]
return g
def ModReverse(a,n): #ax=1(mod n) 求a模n的乘法逆x
arr = [0,1,]
gcd = EX_GCD(a,n,arr)
if gcd == 1:
return (arr[0] % n + n) % n
else:
return -1

d=ModReverse(e,fv)

接着我们去求解flag的公文即可

x=pow(c,d,n1)

这里求出来是数字 我们需要借助libnum模块转化为字符串

完整exp

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
33
34
35
36
37
38
39
40
41
42
43
# -*- coding:UTF-8 -*-
import sys
#import gmpy2
sys.setrecursionlimit(1000000)
import libnum
def gcd(a,b):
if b ==0:
return a
else:
return gcd(b,a%b)
n1=19927995886914135335416406082647120895619334038709715664270614604151473749182691765161766917756826761209408429340053534661116540440455731883912107733536490306892185777306017692334819486621137392115368637822832208615896079869167332092773633150006570996052837028257313679389522817781164233607188350606757597836490056930318266077647703629309920052447748365274174530490094908252256551706625163193805930254664728936230312618043386165963458944225026036816776258340041222542638064896328642143272486093326421275373201421890802797828158807121957406664052135737278317985129996476960525575320786302386904366901933941877871977923
n2=18891582332322922179757256935338383228362622765536723954262749118724360227437890613511811834258619933112000032816774390665802252670355559592889246899049387975273869584023100438870426265843757686044290924963164327025399130980205072334359825236874676865799829315906270559180981769846264222745663893031262917781276708151305378259082579089031371101323253330053986819164120184785001094503410745573822883437760154804937523455385157947633996347870180978374764506128842545299334183115882288528664242409706229889871455032394406814666870814759869179655535890356720047754561351306758635949531548031922969386197250253432717160713
c=13464724434881083014378360688491414344998156133411847847874051353940035862995104112542330206199732554180770508723141951625606376158124527681508374976085150535523169426812879850201999337951347258663163526945777620586135979743047015305904146804741356004618021619877806139998460893541631182931447449498967591502111403371136690476476964569301404706879044022446236796126968424261474149501366709514040581812492269780027443526915046387838380291031527967274048028552563236517463115042981801314702717397461735551656092225777678039402709019728332707310411968980746101194493745338399939010674127078293589259391068943187148009190
q=gcd(n1,n2)
p=n1/q
fv=(q-1)*(p-1)
#print(fv)
#fv=19927995886914135335416406082647120895619334038709715664270614604151473749182691765161766917756826761209408429340053534661116540440455731883912107733536490306892185777306017692334819486621137392115368637822832208615896079869167332092773633150006570996052837028257313679389522817781164233607188350606757597836207467980596236451329780790225129217298668351106183416252697727143995584754590162716126998422296947538087031571243444168045363157941999264066082824046684460684499824009561315836532745508925941125102683602011927119583502181606423416442482409087273246881328707856511744869202483322442194834669300162329296093888
def exgcd(a, b):
if b == 0:
return 1, 0, a
else:
x, y, q = exgcd(b, a % b)
x, y = y, (x - (a // b) * y)
return x, y, q


def inf(a,p):
x, y, q = exgcd(a,p)
if q != 1:
raise Exception("No solution.")
else:
return (x + p) % p #防止负数
e=65537
d = inf(e,fv)
print(d)
#d=9485235877388338459999380065338576517355837252292763941456849595829852940049207118459132356264498741003803752763074751059994649777981538678712090706622782224288491129244303460559567253088480702651125460247576604293212419174493885245006343172273753385886937123448718173167474476675246610359684352485270862366337423992351175669664177212418674654079598708277862665159934890222771842941158208886077568225355615629386252999578375534095351608234168867102207724084292461763466248228546556696290682567182443618970247528589347308669724995850142241062404386362946147416210197489601711543859228600031460482974108507617072224129
#c=1346472443488108301437836068849141434499815613341184784787405135394003586299510411254233020619973255418077050872314195162560637615812452768150837497608515053552316942681287985020199933795134725866316352694577762058613597974304701530590414680474135600461802161987780613999846089354163118293144744949896759150211140337113669047647696456930140470687904402244623679612696842426147414950136670951404058181249226978002744352691504638783838029103152796727404802855256323651746311504298180131470271739746173555165609222577767803940270901972833270731041196898074
n1=19927995886914135335416406082647120895619334038709715664270614604151473749182691765161766917756826761209408429340053534661116540440455731883912107733536490306892185777306017692334819486621137392115368637822832208615896079869167332092773633150006570996052837028257313679389522817781164233607188350606757597836490056930318266077647703629309920052447748365274174530490094908252256551706625163193805930254664728936230312618043386165963458944225026036816776258340041222542638064896328642143272486093326421275373201421890802797828158807121957406664052135737278317985129996476960525575320786302386904366901933941877871977923
x=pow(c,d,n1)
#print(x)
flag=libnum.n2s(x)
print(str(flag))