握手包
给你握手包,flag是Flag_is_here这个AP的密码,自己看着办吧。
下载下来一个cap文件,使用wireshark打开后发现,文件应该使加密过的,网上查一下关于cap的破解知识,发现Kali有个自带工具aircrack-ng,进行字典破解(我这里使用的使kali /usr/share/wordlists
目录下的rockyou.txt
)
aircrack-ng wifi.cap -w rockyou.txt
#11223344
flag{11223344}
德军的密码
已知将一个flag以一种加密形式为使用密钥进行加密,使用密钥WELCOMETOCFF加密后密文为 000000000000000000000000000000000000000000000000000101110000110001000000101000000001 请分析出flag。Flag为12位大写字母
01串的长度为84,题目提示说使12为大写字母,所以将字符串分成12份,每份应该占有7个01串,此时的key正好也右12为,那么无非就是加减乘除异或等运算,尝试发现此时是逐位异或。
#!usr/enc/python3
#coding=utf-8
#owner: IFpop
#time: 2019/11/8
key = "WELCOMETOCFF"
bin_c = "000000000000000000000000000000000000000000000000000101110000110001000000101000000001"
#先将字符串分成七段,然后转换成ASCII,随后与key进行异或
c = ""
for i in range(12):
temp = bin_c[i*7:(i+1)*7]
#print(temp)
temp = int(temp,2)
c = c + chr(temp)
#print(c)
str_c = ""
for i in range(12):
str_c += chr(ord(c[i])^ord(key[i]))
print(str_c)
#WELCOMECISRG
-.-字符串
请选手观察以下密文并转换成flag形式
..-. .-.. .- -–. ….. ..—— ..—— -–—— .-–-– ——.. -.. -…. -…. ….. ..…-– ——.. -–..… -.. .-–-– -.. .- -–-–. ..…-– .-–-– ——.. .-–-– ..—— -… -–… -–… -–… -…. …-– ..….- .-–-– -–——
flag形式为32位大写md5
这看起来像是莫斯电码,尝试解码:
flag522018d665387d1da931812b77763410
提示说32位大写的md5,去掉flag就是答案。
A Piece Of Cake
nit yqmg mqrqn bxw mtjtm nq rqni fiklvbxu mqrqnl xwg dvmnzxu lqjnyxmt xatwnl, rzn nit uxnntm xmt zlzxuuk mtjtmmtg nq xl rqnl. nitmt vl wq bqwltwlzl qw yivbi exbivwtl pzxuvjk xl mqrqnl rzn nitmt vl atwtmxu xamttetwn xeqwa tsftmnl, xwg nit fzruvb, nixn mqrqnl ntwg nq gq lqet qm xuu qj nit jquuqyvwa: xbbtfn tutbnmqwvb fmqamxeevwa, fmqbtll gxnx qm fiklvbxu ftmbtfnvqwl tutbnmqwvbxuuk, qftmxnt xznqwqeqzluk nq lqet gtamtt, eqdt xmqzwg, qftmxnt fiklvbxu fxmnl qj vnltuj qm fiklvbxu fmqbtlltl, ltwlt xwg exwvfzuxnt nitvm twdvmqwetwn, xwg tsivrvn vwntuuvatwn rtixdvqm - tlftbvxuuk rtixdvqm yivbi evevbl izexwl qm qnitm xwvexul. juxa vl lzrlnvnzntfxllvldtmktxlkkqzaqnvn. buqltuk mtuxntg nq nit bqwbtfn qj x mqrqn vl nit jvtug qj lkwnitnvb rvquqak, yivbi lnzgvtl twnvnvtl yiqlt wxnzmt vl eqmt bqefxmxrut nq rtvwal nixw nq exbivwtl.
这么多字符串一般来说就是替换密码了,先试试比较简单的单表替换密码,解密
the word ro?ot can refer to ?oth physical ro?ots and virtual software agents, ?ut the latter are usually referred to as ?ots. there is no consensus on which machines ?ualify as ro?ots ?ut there is general agreement among e?perts, and the pu?lic, that ro?ots tend to do some or all of the following: accept electronic programming, process data or physical perceptions electronically, operate autonomously to some degree, move around, operate physical parts of itself or physical processes, sense and manipulate their environment, and e?hi?it intelligent ?ehavior - especially ?ehavior which mimics humans or other animals. flag is su?stitutepassisveryeasyyougotit. closely related to the concept of a ro?ot is the field of synthetic ?iology, which studies entities whose nature is more compara?le to ?eings than to machines.
我们很容易可以分析出,r -– b,所以最终的flag:PCTF{substitutepassisveryeasyyougotit}
Shellcode
作为一个黑客,怎么能不会使用shellcode?
这里给你一段shellcode,你能正确使用并最后得到flag吗?
关于shellcode,他是利用漏洞执行代码从而获取shellcode一类程序,它实际就是汇编对应的机器码,但由于机器码大多是不可见字符,所以无法直接显示。
开始以为这个是通过base64加密不可见字符得到的,但发现不能解密,百度发现存在着其他的转码方式链接
使用工具
\shellcodeexec.x32.exe PYIIIIIIIIIIIIIIII7QZjAXP0A0AkAAQ2AB2BB0BBABXP8ABuJIYIhkmKzyCDq4l4FQyBlrRWEahI1tLKT16Pnk1ftLnkPvwlnkW6fhNkan5pNkgF6XPOR8T5HsCivaN19okQSPlKRLvD6DNk3uelNkpTthRXuQ9znk2jEHLK1Ja0FaXkhcTtBink4tlKUQhnvQYotqo0ylnLMTO0SDEWZahOtMwqhG8kXteksLwTdh1e8aLKsja4uQ8kavLKdLrklK0ZeL7qjKLKUTLKuQM8k9bdvDeL1qiSnR5XVIXTOyjENikrphNnrnVnhlBrzHooKOYoyok93u7tOKCNyHzBBSnguLgTcbyxlNKOYoYoMYaUTHphRL2LupQQ0htsFRTn541x3E2Se5T26PyKK8QLTddJlIZFBvyoSeUTLIkrv0oKy8ORpMmlk7Gl6DBrm8SoyoioyoaxrOqh0XwP1xu1Qw1upBbHrmrED3T34qiKOxQLTdEZOyZCaxQmRxgPUp0hpnPn4srRe8BDSo2PT7axqOCWROpophSYpnSo04u83K72Peu70hBpCsqDpF4qHIMXpLQ429k98aEaJr1BF3Ca3bIozp01IPf0Yof5GxAA
弹窗出flag:PCTF{Begin_4_good_pwnn3r}
Help!!
出题人硬盘上找到一个神秘的压缩包,里面有个word文档,可是好像加密了呢~让我们一起分析一下吧!
下载一个压缩包,说是加密了,其实是个伪加密,winhex改一下,得到一张图片
开始以为是图片隐写,发现没有藏信息在16进制之中,而且不是LSB隐写,
后来想到word.docx中会不会还有东西,使用binwalk
分解一下,发现在/word/media中存在着另一张图片,得到flag
Baby's Crack
既然是逆向题,我废话就不多说了,自己看着办吧。
下载下来有两个文件,一个exe程序,一个flag.enc程序,题目说是逆向题,所以还是直接使用ida打开看看
查看main函数
_main(*(_QWORD *)&argc, argv, envp);
if ( v8 <= 1 )
{
printf("Usage: %s [FileName]\n", *v9);
printf("FileName是待加密的文件");
exit(1);
}
File = fopen(v9[1], "rb+");
if ( File )
{
v5 = fopen("tmp", "wb+");
while ( feof(File) == 0 )
{
v7 = fgetc(File);
if ( v7 != -1 && v7 )
{
//此处是核心代码,对于每个文件中的字符进行下列操作,所以我们只需要逆一下就行
if ( v7 > 47 && v7 <= 96 )
{
v7 += 53;
}
else if ( v7 <= 46 )
{
v7 += v7 % 11;
}
else
{
v7 = 61 * (v7 / 61);
}
fputc(v7, v5);
}
}
fclose(v5);
fclose(File);
sprintf(&Dest, "del %s", v9[1]);
system(&Dest);
sprintf(&Dest, "ren tmp %s", v9[1]);
system(&Dest);
result = 0;
}
else
{
printf("无法打开文件%s\n", v9[1]);
result = -1;
}
return result;
下面是解题程序:
#!usr/env/python3
#coding=utf-8
#owner: IFpop
#time: 2019/11/12
import string
enc = "jeihjiiklwjnk{ljj{kflghhj{ilk{k{kij{ihlgkfkhkwhhjgly"
m = ""
length = len(enc)
dic = string.printable
tag = 0
for i in range(length):
for j in dic:
if ord(j) > 47 and ord(j) <= 96:
temp = chr(ord(j)+53)
elif ord(j) <= 46:
temp = chr(ord(j)+ord(j)%11)
else:
temp = chr(61*(ord(j)//61))
# print(temp)
if temp == enc[i]:
print(j)
m += j
#m = 504354467B596F755F6172335F476F6F645F437261636B33527D
#明文是16进制编码
print(bytes.fromhex(m))
熟悉的声音
两种不同的元素,如果是声音的话,听起来是不是很熟悉呢,据说前不久神盾局某位特工领便当了大家都很惋惜哦
XYYY YXXX XYXX XXY XYY X XYY YX YYXX
请提交PCTF{你的答案}
特工,声音,密码,这不就是摩斯电码嘛,现在就是需要知道X,Y分别代表什么
#!usr/env/python3
#coding=utf-8
#将两种情况都打印一遍
s = "XYYY YXXX XYXX XXY XYY X XYY YX YYXX"
s = s.replace('X','.')
s = s.replace('Y','-')
print(s)
#.--- -... .-.. ..- .-- . .-- -. --..
s = "XYYY YXXX XYXX XXY XYY X XYY YX YYXX"
s = s.replace('X','-')
s = s.replace('Y','.')
print(s)
#-... .--- -.-- --. -.. - -.. .- ..--
#jbluwewnz
发现这也不是个有意义的字符,可能是flag,交上去发现不对,可能还有加密,尝试常用的一些解密方式
凯撒解密,发现这样一个字符串phrackctf
,交上去发现不对,查询才知道,摩斯电码只能是大写
PCTF{PHRACKCTF}
取证
有一款取证神器如下图所示,可以从内存dump里分析出TureCrypt的密钥,你能找出这款软件的名字吗?名称请全部小写。
提交格式:PCTF{软件名字}
搜索内存取证神器,发现一篇博客,flag:PCTF{volatility}
ROPGadget
都说学好汇编是学习PWN的基础,以下有一段ROPGadget的汇编指令序列,请提交其十六进制机器码(大写,不要有空格)
XCHG EAX,ESP
RET
MOV ECX,[EAX]
MOV [EDX],ECX
POP EBX
RET
提交格式:PCTF{你的答案}
说是要将上述汇编指令转换为机器码,好多种方法,这里我使用一个转换工具,得到94C38B08890A5BC3
所以PCTF{94C38B08890A5BC3}
Easy RSA
还记得veryeasy RSA吗?是不是不难?那继续来看看这题吧,这题也不难。
已知一段RSA加密的信息为:0xdc2eeeb2782c且已知加密所用的公钥:
(N=322831561921859 e = 23)
请解密出明文,提交时请将数字转化为ascii码提交
比如你解出的明文是0x6162,那么请提交字符串ab
提交格式:PCTF{明文字符串}
- 尝试将模数N进行分解
得到p = 13574881 q = 23781539
- 下面就可以开始解密
#!usr/env/python3
#coding=utf-8
#owner: IFpop
#time: 2019/11/13
import gmpy2
from Crypto.Util import number
p = 13574881
q = 23781539
n = p*q
e = 23
c = 0xdc2eeeb2782c
fn = (p-1)*(q-1)
d = gmpy2.invert(e,fn)
m = pow(c,d,n)
print(number.long_to_bytes(m))
#3a5Y
所以PCTF{3a5Y}
爱吃培根的出题人
听说你也喜欢吃培根?那我们一起来欣赏一段培根的介绍吧:
bacoN is one of aMerICa’S sWEethEartS. it’s A dARlinG, SuCCulEnt fOoD tHAt PaIRs FlawLE
什么,不知道要干什么?上面这段巨丑无比的文字,为什么会有大小写呢?你能发现其中的玄机吗?
提交格式:PCTF{你发现的玄机}
提示很明显是培根密码,但我们知道培根密码是由A,B两个字符组成的特殊隐写方式,题目中说大小写?玄机?
大小写与A,B对应,这样就可以算是培根了,但具体是大写与A还是小写与A还得测试一下
#coding=utf-8
#以维基百科上的为准
dic = {'AAAAA':'a','AAAAB':'b','AAABA':'c','AAABB':'d','AABAA':'e','AABAB':'f',
'AABBA':'g','AABBB':'h','ABAAA':'i/j','ABAAB':'k','ABABA':'l','ABABB':'m',
'ABBAA':'n','ABBAB':'o','ABBBA':'p','ABBBB':'q','BAAAA':'r','BAAAB':'s',
'BAABA':'t','BAABB':'u/v','BABAA':'w','BABAB':'x','BABBA':'y','BABBB':'z'}
init = "bacoN is one of aMerICa'S sWEethEartS. it's A dARlinG, SuCCulEnt fOoD tHAt PaIRs FlawLE"
init = init.replace(' ','').replace('.','').replace(',','').replace("'",'')
s1 = ""
s2 = ""
ans1 = []
ans2 = []
for i in init:
if i.isupper():
s1 += 'A'
s2 += 'B'
else:
s1 += 'B'
s2 += 'A'
for i in range(len(s1)//5):
ans1.append(s1[i*5:i*5+5])
ans2.append(s2[i*5:i*5+5])
# print(ans1)
print(ans2)
# for i in range(len(ans1)):
# ans1[i] = dic[ans1[i]]
for i in range(len(ans2)):
ans2[i] = dic[ans2[i]]
# print(''.join(ans1))
print(''.join(ans2))
#baconi/jsnotfood
所以最后应该是PCTF{baconisnotfood}
Secret
传说中的签到题
题目入口: http://web.jarvisoj.com:32776/
Hint1: 提交格式PCTF{你发现的秘密}
页面没有信息,那就只有消息头会藏信息了,查看消息头,发现Welcome_to_phrackCTF_2016
Easy Crackme
都说逆向挺难的,但是这题挺容易的,反正我不会,大家来挑战一下吧~~:)
使用ida64打开, 找到main函数
int __cdecl main(int argc, const char **argv, const char **envp)
{
__int64 v3; // rdi
char v5; // [rsp+0h] [rbp-38h]
char v6; // [rsp+1h] [rbp-37h]
char v7; // [rsp+2h] [rbp-36h]
char v8; // [rsp+3h] [rbp-35h]
char v9; // [rsp+4h] [rbp-34h]
char v10; // [rsp+5h] [rbp-33h]
unsigned __int8 v11; // [rsp+10h] [rbp-28h]
_BYTE v12[7]; // [rsp+11h] [rbp-27h]
v5 = 0xABu;
v6 = 0xDDu;
v7 = 0x33;
v8 = 0x54;
v9 = 0x35;
v10 = 0xEFu;
printf((unsigned __int64)"Input your password:");
_isoc99_scanf((unsigned __int64)"%s");
if ( strlen((const char *)&v11) == 26 )
{
v3 = 0LL;
if ( (v11 ^ 0xAB) == list1 ) //list1 0xFB 判断第一位异或的结果
{
while ( (v12[v3] ^ (unsigned __int8)*(&v5 + ((signed int)v3 + 1) % 6)) == byte_6B41D1[v3] ) //9E 67 12 4E 9D 98 AB 0 6 46 8A F4 B4 6 0B 43 DC D9 A4 6C 31 74 9C D2 A0 与上面的v5开始的6位数进行异或
{
if ( ++v3 == 25 )
{
printf((unsigned __int64)"Congratulations!");
return 0;
}
}
}
}
printf((unsigned __int64)"Password Wrong!! Please try again.");
return 0;
}
逻辑还是比较清楚的,现在就直接写脚本:
#coding=utf-8
s = [0x9E,0x67,0x12,0x4E,0x9D,0x98,0xAB,0,0x6,0x46,0x8A,0xF4,0xB4,0x6,0x0B,0x43,0xDC,0xD9,0xA4,0x6C,0x31,0x74,0x9C,0xD2,0xA0]
s2 = [0xAB,0xDD,0x33,0x54,0x35,0xEF]
flag ="P"
j = 0
for i in s:
flag += chr(i^s2[(j+1)%6])
j = j+1
print(flag)
#PCTF{r3v3Rse_i5_v3ry_eAsy}
公倍数
请计算1000000000以内3或5的倍数之和。
如:10以内这样的数有3,5,6,9,和是23
请提交PCTF{你的答案}
直接爆破,就行~
#coding=utf-8
sum = 0
for i in range(1,1000000000):
if i%3 == 0 or i%5 == 0:
sum+=i
print(sum)
神秘的文件
出题人太懒,还是就丢了个文件就走了,你能发现里面的秘密吗?
下载一个文件,将其file一下
Linux rev 1.0 ext2 filesystem data, UUID=8eecd08f-bae8-41ff-8497-8338f58ad15b
是linux的磁盘文件,使用binwalk 查看文件,看是否可以分离,随后就产生了256个文件,使用winhex打开查看,每个文件中仅有一个字符,所以256个文件连起来应该是我们需要的信息,下面写个脚本处理一下
#!usr/env/python
#owner: IFpop
#time: 2019/11/14
#coding=utf-8
ans =""
for i in range(253):
with open(str(i),'rb') as f:
ans += f.read()
print(ans)
得到:
Haha ext2 file system is easy, and I know you can easily decompress of it and find the content in it.But the content is spilted in pieces can you make the pieces together. Now this is the flag PCTF{P13c3_7oghter_i7}. The rest is up to you. Cheer up, boy
veryeasyRSA
已知RSA公钥生成参数:
p = 3487583947589437589237958723892346254777 q = 8767867843568934765983476584376578389
e = 65537
求d =
请提交PCTF{d}
直接解就行:
#coding=utf-8
import gmpy2
p = 3487583947589437589237958723892346254777
q = 8767867843568934765983476584376578389
e = 65537
fn = (p-1)*(q-1)
d = gmpy2.invert(e,fn)
print(d)
#19178568796155560423675975774142829153827883709027717723363077606260717434369
美丽的实验室logo
出题人丢下个logo就走了,大家自己看着办吧
下载下来一个jpg,使用binwalk啥的也没有发现藏有神秘东西,可能是LSB,使用stegsolve打开,
使用Frame browser拿到flag
手贱
某天A君的网站被日,管理员密码被改,死活登不上,去数据库一看,啥,这密码md5不是和原来一样吗?为啥登不上咧?
d78b6f302l25cdc811adfe8d4e7c9fd34
请提交PCTF{原来的管理员密码}
看了半天,不知道问题在哪。。后来才知道这里的md5的长度是33位,有一位是多出来的,遍历一下,逐个解就行
段子
程序猿圈子里有个非常著名的段子:
手持两把锟斤拷,口中疾呼烫烫烫。
请提交其中“锟斤拷”的十六进制编码。(大写)
FLAG: PCTF{你的答案}
用python转一下就行,
s='锟斤拷'.decode('utf-8').encode('gbk').encode('hex')
print s.upper()
veryeasy
使用基本命令获取flag
strings一下即可得到flag
关于USS lab
USS的英文全称是什么,请全部小写并使用下划线连接_,并在外面加上PCTF{}之后提交
百度一下即可,PCTF{ubiquitous_system_security}
base64?
GUYDIMZVGQ2DMN3CGRQTONJXGM3TINLGG42DGMZXGM3TINLGGY4DGNBXGYZTGNLGGY3DGNBWMU3WI===
特征很明显是base32,解密:504354467b4a7573745f743373745f683476335f66346e7d
好像是16进制,转一下:PCTF{Just_t3st_h4v3_f4n}