[SWPUCTF 2021 新生赛]nc签到

haoo@LAPTOP-QH6DKIQF:/mnt/d/ctf/nssctf$ file pwn1
pwn1: ASCII text

这道题目的附件不是ELF文件,直接cat获取文件内容

haoo@LAPTOP-QH6DKIQF:/mnt/d/ctf/nssctf$ cat pwn1
import os

art = '''

(( "####@@!!$$ ))
`#####@@!$$` ))
(( '####@!!$:
(( ,####@!!$: ))
.###@!!$:
`##@@!$:
`#@!!$
!@# `#@!$: @#$
#$ `#@!$: !@!
'@!$:
'`\ "!$: /`'
'\ '!: /'
"\ : /"
-."-/\\\-."//.-"/:`\."-.JrS"."-=_\\
" -."-.\\"-."//.-".`-."_\\-.".-\".-//'''
print(art)
print("My_shell_ProVersion")

blacklist = ['cat','ls',' ','cd','echo','<','${IFS}']

while True:
command = input()
for i in blacklist:
if i in command:
exit(0)
os.system(command)

黑名单里面的东西有点多了,但是并没有su这种可以获取新shell的命令,并且这个子shell直接接管当前连接的标准输入输出而不会经过黑名单,因此在nc连接后输入sh获取新shell,从而绕过黑名单得到flag。