Python:subprocess.call注入

Python:subprocess.call注入,python,subprocess,Python,Subprocess,我正在做一项家庭研究,我遇到了一个挑战,那就是尝试在一些Python代码中插入命令注入 我遇到的麻烦是支票,似乎无法绕过它 address = sys.argv[1] if not re.match("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", address): return usage("Invalid argument") subprocess.call("/bin/ping -c 3 '{0}'".format (address), shell =

我正在做一项家庭研究,我遇到了一个挑战,那就是尝试在一些Python代码中插入命令注入

我遇到的麻烦是支票,似乎无法绕过它

address = sys.argv[1]
if not re.match("\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", address):
   return usage("Invalid argument")

subprocess.call("/bin/ping -c 3 '{0}'".format (address), shell = True)
导致子流程上面的检查检查它是否是有效的IP地址,我无法操作它,并建议如何操作

致以亲切的问候,
Patrick

您可以使用有效的ip地址,后跟系统命令,例如:

127.0.0.1';/sbin/ifconfig;:'
如果要包含参数,请将
argv[1]
用双引号括起来:

"127.0.0.1';/bin/ls -al /root;'"

您可以在系统命令后使用有效的ip地址,例如:

127.0.0.1';/sbin/ifconfig;:'
如果要包含参数,请将
argv[1]
用双引号括起来:

"127.0.0.1';/bin/ls -al /root;'"

看来这是不可能的。正则表达式检查使此命令调用从injections@AndrewCherevatkin不,没有。正则表达式没有锚定,因此它只检查声称地址中的有效子字符串。看起来这是不可能的。正则表达式检查使此命令调用从injections@AndrewCherevatkin不,没有。正则表达式没有锚定,因此它只检查声称地址中的有效子字符串。这有点诡计,因为字符串用引号括起来。您需要类似于
127.0.0.1';ifconfig;:'关闭并重新打开引号,生成有效的命令行。谢谢大家!,你真的帮了我。。我正要把笔记本电脑扔到墙上:)这有点诡计,因为字符串是用引号括起来的。您需要类似于
127.0.0.1';ifconfig;:'关闭并重新打开引号,生成有效的命令行。谢谢大家!,你真的帮了我。。就要把笔记本电脑扔到墙上:)