JarvisOJ basic部分WriteUp

0x0 前言

由于开学后会有一个省赛,作为一个好久没做过除re以外ctf题的小白,不得不抽出时间来刷一刷题…通过做JarvisOJ的basic部分确实学到了不少东西,感谢~

0x1 base64?

1.题目描述

GUYDIMZVGQ2DMN3CGRQTONJXGM3TINLGG42DGMZXGM3TINLGGY4DGNBXGYZTGNLGGY3DGNBWMU3WI===

2.解题过程

base64?应该是base家族的,写个脚本decode一下。

import base64
str1='GUYDIMZVGQ2DMN3CGRQTONJXGM3TINLGG42DGMZXGM3TINLGGY4DGNBXGYZTGNLGGY3DGNBWMU3WI==='
try:
    print base64.b64decode(str1)
except:
    try:
        print base64.b32decode(str1)
    except:
        print base64.b16decode(str1)

得到结果504354467b4a7573745f743373745f683476335f66346e7d,很明显,十六进制转字符就可以了~

flag=''
key='504354467b4a7573745f743373745f683476335f66346e7d'
for i in range(0,len(key),2):
    flag+=chr(int(key[i:i+2],16))
print flag

得到flag:PCTF{Just_t3st_h4v3_f4n}

0x2 关于USS Lab.

题目描述

USS的英文全称是什么,请全部小写并使用下划线连接_,并在外面加上PCTF{}之后提交

解题过程

百度uss lab可以搜到
JarvisOJ basic部分WriteUp_第1张图片
OK,flag得到了。

0x3 veryeasy

题目描述

使用基本命令获取flag

解题过程

使用srings得到flag.
JarvisOJ basic部分WriteUp_第2张图片

0x4 段子

题目描述

程序猿圈子里有个非常著名的段子:

手持两把锟斤拷,口中疾呼烫烫烫。

请提交其中”锟斤拷”的十六进制编码。(大写)

FLAG: PCTF{你的答案}

解题过程

对于不会的东西需要百度…
JarvisOJ basic部分WriteUp_第3张图片
好了,将三个字拼起来就得到了flag:PCTF{EFBFBDEFBFBD}

0x5 手贱

题目描述

某天A君的网站被日,管理员密码被改,死活登不上,去数据库一看,啥,这密码md5不是和原来一样吗?为啥登不上咧?

d78b6f302l25cdc811adfe8d4e7c9fd34

请提交PCTF{原来的管理员密码}

解题过程

在上面不容易看出,复制到别的地方还是可以轻松的发现上面md5比正确的值多了一位l。去掉l后得到d78b6f30225cdc811adfe8d4e7c9fd34,进行md5解密后即可。

题目描述

出题人丢下个logo就走了,大家自己看着办吧

解题过程

运用StegSolve的Frame Brower功能可以在第二桢中得到flag。
JarvisOJ basic部分WriteUp_第4张图片

0x7 veryeasyRSA

题目描述

已知RSA公钥生成参数:

p = 3487583947589437589237958723892346254777 q = 8767867843568934765983476584376578389

e = 65537

求d =

请提交PCTF{d}

Hint1: 有好多小伙伴问d提交什么格式的,现在明确一下,提交十进制的d

解题过程

运用RSA Tool计算出d.
JarvisOJ basic部分WriteUp_第5张图片

0x8 神秘的文件

题目描述

出题人太懒,还是就丢了个文件就走了,你能发现里面的秘密吗?

解题过程

利用linux的file得知所给文件为磁盘文件。
将磁盘文件挂载

mkdir ffffile &&sudo mount haha ffffile

挂载后可以查看文件中的内容
我们发现里面是253个只包含一个字符的文件
猜测可以把这些字符拼接起来得到flag.

flag=''
for i in range(254):
    file=open('ffffile/'+str(i))

    flag+=file.read()
    file.close()
print flag

file

0x9 公倍数

题目描述

请计算1000000000以内3或5的倍数之和。

如:10以内这样的数有3,5,6,9,和是23

请提交PCTF{你的答案}

解题过程

sum=0
for i in xrange(1000000000):
    if i%3==0 or i%5==0:
        sum+=i
print sum

一个简单的小脚本得到flag,这里注意一定要用xrange,不要用range!

0x10

题目描述

都说逆向挺难的,但是这题挺容易的,反正我不会,大家来挑战一下吧~~:)

解题过程

载入IDA,很容易就能找到关键代码

*(_WORD *)v5 = 0xDDABu;
  v5[2] = 0x33;
  v5[3] = 0x54;
  v5[4] = 0x35;
  v5[5] = 0xEFu;
  printf((unsigned __int64)"Input your password:");
  _isoc99_scanf((__int64)"%s", v6, *(_QWORD *)v5);
  if ( strlen(v6) == 26 )
  {
    v3 = 0LL;
    if ( (v6[0] ^ 0xAB) == list1 )
    {
      while ( ((unsigned __int8)v6[v3 + 1] ^ (unsigned __int8)v5[(signed __int64)(((signed int)v3 + 1) % 6)]) == list[v3] )
      {
        if ( ++v3 == 25 )
        {
          printf((unsigned __int64)"Congratulations!");
          return 0;
        }
      }
    }
  }
  printf((unsigned __int64)"Password Wrong!! Please try again.");
  return 0;
}

逆一下代码写脚本得到flag.

v5=[0xAB,0xDD,0x33,0x54,0x35,0xEF]
lists = [0xfb,0x9e,0x67,0x12,0x4e,
         0x9d,0x98,0xab,0x00,0x06,
         0x46,0x8a,0xf4,0xb4,0x06,
         0x0b,0x43,0xdc,0xd9,0xa4,
         0x6c,0x31,0x74,0x9c,0xd2,
         0xa0]
flag=chr(v5[0]^lists[0])
for i in xrange(1,len(lists)):
    flag+=chr(v5[i%6]^lists[i])
print flag

得到flag:
PCTF{r3v3Rse_i5_v3ry_eAsy}

0x11 Secret

题目描述

传说中的签到题

题目入口:http://web.jarvisoj.com:32776/

Hint1: 提交格式PCTF{你发现的秘密}

解题过程

查看响应头,可以找到疑似flag的字符串..
JarvisOJ basic部分WriteUp_第6张图片
提交上去没想到竟然是对的。

0x12 爱吃培根的出题人

题目描述

听说你也喜欢吃培根?那我们一起来欣赏一段培根的介绍吧:

bacoN is one of aMerICa’S sWEethEartS. it’s A dARlinG, SuCCulEnt fOoD tHAt PaIRs FlawLE

什么,不知道要干什么?上面这段巨丑无比的文字,为什么会有大小写呢?你能发现其中的玄机吗?

提交格式:PCTF{你发现的玄机}

解题过程

提示培根加密,直接用脚本,不过脚本得到的flag多了一个字母…不知道哪儿出了问题。

#coding:utf-8
import string
letters=string.uppercase
a="bacoN is one of aMerICa'S sWEethEartS. it's A dARlinG, SuCCulEnt fOoD tHAt PaIRs FlawLE"
str1=''
str2=''
key1={"A":"aaaaa","B":"aaaab","C":"aaaba","D":"aaabb","E":"aabaa","F":"aabab","G":"aabba","H": "aabbb","I":"abaaa","J":"abaab","K":"ababa","L":"ababb","M":"abbaa","N":"abbab","O":"abbba","P":"abbbb","Q":"baaaa","R":"baaab","S":"baaba",
"T":"baabb",
"U":'babaa',
'V':'babab',
'W':'babba',
'X':'babbb',
'Y':'bbaaa',
'Z':'bbaab'}
key2={'a':'AAAAA','g':'AABBA','n':'ABBAA','t':'BAABA',
'b':'AAAAB','h':'AABBB','o':'ABBAB','u':'BAABB','v':'BAABB',
'c':'AAABA','i':'ABAAA','j':'ABAAA','p':'ABBBA','w':'BABAA',
'd':'AAABB','k':'ABAAB','q':'ABBBB','x':'BABAB',
'e':'AABAA','l':'ABABA','r':'BAAAA','y':'BABBA',
'f':'AABAB','m':'ABABB','s':'BAAAB','z':'BABBB'}
list1=[]
list2=[]
temp1=''
temp2=''
num=0
for i in a:
    if i.isupper():
        temp1+='b'
        temp2+='B'
        num+=1
        if num%5==0:
            list1.append(temp1)
            list2.append(temp2)
            temp1=''
            temp2=''
    elif i.islower():
        temp1+='a'
        temp2+='A'
        num+=1
        if num%5==0:
            list1.append(temp1)
            list2.append(temp2)
            temp1=''
            temp2=''
