攻防世界 刷题记录
写在前面:
Crtpto: 老师要求这两天只能写密码学的题,于是顺便记录一下攻防世界的密码学题目(新手模式),大都难度不大,主要是做一下有个印象,顺便记录相应的在线解码网站,方便下次直接使用。
pwn、re: 到了自己最不擅长的方向了,看着别人的writeup,尽量去学习吧
一些图片老师要求截全屏,可能会有点影响观看
Crypto
base64
顾名思义,一个base加密的密文,解码就得到flag了
Caesar
Caesar的英语意思就是凯撒,直接放在凯撒密文解密网站上解密,然后枚举偏移量,得到flag
Morse
Morse意思就是莫尔斯,哈哈哈哈哈哈,还没打开题目就知道是莫尔斯密文了,这就是翻译题目的好处
但是打开题目却是一段只有0和1的密文
1 |
|
和莫尔斯密文的格式不一样,因此试一下将1改成 - ,将0改成 .
空格的地方用/隔开
1 |
|
得到
1 |
|
改一下flag格式(记得全为小写),得到flag
在线摩斯电码加密解密 - 码工具 (matools.com)
Broadcast
题目意思是广播,暂时没什么想法,打开题目看看,下载下来压缩包打开
里面有一个.py文件,打开查看代码,拿到了flag
hidden key
还是把压缩包下载下来,解压并打开,一个.py文件,老样子先打开看一下,
直接运行还会报错,因此需要下载Crypto这个module
1 |
|
装好后,构造payload,在运行一下,得到flag
1 |
|
flag_in_your_hand
在浏览器运行那个html文件,随便输入,发现没什么头绪,直接审计代码,js代码的一部分
1 |
|
意思是我们需要输入长度与a一致,每个数字减3 得到的ascii 码所对应的字符
1 |
|
接着去将其转码成字符 ASCII码转字符串 - ASCII码 (asciim.cn)
在html页面输入,得到flag
flag_in_your_hand1
打开还是一个html一个js文件
感觉跟flag_in_your_hand那题差不多呀
老样子,还是审计代码
1 |
|
这不是和上一题一模一样吗?离谱
还是传入security-xbu,得到flag
真的离谱,答案都一样
不仅仅是Morse
打开是一串莫尔斯密文,解密后,还是一段密文
可以看出,开头说的是may be have another decode,再看下面那只有AB的密文,不难看出是培根密文,于是培根解密(采用不同编码的解密方式)得到flag
培根密码解密_培根密码转换器-ME2在线工具 (metools.info)
safer-than-rot13
看题目可以知道,有考察rot13加密,接着下载安装包,打开看看,一段看似无规律的密文,先rot13看看 CTF在线工具-在线Rot13密码
接着放到密文爆破网站上爆破(后来才知道是词频分析在线工具hhhhh) quipqiup
感觉第一个最像答案,翻译一下,发现flag
1 |
|
告诉你个秘密
1 |
|
一眼16进制,先16进制转字符, 16进制转换
1 |
|
在base64看看什么情况,还是看不出什么
1 |
|
看了别人的WP才知道,是键盘密码,没找到解密网站,但找到了加密原理,亲自动手解密,得到flag
1 |
|
你猜猜
还是一眼16进制,转码发现是乱码,但有一部分是flag.txt,再去看看原来的密文,发现为什么前面的504B好像哪里见过,查了一下原来是zip的文件头(原来协会的wiki讲过了,我给忘了)
于是将16进制码,复制到文本上,再将后缀改成zip,变成压缩包
好吧,这样好像行不通
网上找了一下方法,再加上自己的摸索,将那串16进制码复制到WinHex的编辑的剪切板粘贴,然后以zip的形式保存到桌面
发现解压需要密码
用ARCHPR尝试爆破
破出密码是123456,接着输入密码解压,打开flag.txt文件,得到flag
Railfence
看题目的描述,已经密文的格式,不难猜出是栅栏密码
放在栅栏密码解码网站上解码(栏目数5),得到flag
cr3-what-is-this-encryption
题目有p,q,e,联想到了RSA加密
大致思路:
先把p,q,e转成十进制,再根据公式求出n,d,m
n=p*q
φ(N) = (p-1)(q-1)
e * d % φ(N) = 1(d是私钥,e是公钥)
m=c^ d mod n (m是明文)
网上找了个脚本
跑一下就得到flag了
[简单] 初识RSA
题目自己告诉我们是RSA了,打开是一个python的代码,
根据代码,对之前找的脚本稍微修改一下,运行就能得到flag了
baigeiRSA
还是一道RSA题目,打开给了一个out文件,和一个python代码,内容如下
现在已知e、n、c的值,但还需要得到q和p的值,因为n=q*p
所以可以通过yafu工具和在线网站算出来,这里使用的是网站http://www.factordb.com/index.php(1024位不行)
得到
1 |
|
将这两个值带入准备好的脚本,再运行,得到flag
工业协议分析2
题目描述已经说了有流量异常,下载下来是一个.pcapng文件,于是用Wireshark打开查看流量,但是太多了,一个一个找太慢了,官方wp写的是长度12,89,104,105,131,137对应的流量包是异常点,但从别人的wp中我了解到,可以直接查找flag这个字段,查不到的话,再试看看查flag的16进制666c6167
果然查到了
将匹配到的字段复制下来
1 |
|
16进制转成字符串得到flag
cr4-poor-rsa
下载下来压缩包,解压得到一个key.pub一个flag.b64,简单看了一下,说实话,没什么思路,于是看了别人的wp
先来一个脚本,从key.pub中解出
1 |
|
在从factordb网站中由n分离出p和q
1 |
|
接着将这些都填入脚本,运行得到flag
shanghai
题目描述已经告诉我们是维吉利亚密码了,于是将压缩包下载下来,打开
直接放在在线维吉利亚密码网站解密,发现flag
解密网站https://guballa.de/vigenere-solver
Re(逆向)
insanity
将题目文件下载下来,右键,选择打开方式为记事本打开,就可以发现flag。
1 |
|
re1
下载下来一个应用程序,先直接运行一下看看,
让我们输入flag,随便输入几个字母看看,发现flag不对就不能看到flag,接着就退出程序了
于是先丢进去软件查一下壳吧
发现没壳,32位的程序,那就好办了,接着扔进IDA(32)看看
按tab,然后点击ok,发现一个printf(aFlag_0);,于是双击看看
可以看到了两组十六进制字符,有点可疑,于是右键转换,反转一下字符,拼接起来,就能得到flag了
game
还是个可执行程序,运行看看
算了,让我玩游戏,既然是re,还是不玩了,走正常的流程。老样子,先查壳
依旧是32位,没壳,于是丢进ida(32)
找到程序入口,按tab,在结尾发现sub_457AB4()函数,双击进入,跟着查看另一个函数,发现想要的flag内容,这个应该是最后输出flag的地方
搜了一下,发现这个代码意思是v3以下的和v60以上异或在和0x13异或
难受,发现还得写个代码来输出flag的内容,于是干脆用python写一下,运行让它输出flag
1 |
|
Hello, CTF
依旧是老样子,下载下来,先查壳
还是32位,没壳,接下来还是丢IDA看看
tab查看代码,直接发现一个16进制密文
直接放到在线16进制转字符串网站,转换得到flag(就是这个flag格式有点奇怪,一开始我是我相信它是flag的)
open-source
这次下载下来是一个从,语言代码,打开审计一下
代码需要让它不满足满足:(first != 0xcafe)和(second % 5 == 3 || second % 17 != 8)
于是令argv[1] = 0xcafe、argv[2] = 25和argv[3] = “h4cky0u”
由此构造出新的代码,运行得到flag
1 |
|
simple-unpack
题目说了是一个加壳的二进制文件,但是我这个好像是非预期解
就是右击文件,选择记事本的打开方式打开,Ctrl+f 搜索flag,发现字符串flag
但是虽然能发现flag,但有一部分是乱码的,于是用winhex打开,就能得到正确的字符串了
好像还是不行,需要把那个乱码的部分去掉,才是正确的flag
easyRE1
下载下来压缩包,解压得到俩文件,一个32位一个64位,随便选一个用记事本方式打开,直接就看到flag了,而且不用转字符串,需要包上flag{}
lucknum
直接拖进IDA64位打开,tab转换成伪代码,直接得到flag
1000Click
下载下来,可以直接运行,点击1000次就能得到flag了,
但还是想试试逆向的方式解题,先查壳
32位,没壳,丢进IDA32
点search搜索flag,就找到flag了
Pwn
get_shell
这个应该算个入门题,甚至不用去分析它的源码附件,打开kali,nc 连接靶机地址就出来了flag
1 |
|
hello pwn
先下载下来附件,在nc连接看看
发现不能直接执行指令,乱输也是直接退出,因此把下载下来的附件丢进ida看看
分析main函数这个入口
if ( dword_60106C == 1853186401 )
sub_400686()
发现如果if成立,就能执行该sub_400686()函数,从而cat flag.txt输出flag
再观察unk_601068函数,发现60106C和601068的偏移为4,而且1853186401转化为字符是nuaa
因此,只要输入后4位为aaun(反着来)的一个8位的字符串就能得到flag
level0
下载下来附件,拖进kali,先checksec一下
1 |
|
然后用64位的IDA打开,分析一下
可以看到调用了一个vulnerable_function函数,进去看看,
不是很懂,看一下别人的wp,思路就是:先把buf填满,然后64位ret填8个字符,然后通过字符串找到system函数的地址,输入,实现调用。
exp:
1 |
|
接着拿到shell,后得到了flag
level2
把附件下载下来,然后用checksec检查一下,发现这次开启了NX保护,并且是32位的
于是用32位的IDA打开看看,mian函数中没什么东西,就vulnerable_function这个可以的地方,于是进入vulnerable_function看看,发现read函数,不难看出这个就是溢出点
然后分别在字符串窗口找到read函数地址,和在import窗口找到system地址
偏移量为0x88+4,构造出payload
1 |
|
接着就是一样的步骤,就能拿到flag了
pwnstack
下载压缩包解压,打开发现有pwn2和libc.so.6
先用checksec检查一下pwn2
开启了NX,并且是64位的,丢进IDA64看看
发现vuln()函数的read()存在溢出,需要覆盖vuln的返回地址,使其指向system(‘/bin/sh’)即可,于是计算偏移量0xA0,找到/bin/sh的地址
构造exp
1 |
|
拿到flag
cgpwn2
下载下来,checkesc检查一下
开启了NX保护的32位文件,用ida32位打开
通过查看伪代码,可以找到main中的hello()函数存在溢出漏洞
于是我们可以利用栈溢出返回地址到system函数处,然后给他一个/bin/sh字符串就能拿到shell
然后构造出脚本,运行得到flag
1 |
|