[复现]绕过学的还是太差了,多积累吧
题目
题目:
给了一个python文件
#!/bin/python3
import os
print("input your command")
blacklist = ['cat','ls',' ','cd','echo','<','${IFS}','sh','\\']
while True:
command = input()
for i in blacklist:
if i in command:
exit(0)
os.system(command)
这里有一个输入点,并且禁用了cat
、ls
、空格
、cd
、echo
、<
、${IFS}
、sh
、\\
最后会用os.system执行我们输入的内容
思路:
这题对我们的输入存在多个限制,可以用''
(空字符串)绕过对cat的限制,而空格这里学了一个新的绕过方法用$IFS
知识点:
$IFS
是 shell 环境变量,全称是 Internal Field Separator(内部字段分隔符),默认值为空格、制表符、换行符,用于分隔命令中的参数
$IFS
的默认值是空格、制表符(Tab)和换行符(Newline)
(部分场景下,$IFS
后必须跟一个数字,如 $IFS$1
、$IFS$9
等,才能正确替代空格)
这种写法常用于规避对空格的限制(如某些环境禁止使用空格,但允许使用变量替换)
所以最后通过这句获得flag
ca''t$IFS$5flag
注意点:
$后面跟数字1-9
0不可以是因为在特殊情况下0会被认为是sh
或者是/bin/sh
这题是把$0认为了sh
($0和system的连接可以看这道题题目题解)
10开始不可以是因为,从10开始,需要这么写入${10},单写$10,会被识别成$1和0