#
for i in list1:
    for j,k in key1.items():
        if i==k:
            str1+=j
print "第一种:"
print str1+'\n'
for i in list2:
    for j,k in key2.items():
        if i==k:
            str2+=j
print "第二种:"
print str2

0x13 Easy RSA

题目描述

还记得veryeasy RSA吗?是不是不难?那继续来看看这题吧,这题也不难。

已知一段RSA加密的信息为:0xdc2eeeb2782c且已知加密所用的公钥:

(N=322831561921859 e = 23)

请解密出明文,提交时请将数字转化为ascii码提交

比如你解出的明文是0x6162,那么请提交字符串ab

提交格式:PCTF{明文字符串}

解题过程

已知N、e可以计算出d,这里仍然可以用RSA Tool。
JarvisOJ basic部分WriteUp_第7张图片
然后再利用 密文=明文^d mod N的公式计算出密文,最后将密文转化为ascii就好了。
JarvisOJ basic部分WriteUp_第8张图片
最后得到flag为PCTF{3a5Y}

0x14 ROPGadget

题目描述

都说学好汇编是学习PWN的基础,以下有一段ROPGadget的汇编指令序列,请提交其十六进制机器码(大写,不要有空格)

XCHG EAX,ESP

RET

MOV ECX,[EAX]

MOV [EDX],ECX

POP EBX

RET

提交格式:PCTF{你的答案}

解题过程

一开始我试图用pwntools的asm函数去求flag,不过不幸的是失败了。然后又想到利用od去求,幸好这次成功了。
ROP
将十六进制拼接起来既是flag。

0x15 取证

题目描述

有一款取证神器如下图所示,可以从内存dump里分析出TureCrypt的密钥,你能找出这款软件的名字吗?名称请全部小写。
JarvisOJ basic部分WriteUp_第9张图片

解题过程

以前没接触过只好百度了,不过得到好多结果,最后试出flag为PCTF{volatility}

0x16 熟悉的声音

题目描述

两种不同的元素,如果是声音的话,听起来是不是很熟悉呢,据说前不久神盾局某位特工领便当了大家都很惋惜哦

XYYY YXXX XYXX XXY XYY X XYY YX YYXX

请提交PCTF{你的答案}

解题过程

先将上面字符串转化为-.组成的字符串

def getMorse(s):
    morse=''
    for i in range(len(s)):
        if s[i]=='X':
           morse+='.'
        elif s[i]=='Y':
            morse+='-'
        else:
            morse+=s[i]
    return morse
s='XYYY YXXX XYXX XXY XYY X XYY YX YYXX'
print getMorse(s)

得到-… .— -.– –. -.. - -.. .- ..–
然后找一个摩斯密码解密的网站得到JBLUWEWNZ。本来以为到这就完了,结果提交上去并不对..需要凯撒解密才可以得到flag~

#http://rot13.de/index.php

s="JBLUWEWNZ"
for j in xrange(26):
    flag=''
    print str(j)+':',
    for i in s:
        if(i>='A' and i<='Z'):
            temp = ord(i) + j
            if temp>ord('Z'):
                temp = temp - 26
            flag +=chr(temp)   


        elif i>='a' and i<='z':
            temp = ord(i) + j
            if temp>ord('z'):
                temp = temp -26
            flag +=chr(temp)                

        else:
            flag +=i
    print flag

0x16 Baby’s Crack

题目描述

既然是逆向题,我废话就不多说了,自己看着办吧。

解题过程

载入IDA找到关键代码
JarvisOJ basic部分WriteUp_第10张图片
我这采用了爆破的方法解密文件.
最后将解密的十六进制转为字符即可得到flag.

file=open('flag.enc','r')
s=file.read()
flag=''
for i in range(len(s)):
    for j in range(128):
        if j>47 and j<=96:
            k=j+53
            if k==ord(s[i]):
                flag+=chr(j)
                break
        elif j<=46:
            k=j+j%11
            if k==ord(s[i]):
                flag+=chr(j)
                break
        else:
            k=j-j%61
            if k==ord(s[i]):
                flag+=chr(j)
                break
print flag  
file.close()
key=''
for i in range(0,len(flag),2):
    key+=chr(int(flag[i:i+2],16))
print key

0x17 Help!!

题目描述

