第六届山东省网安竞赛复现Write up

第六届山东省网安竞…

1.小明的密码

97年出生的小明用自己的生日作为自己网站的密码, 现在, 得到一串被篡改过一个字符的字符串, 你能解出小明的生日吗?
0175501585710a89h5a60dc9ed2f88d7

其实很简单的题,比赛时候就看出来思路,可惜python没写好,hashlib用的不行。没做出来。

思路:
测试97年所有的日期的hash即可,然后与之对比。
重点在hashlib库的使用如事前encode等问题。
还有if s[:10] in md5:这种比较方式应用。

#python 3.6.3
import hashlib

s = '0175501585710a89h5a60dc9ed2f88d7'

for i in range(1,32):
    for j in range(1,13):
        date = '1997{1}{0}'.format(i, j)
        m = hashlib.md5()
        m.update(date.encode("utf8"))
        md5 = m.hexdigest()
        print ("loading")
        if s[:10] in md5:
            print (md5)
            print (date)

2.仿射加密

已知仿射加密变换为c=(11m+7) mod26, 试对密文dikxourxd解密。

和上一题一样,个人问题在于python编写能力不足。
或者说当时被卡题心态有些崩了,只想着用手算了。

算法思想不难,也就是暴力解出。把每个字母作为m试一次然后把c和密文对比即可,取其相对应字母,连起即明文。

#python2.7
a = 'dikxourxd'
a1=[]
for i in a:
    a2 = ord(i)-97
    a1.append(a2)
print a1
for i in a1:
    for j in range(0,26):
        c = (11*j+7)%26
        if(c==i):
            print chr(j+97)

3.人生苦短

这道题就开始真正的摸不着思路了。
看过WP才清楚原来提示中的pyhton和Linux是整合文件用这个的意思。

思路:
1.导出http包
2.发现几个flag文件
3.用cat或者Python整合文件
4.解包(此处考察了伪加密,但在kali下可直接解压)

要点:
Wireshark导出http包部分的使用,或者说wireshark的使用。(确实得好好看一下wireshark的相关详细姿势了,每次都是做到新题才知道一种新用法。)

cat命令或python来整合文件。

4.Web漏洞

黑客利用漏洞从Web系统中窃取了什么机密信息?

当时查flag字段,看出是注入,没看出是猜解。

思路:
打开查看是Apache日志, 查找flag关键词, 发现是通过延时盲注读取了flag表的内容。 写代码解决问题。
urldecode之后, 可发现对每个
字符猜解的最后一个数据包当中用!=做判断。 利用正则过滤出正确猜解的字符的ascii。 第一条为查询数据的条数, 后面为flag表的内容。

代码如下:

import urllib
import re
flag = ''
flag_list = []
with open('access.log', 'r') as file:
        #print file.read()
        line_lists = file.readlines()
        #print len(line_lists)
        flag_lines = []
        for i in line_lists:
                if 'flag' in i:
                        flag_lines.append(i)
#print len(flag_lines)
for i in flag_lines:
        s = i.split(" ")[6]
        s=urllib.unquote(s)
        if '!=' in s :
                print s
                p = re.compile(r'!=[1-9]\d*')
                flag = flag + chr(int(p.findall(s)[0].replace('!=','')))

print flag

没什么别的可说的,当时做不出来是对SQL注入理解不行。
这道题的题点应该就是Sqli机制和正则匹配了。

5.Gakki

这道题出的太脑洞了。没遇见过这类题就很难做出来。

题点是文件头数据块IHDR:
包含有PNG文件中存储的图像数据的基本信息,并要作为第一个数据块出现在PNG数据流中,且一个PNG数据流中只能有一个文件头数据块。
文件头数据由13字节组成,结构如下:

本题中 IHDR位原本是0000061E 0000031E
看详细信息里应当是1566×798,相应的16进制就应该是
0000061E 0000051E

修改后,图片显示flag。

真的想不到。
以后就能想到了。

6.神奇的图片

这个题当时竟然都没看一下。今天做了一下。
给了两个图片一个xor.png,一个flag.png,看到xor文件名知道是异或运算。

def xor(str1, str2):
        return ''.join(chr(ord(x) ^ ord(y)) for x, y in zip(str1,str2))


for i in range(20):
        #png_1 = open(sys.argv[1], "rb").read(i)
        png_1 = open("xor.png", "rb").read(i)
        png_2 = open("flag.png", "rb").read(i)
        key = xor(png_1, png_2)

        print key

harmoc

发表评论

电子邮件地址不会被公开。 必填项已用*标注