Fork me on GitHub

2018安恒9月月赛

misc及密码原文件
提取码: 2ye3

web

由于环境缺失,这里简单提一下
100分的那个,构造

1
?code=?><?=`/???/??? /????`?>

即可,200分的是一个海洋cms,查看这篇文章复现即可:https://blog.csdn.net/m0_37438418/article/details/80984027

misc

1
2
3
4
5
#!/user/bin/env python3
# -*-coding:utf-8 -*-
s='二进制字符串'
for i in range(0,len(s),8):
print (chr(int(s[i:i+8],2)),end='')

base64–>图片

1
2
3
4
5
6
7
#!/user/bin/env python2
# -*-coding:utf-8 -*-
import base64
image="图片base64编码"
fp=open("test.png","wb") //图片后缀根据所提供的图片的base64编码情况来写
fp.write(base64.b64decode(image))
fp.close()
  • Ditf:
    binwalk -e一下,从中得到一个RAR压缩包,从binwalk的文件分解情况来看,还存在着一个图片,将整个图片放入winhex中,找到对应的位置,将图片“抠出来”,放在tweakpng下,得到压缩包的密码,解压后得到一个流量包,放在wireshark下,过滤http流,找到一个kiss.png的图片,追踪http流,找到一串base64编码,解码即可。
    1
    print base64.b64decode('字符串')

Crypto

  • GO(提交找到字符串的md5形式)
    解压压缩包,得到一个Ciphertext.txt,
    1
    ilnllliiikkninlekile

很显然,这是加密后的字符串。观察压缩包的属性中的注释,有一串16进制编码,化为ascii码,得到一串字符串

1
The length of this plaintext: 10

密文长度为20,明文长度为10。题目意思很明显了,解密找到明文,提交明文的md5格式。
16进制转ascii码

1
2
3
4
#!/user/bin/env python2
# _*_coding:utf-8 _*_
a='546865206c656e677468206f66207468697320706c61696e746578743a203130'
print ''.join([chr(int(b, 16)) for b in [a[i:i+2] for i in range(0, len(a), 2)]])

根据明文字符串个数与密文字符串个数相互间的关系以及出现的密文总是l,i,k,e,n这五个字母,可以推出这是由密钥为‘l,i,k,e,n’进行多文字加密而得来的密文,首先要对字母进行排序,然后逆向解密,附上大佬的脚本。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/user/bin/python2
# -*-coding:utf-8 -*-
import itertools
key=[]
cipher='ilnllliiikkninlekile'
for i in itertools.permutations('ilnke',5):
key.append(''.join(i)) #得到所有的密钥情况

for now_key in key:
solve_c=""
res=""
for now_c in cipher:
solve_c+=str(now_key.index(now_c)) #得出密文所在当前密钥中的位置
for i in range(0,len(solve_c),2):
now_ascii=int(solve_c[i])*5+int(solve_c[i+1])+97 #进行计算,得到每两个密文所对应的ascii明文
if now_ascii>ord('i'): #解决密钥矩阵中使用i替代j的问题
now_ascii+=1
res+=chr(now_ascii)
if "flag" in res:
print now_key,res