题目序号 主动
操做内容:
进入网址,阅读源码,发现是个命令执行的题。
php
先尝试ls命令列出全部文件,发现存在flag.php文件,猜想flag在该文件中。
java
而后尝试读取flag.php文件,可是正则匹配了flag关键词,须要使用通配符绕过,如:fla?.php,可是尝试cat、tail、head、more文件读取命令均无效,最后使用tac命令拿到flag。
web
flag值:
flag{I_like_qwb_web}算法
题目序号 Funhash
操做内容:
进入网址,开始阅读源码,发现须要绕过三个不一样的限制方可拿到flag。
sql
先看level1,分析可知须要明文和md4加密后的密文要匹配才行,好在他使用了非精确匹符号!=,由于能够考虑”0e”,即明文为0e开头,密文也为0e开头,且0e后面全是数字,写脚本跑出了一个符号条件的字符串0e251288019。代码以下:数组
public static void main(String[] args) { for(int i = 0;;i++){ String str = Md4.getMD4ofStr("0e"+i); if(str.startsWith("0e")){ char chars[] = str.toCharArray(); boolean isNumber = true; for(int j = 2;j < chars.length;j++){ int s = (int)chars[j]; if(s < 48 || s > 57){ isNumber = false; break; } } if(isNumber){ System.out.println(i+"\t"+str); break; } } } }
因而构造payload以下:
网络
继续绕过level2,发现须要找到不一样明文,可是md5值相同的,一开始想到了md5碰撞,后来一想,php参数名传入数组的话,任意传值,md5都会匹配,因而构造payload以下:
ide
来到level3,咋一看是个sql注入,可是hash4用md5加密成二进制了,这个比较巧妙,要注入他须要md5加密后带有’or’ 的字符串,因而从网上找到符合条件的字符串ffifdyop,构造payload以下:
网站
flag值:
flag{y0u_w1ll_l1ke_h4sh}编码
题目序号 IPFS
操做内容:
一、pic1是分6块存储,经过题目给出的6个hash值能够直接在IPFS网络中下载这6个分块文件。我是在https://ipfs.io/ipfs/网站上下载的,如:
https://ipfs.io/ipfs/QmZkF524d8HWfF8k2yLrZwFz9PtaYgCwy3UqJP5Ahk5aXH
下载后获得6个文件,其中1个文件带有后缀【.jfif】,应该是第一个分块。6个文件中有5个文件大小一致,为26624byte,另外1个文件小一些,应该是最后一个分块。肯定了头尾,其他4个分块为中间分块,只有24种组合,我直接用拼接的,拼错了图片会有明显的不正常感受。最后获得一个完整的pic1.jpg文件:
二、pic2分1个块存储,题目给了pic2文件的sha256sum,使用文件的hash值添加0x1220,而后使用base58进行编码获得IPFS-Multihash,这个值也是题目说的忘记了的那个hash2
s = ’1220659c2a2c3ed5e50f848135eea4d3ead3fa2607e2102ae73fafe8f82378ce1d1e' hash2 = b58encode_int(int(s, 16))
可知:
hash2= “QmVBHzwuchpfHLxEqNrBb3492E73DHE99yFCxx1UYcJ6R3”
根据hash2下载文件pic2.jpg:
multihash是一种自识别hash (Self identifying hashes)
multihash 多重哈希 遵循TLV 模式(type-length-value)。它其实就是一个字符串,由三部分组成:HASH算法编码、HASH值的长度(字节数)、HASH 值。
SHA2-256的编码为0x12,其HASH摘要长度为32字节(十六进制数为0x20)。把1220加到前面所得HASH值的开头。
三、根据图片,flag=flag{md5(hash1+hash2)},还须要知道hash1。这里遇到个坑,开始一直向把这个值经过pic1.jpg算出来,可是是分块存储,一直没找到根节点的hash生成算法。最后换了个方法,把pic1.jpg这个文件按照26624的分块再往网上上传一次。命令以下:
ipfs add -s size-26624 pic1.jpg
命令返回了一个hash值:
QmYjQSMMux72UH4d6HX7tKVFaP27UzC65cRchbVAsh96Q7
查看一下这个节点下的文件:
ipfs ls -v QmYjQSMMux72UH4d6HX7tKVFaP27UzC65cRchbVAsh96Q7
返回了的6个节点跟题目给出的hash值一致:
hash1= “QmYjQSMMux72UH4d6HX7tKVFaP27UzC65cRchbVAsh96Q7”
四、计算md5(hash1+hash2),随便找了个网站计算md5,得flag{35fb9b3fe44919974a02c26f34369b8e}
flag值:
flag{35fb9b3fe44919974a02c26f34369b8e}
题目序号 bank
操做内容:
一、经过nc链接题目,是一个sha256的爆破,代码以下:
dic="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789" result='11341d04ffb54c67907472b094e4814bd955dd4f223a17939d6d61683e9c5ed3' known="by1gCDw8wxb1gRoZV" teamtoken="icq8e64a8ad90e4a5ae3ce7f7ce89fd4" for i in dic: for j in dic: for k in dic: key=i+j+k s=key + known h=hashlib.sha256(s.encode('ascii')).hexdigest() if h==result: print(key)
二、进去之后观察了一会,是一个交易系统,每次进去默认只有10块钱,获取flag要1000块,开始觉得只须要爆破100次sha256就能够了,可是事实是没有这么简单。每次链接都是一个独立的进程,交易信息和资金信息断开后就重置了,没法经过屡次爆破而后交易给一个用户的方式来增长资金。继续看到了一个提示,交易后会生成一个字符串,根据提示,这个字符串应该是根据交易的双方和金额组成。由AES算法来生成3个字符串,每一个字符串32byte,而后作拼接生成一个相似交易单号的96byte字符串。系统中能够查看一些别人的交易单号,本身交易以后也会生成交易单号,系统中还有一个是提交交易单号的功能,应该是提交了以后会根据提交的交易单号来更新金钱数据。根据这些,思路是经过已知交易单号和本身的交易单号,破解AES的key,而后使用key伪造交易单号,因而开始入坑……泪。开始着手研究AES的已知明文攻击、选择明文攻击,搞半天无果,准备放弃。喝口水忽然灵光闪现,本身交易后会生成交易单号,其中的的recevier字符串原本就是经过key加密的,系统中能查到10笔交易单号,把中间的recevier字符串更换成本身的就好了。没写代码,作了一个excel,快速生成10笔伪造交易单,而后提交给系统。
最后获取到1000+的资金,使用get flag得到最终flag。
好烦,没记flag,还要作一次……
如该题使用本身编写的脚本代码请详细写出,不容许截图
flag值:
flag{3a9f633497c3cf3ac869c18ef416ad9c}
题目序号 upload
操做内容:
文件下载下来用wireshark分析,比较简单,能够看到以下信息:
提示很明显,使用steghide加密,而且使用了密码。在数据包里面找到了一个jpg文件,很容易分离出图片,继续找密码,没找到,数据包比较简单,应该不会漏。盯着代码看了一会,总以为这个a good password是在嘲讽我,因而使用密码123456解密steghide.jpg,获得flag.txt文件。
flag就在文件中。
flag值:
flag{te11_me_y0u_like_it}