出题人硬盘上找到一个神秘的压缩包,里面有个word文档,可是好像加密了呢~让我们一起分析一下吧!

解题过程

下载下来后发现是个被加密的压缩包,这里是伪加密,用ZipCenOp轻松去掉伪加密后获得一个word文件。
关于word我至今只做过解压和利用word软件的隐藏字符功能两类题目,这儿是解压。
解压后得到flag:PCTF{You_Know_moR3_4boUt_woRd}。

0x18 Shellcode

题目描述

作为一个黑客,怎么能不会使用shellcode?

这里给你一段shellcode,你能正确使用并最后得到flag吗?

解题过程

一个shellcode当然是要执行啊!

#include 

unsigned char shellcode[] = "\x50\x59\x49\x49\x49\x49\x49\x49\x49\x49\x49\x49\x49\x49\x49\x49\x49\x49\x37\x51\x5a\x6a\x41\x58\x50\x30\x41\x30\x41\x6b\x41\x41\x51\x32\x41\x42\x32\x42\x42\x30\x42\x42\x41\x42\x58\x50\x38\x41\x42\x75\x4a\x49\x59\x49\x68\x6b\x6d\x4b\x7a\x79\x43\x44\x71\x34\x6c\x34\x46\x51\x79\x42\x6c\x72\x52\x57\x45\x61\x68\x49\x31\x74\x4c\x4b\x54\x31\x36\x50\x6e\x6b\x31\x66\x74\x4c\x6e\x6b\x50\x76\x77\x6c\x6e\x6b\x57\x36\x66\x68\x4e\x6b\x61\x6e\x35\x70\x4e\x6b\x67\x46\x36\x58\x50\x4f\x52\x38\x54\x35\x48\x73\x43\x69\x76\x61\x4e\x31\x39\x6f\x6b\x51\x53\x50\x6c\x4b\x52\x4c\x76\x44\x36\x44\x4e\x6b\x33\x75\x65\x6c\x4e\x6b\x70\x54\x74\x68\x52\x58\x75\x51\x39\x7a\x6e\x6b\x32\x6a\x45\x48\x4c\x4b\x31\x4a\x61\x30\x46\x61\x58\x6b\x68\x63\x54\x74\x42\x69\x6e\x6b\x34\x74\x6c\x4b\x55\x51\x68\x6e\x76\x51\x59\x6f\x74\x71\x6f\x30\x79\x6c\x6e\x4c\x4d\x54\x4f\x30\x53\x44\x45\x57\x5a\x61\x68\x4f\x74\x4d\x77\x71\x68\x47\x38\x6b\x58\x74\x65\x6b\x73\x4c\x77\x54\x64\x68\x31\x65\x38\x61\x4c\x4b\x73\x6a\x61\x34\x75\x51\x38\x6b\x61\x76\x4c\x4b\x64\x4c\x72\x6b\x6c\x4b\x30\x5a\x65\x4c\x37\x71\x6a\x4b\x4c\x4b\x55\x54\x4c\x4b\x75\x51\x4d\x38\x6b\x39\x62\x64\x76\x44\x65\x4c\x31\x71\x69\x53\x6e\x52\x35\x58\x56\x49\x58\x54\x4f\x79\x6a\x45\x4e\x69\x6b\x72\x70\x68\x4e\x6e\x72\x6e\x56\x6e\x68\x6c\x42\x72\x7a\x48\x6f\x6f\x4b\x4f\x59\x6f\x79\x6f\x6b\x39\x33\x75\x37\x74\x4f\x4b\x43\x4e\x79\x48\x7a\x42\x42\x53\x6e\x67\x75\x4c\x67\x54\x63\x62\x79\x78\x6c\x4e\x4b\x4f\x59\x6f\x59\x6f\x4d\x59\x61\x55\x54\x48\x70\x68\x52\x4c\x32\x4c\x75\x70\x51\x51\x30\x68\x74\x73\x46\x52\x54\x6e\x35\x34\x31\x78\x33\x45\x32\x53\x65\x35\x54\x32\x36\x50\x79\x4b\x4b\x38\x51\x4c\x54\x64\x64\x4a\x6c\x49\x5a\x46\x42\x76\x79\x6f\x53\x65\x55\x54\x4c\x49\x6b\x72\x76\x30\x6f\x4b\x79\x38\x4f\x52\x70\x4d\x6d\x6c\x6b\x37\x47\x6c\x36\x44\x42\x72\x6d\x38\x53\x6f\x79\x6f\x69\x6f\x79\x6f\x61\x78\x72\x4f\x71\x68\x30\x58\x77\x50\x31\x78\x75\x31\x51\x77\x31\x75\x70\x42\x62\x48\x72\x6d\x72\x45\x44\x33\x54\x33\x34\x71\x69\x4b\x4f\x78\x51\x4c\x54\x64\x45\x5a\x4f\x79\x5a\x43\x61\x78\x51\x6d\x52\x78\x67\x50\x55\x70\x30\x68\x70\x6e\x50\x6e\x34\x73\x72\x52\x65\x38\x42\x44\x53\x6f\x32\x50\x54\x37\x61\x78\x71\x4f\x43\x57\x52\x4f\x70\x6f\x70\x68\x53\x59\x70\x6e\x53\x6f\x30\x34\x75\x38\x33\x4b\x37\x32\x50\x65\x75\x37\x30\x68\x42\x70\x43\x73\x71\x44\x70\x46\x34\x71\x48\x49\x4d\x58\x70\x4c\x51\x34\x32\x39\x6b\x39\x38\x61\x45\x61\x4a\x72\x31\x42\x46\x33\x43\x61\x33\x62\x49\x6f\x7a\x70\x30\x31\x49\x50\x66\x30\x59\x6f\x66\x35\x47\x78\x41\x41";
int main()
{
    int (*ret)() = (int(*)())shellcode;
    ret();
}

编译运行即可得到flag:PCTF{Begin_4_good_pwnn3r}.

0x19 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.

解题过程

加密方式为字母频率破解替换加密,可在http://quipqiup.com/上进行在线解密。
解密后得到

the word robot can refer to both physical robots and virtual software agents, but the latter are usually referred to as bots. there is no consensus on which machines pualify as robots but there is general agreement among experts, and the public, that robots 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 exhibit intelligent behavior - especially behavior which mimics humans or other animals. flag is substitutepassisveryeasyyougotit. closely related to the concept of a robot is the field of synthetic biology, which studies entities whose nature is more comparable to beings than to machines.

0x20 -.-字符串

题目描述

请选手观察以下密文并转换成flag形式

..-. .-.. .- –. ….. ..— ..— —– .—- —.. -.. -…. -…. ….. …– —.. –… -.. .—- -.. .- —-. …– .—- —.. .—- ..— -… –… –… –… -…. …– ….- .—- —–

flag形式为32位大写md5

解题过程

啥也不说,直接摩斯密码解密得到flag.

0x21 德军的密码

题目描述

已知将一个flag以一种加密形式为使用密钥进行加密,使用密钥WELCOMETOCFF加密后密文为 000000000000000000000000000000000000000000000000000101110000110001000000101000000001 请分析出flag。Flag为12位大写字母

解题过程

一种名为费纳姆密码的加密方式,解密脚本如下

# coding=utf-8
#--author:Magician--
miwen='000000000000000000000000000000000000000000000000000101110000110001000000101000000001'
passdict={'A':'1000001','B':'1000010','C':'1000011', 'D': '1000100','E':'1000101', 'F' :'1000110', 'G': '1000111', 'H': '1001000', 'I': '1001001', 'J': '1001010','K': '1001011', 'L' :'1001100', 'M': '1001101', 'N': '1001110', 'O': '1001111', 'P': '1010000' ,'Q': '1010001' ,'R' :'1010010', 'S' :'1010011' ,'T' :'1010100','U': '1010101' ,'V' :'1010110' ,'W' :'1010111', 'X' :'1011000' ,'Y': '1011001', 'Z' :'1011010'}
password='WELCOMETOCFF'
li=[]
for i in password:
    li.append(passdict[i])
flag=''
for i in range(0,len(miwen),7):
    test=miwen[i:i+7]
    test=int(test,2)
    test^=int(li[i/7],2)
    for i,j in passdict.items():
        if test==int(j,2):
            flag+=i
print '解密/加密结果为:%s'%flag

0x22 握手包

题目描述

给你握手包,flag是Flag_is_here这个AP的密码,自己看着办吧。

解题过程

以前没接触过,百度得知可以用linux自带的aircrack-ng进行暴力破解。

aircrack-ng -a2 -w password.txt wifi.cap

你可能感兴趣的:(ctf)