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

相关推荐
一航jason2 小时前
Android Jetpack Compose 现有Java老项目集成使用compose开发
android·java·android jetpack
猿小蔡-Cool2 小时前
Android 中的 Zygote 和 Copy-on-Write 机制详解
android·zygote
顾北川_野2 小时前
android 默认关闭增强型4GLTE开关;去掉VT视频通话功能及菜单
android·开发语言
海绵波波1072 小时前
聊天服务器(7)数据模块
android·服务器·adb
软件聚导航3 小时前
uniapp 实现 ble蓝牙同时连接多台蓝牙设备,支持app、苹果(ios)和安卓手机,以及ios连接蓝牙后的一些坑
android·ios·uni-app
深海呐8 小时前
Android 最新的AndroidStudio引入依赖失败如何解决?如:Failed to resolve:xxxx
android·failed to res·failed to·failed to resol·failed to reso
解压专家6668 小时前
安卓解压软件推荐:高效处理压缩文件的实用工具
android·智能手机·winrar·7-zip
Rverdoser8 小时前
Android 老项目适配 Compose 混合开发
android
️ 邪神10 小时前
【Android、IOS、Flutter、鸿蒙、ReactNative 】标题栏
android·flutter·ios·鸿蒙·reatnative
努力遇见美好的生活10 小时前
Mysql每日一题(行程与用户,困难※)
android·数据库·mysql