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

相关推荐
千里马学框架4 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台4 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone4 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc4 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo5 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077005 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼5 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone5 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen5 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone5 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui