2024 闽盾杯-黑盾赛道WP

CRYPTO

签到题-学会SM

https://www.json.cn/encrypt/sm3

题目要求小写所以需要转换一下

或者脚本:
import hashlib
message = "heidun2024"
hash_object = hashlib.new('sm3')
hash_object.update(message.encode('utf-8'))
hash_value = hash_object.hexdigest()
print(hash_value)

源码和数据都要保护

利用php在线解密工具解密php

得到php源代码
<?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';
}
?>

编写脚本后得到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。
附件中的 PHP文件经过加密,需要破解。可以用一些在线破解平台,如: http://www.zhaoyuanma.com/zym.html ,也可以自己搭建 PHP环境,安装 php-beast扩展模块,以 debug模式把 PHP源码还原出来。(模块用默认密钥即可) 源代码写了加密函数,没写解密函数:

要自己写出解密函数来对 txt文件解密才能得到明文 flag,参考解密代码:

MISC

考察的lsb隐写,直接zsteg梭哈了

用Stegsolve一样可以,b0通道

我变个样就不认识我
题目是变样,我猜测还是lsb,用zsteg跑

发现是存在冗余数据
看着这个直接能想到base64换表

发现编码表不正确,可能是表不全的原因, 因为是xyz开头,所以补充上abcdefghijklmnopqrstuvw

学会Office

看到是xls就知道是excel表格
用wps打开看看,发现可以取消隐藏

看到了flag列,提示了宏加密,因为我的wps不能够进行宏操作,我就换了windows的office
在视图中可以找到宏

但是看上去flag的字符顺序并不对
利用筛选功能进行排序,筛选计算机成绩降序

提取flag字符

我不是二维码


看着像二维码,然后还是0000000111111这种类型的,直接上Byxs20 b神的工具puzzlesolver,想购买工具的可以联系 企鹅97766819



得到二维码

识别后得到密码,做了很久,猜测是aes解密
文件名为密钥和偏移量,文件名做密钥也是老套路了

我变个样就不认识我了


查看图片尾部发现字符串
xyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/
W9i4WoeEJAy7Un/hV8u/WT870Tq2J6xjKEl=
拼接成完整base64表解码得到flag
xyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/abcdefghijklmnopqrstuvw

出题人的上网流量

开始得到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}

空白

题目描述:眼前一片白茫茫,脑袋也一片空白。
空白 .jpg文件末尾有附加数据,是个 rar压缩文件。可以用 binwalk自动提取或用 winhex手动复制成新文件。

rar文件解压得到两个 txt文件,一个只有空白字符,另一个有特殊字符:

看着有全角和半角符号,猜测为半角全角字符隐写,通过 https://holloway.nz/steg/ 尝试解密,获得密码提示6hlowsn2a2nha,如图:

另一个空白字符文件,利用SNOW隐写工具(下载链接https://darkside.com.au/snow/),执行命令如下: SNOW .EXE -C -p 6 hlowsn2a2nha 看不见不一定没有 .txt

得到flag:

WEB

你懂Fu22吗?

题目说懂Fu22吗,其实就是fuzz

根据提示可以发现是需要换请求方法
改为post后

提示需要参数和值
这里就直接使用arjun来爆破参数

能够发现参数为word,然后在bp中用字典爆破value

这里用的是arjun自带的一个large字典

爆破出value值为exec,得到新的线索

访问后发现是套娃,还是爆破,不过这次是get型的
还是需要参数利用arjun再爆破一次

爆破出来key的值为key,本来还想爆破value的,试了一下ls发现成功执行了

看了是直接rce了,这里过滤了空格$IFS绕过一下就好了

这里在上层有一个假的flag,而上上层的flag.txt才是真的flag

No characters

题目提示了是windows,所以肯定考察的是关于文件上传的windows特性

上传后缀处能够利用::$DATA来绕过检测
除了校验后缀,内容中的数字与字母一样会被拦截,所以这里利用的无字母数字webshell

成功上传,执行一个phpinfo()看看

上去找了半天没找到flag,用findstr来匹配一下

发现flag在windows目录下,用type命令来读取

PDF export

输入内容,导出PDF。 测试发现,过滤了 file://协议,同时一些 HTML标签也被拦截了。但可以用 <svg和 <script标签,还有 <meta标签。所以,可以用 js脚本读 flag文件,使它输出到 PDF文件中。 思路一: 提交 <meta http-equiv="refresh" content="0;url=javascript:document.write(xxx)" />实现执行脚本或跳转 URL。 思路二: 插入 <script代码段读取 flag.txt(也有人用脚本跳转 flag.txt即可)

参考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


题目附件下载地址:
链接:
https://pan.baidu.com/s/1bV-nYcL_ICohin0SXTFnSQ 提取码: 6u75
转载原文参考链接地址:
https://blog.csdn.net/xaxt123/article/details/139899667
https://blog.csdn.net/swordcloud_xm/article/details/140616151
https://blog.csdn.net/CLAY0011/article/details/140557348
https://mp.weixin.qq.com/s/CB62vYgf8rKbvcCCLiKjLA
https://mp.weixin.qq.com/s/CB62vYgf8rKbvcCCLiKjLA
https://mp.weixin.qq.com/s/Pnr585YrQqnhhhiiCJHttA

相关推荐
齐适杨1 小时前
MVC、MVP和MVVM之间的区别
android·mvc
lynn8570_blog4 小时前
CoroutineWorker 压缩图片示例
android·kotlin
i5344 小时前
jni,java,c
android
齐适杨4 小时前
recyclerView(kotlin)
android·开发语言·kotlin
Android 开发者6 小时前
Android Studio Koala Feature Drop 稳定版现已推出
android·ide·android studio
NullPointerExcept9977 小时前
Android自定义柱状图
android
NullPointerExcept9977 小时前
Android全屏模式下,即使设置windowSoftInputMode为adjustResize,键盘未推移Activity导致无法生效
android
Geekersoft8 小时前
Android 解锁工具的主题:适用于所有安卓手机的 5 款安卓解锁工具
android·windows·智能手机·电脑·手机·笔记本电脑·学习方法
Dingdangr10 小时前
了解Android中的Activity生命周期
android