Phrack--CTF 整理

<–more–>

测试题

Base64?

与其说是Base64其实是Base32 + Hex解码

1
2
3
4

>>>s='GUYDIMZVGQ2DMN3CGRQTONJXGM3TINLGG42DGMZXGM3TINLGGY4DGNBXGYZTGNLGGY3DGNBWMU3WI==='
>>>base64.b32decode(s).decode('hex')
>>>PCTF{Just_t3st_h4v3_f4n}

关于USS Lab

说白了就是只是这个实验室的名字

veryeasy

使用基本命令获取flag
好吧虽然说基本命令 strings我已经在之前就知道了。
可是在加上一个grep呢。

1
2
>>>strings file | grep "PCTF"  
>>>PCTF{strings_i5_3asy_isnt_i7}

段子

程序猿的圈子里有个非常著名的段子:手持两把锟斤拷,口中疾呼烫烫烫。
请提交其中“锟斤拷”的十六进制编码。(大写

这个题目我用了两种解法,也算是又找了一次知识
1.我去百度了~~~
2.又一次认识到了python的使用方法。

1
2
>>>'PCTF{%s}' % '锟斤拷'.encode('hex').upper()
>>>'PCTF{E9949FE696A4E68BB7}'

手贱

美丽的实验室

这题有两种解法
1.stegsolve打开,第二个frame里就是答案

2.0x7011处有第二张图,binwalk没扫出来,搜ffd9可以找到。winhex挖出来

我最开始使用的是第二种做法 今天第一次发现有第一种方法可以做。

veryeasyRSA

多亏了这题 因为是第一次真正接触RSA 这算我的一个入门题了吧。
已知RSA公钥生成参数:

p = 3487583947589437589237958723892346254777
q = 8767867843568934765983476584376578389
e = 65537

求d =

请提交PCTF{d}

首先了解一下可以了解一下RSA

有 p,q,d 那么求e那简单多了。

0x01 首先给我自己的做法。我比较傻用的暴力的方法

1
2
3
4
5
6
7
8
9
10
11
12
13

p = int(raw_input("Enter a p: "))
q = int(raw_input("Enter a q: "))
e = int(raw_input("Enter a e: "))
t = (p-1)*(q-1)

i=0
while True :
if (1-t*i)%e == 0:
break
i-=1
print i
print 'ok:' + '%d' % ((1-t*i)/e)

这个代码我优化过了
原理呢就是因为e与t互质,而 DE mod =1.

0x02
而通过这几天的接触,再一次发现python好用。

1
2
3
4
5
6
7
8
9

>>>import gmpy2
>>>p = 3487583947589437589237958723892346254777
>>>q = 8767867843568934765983476584376578389
>>>e = 65537
>>>gmpy2.invert(e,(p-1)*(q-1))

mpz(19178568796155560423675975774142829153827883709027717723363077606260717434369L)
>>>

神秘文件

我不知道这什么玩意儿~~
然后呢用winhex看了一下什么都没发现
好吧我在用kali的file命令看看他到底是什么鬼

OK 知道他是一个磁盘文件了…但是怎么利用…靠我不会阿~~~
这个时候我又学到了一个技能 mount挂载一下咯…

打开是好几个TXT文本

我本来是一个一个去打开复制黏贴的。后来放弃了…太麻烦了 尝试的用python写了个代码

1
2
3
4
5
6
content = ''
for i in range(0,254):
with open ('/root/Desktop/CTF/a/%d' % i) as txt:
content += txt.read()

print content

公倍数

请计算1000000000以内3或5的倍数之和。
如:10以为这样的数有3,5,6,9,和是23
请提交PCTF{你的答案}

编程题

1
突然懒得贴了

Easy Crackme

很明显的一题逆向题。