开启靶场,打开链接,下载附件:
嗯,直接显示“Oh hacker!”,有点懵,先看看下载的附件(server.py):
得到信息如下:
用户输入的表达式长度被限制在7个字符以内。如果超过这个长度,程序会输出 "Oh hacker!" 并退出,否则就执行用户输入的内容
到这里就懂了,需要在kali上nc命令进行操作
尝试一下help,结果告诉我只能help()
输入help()后,显示一段python3.8的简单介绍内容
翻译内容如下:
欢迎使用 Python 3.8 的帮助工具!
如果你是第一次使用 Python,强烈建议你查看网上的教程,网址是 https://docs.python.org/3.8/tutorial/。
输入任何模块、关键字或主题的名称,以获取有关编写 Python 程序和使用 Python 模块的帮助。要退出此帮助工具并返回解释器,只需键入 "quit"。
要获取可用模块、关键字、符号或主题的列表,可以分别键入 "modules"、"keywords"、"symbols" 或 "topics"。
每个模块都有一行简短的描述说明其功能;要列出名称或描述中包含特定字符串(如 "spam")的模块,可以键入 "modules spam"。
因为我是第一次做这种交互式题目,有点懵逼,后面查看了别人的write up后才发现源码本来应该有段提示的:
#Your goal is to read ./flag.txt
#You can use these payload liked `__import__('os').system('cat ./flag.txt')` or `print(open('/flag.txt').read())`
到这里就很明显了,需要使用一些payload来读取flag.txt的内容,这里了解到可以使用payload:
__import__('os').system('sh')
__import__('os'):这是一个使用内置函数 __import__ 来导入 Python 模块 os 的代码。os 模块提供了与操作系统交互的功能,例如执行系统命令、文件操作等。
os.system('sh'):在导入了 os 模块后,该代码执行了 os.system('sh')。os.system() 函数是用于执行系统命令的,它接受一个字符串参数,将其中的命令在终端或命令提示符中执行。在这里,它试图执行命令 sh。
sh 是一个常用的 Unix/Linux 命令行解释器(shell),它是命令行的一个交互式解释器,允许用户输入命令并执行。
这里不熟练,直接q(quit)了
重新nc一下再输入payload
哦哦,忘了还有对输入字符串进行限制了,换种思路
再重新nc,依次输入os、!ls、!cat flag
(注意:! 符号通常被用于这种类似的交互式环境中,用来执行系统命令而不是python代码)
成功得到flag:
NSSCTF{95ceeb2b-293a-4aa4-84ba-d81e237cfdd4}