Open fdl66 opened 2 years ago
curl%0a1.1.1.1
利用%0a可以绕过命令注入校验!!!
https://github.com/alessio/shellescape/blob/master/shellescape.go https://pkg.go.dev/github.com/alessio/shellescape#example-Quote
参考PHP中的防范命令注入的两个函数。
PHP对于命令注入漏洞提供了escapeshellarg()和escapeshellcmd()两个函数来进行防御,当然两者针对的场景有区别。
主要是为了防止用户的输入逃逸出“参数值”的位置,变成一个“参数选项”。 处理过程:如果输入内容不包含单引号,则直接对输入的字符串添加一对单引号括起来;如果输入内容包含单引号,则先对该单引号进行转义,再对剩余部分字符串添加相应对数的单引号括起来。 场景功能:
1.确保用户只传递一个参数给命令 2.用户不能指定更多的参数一个 3.用户不能执行不同的命令
主要是防止用户利用shell的一些技巧(如分号、管道符、反引号等)来进行命令注入攻击。
处理过程:如果输入内容中
&#;`|*?~<>^()[]{}$\, \x0A 和 \xFF
等特殊字符会被反斜杠给转义掉;如果单引号和双引号不是成对出现时,会被转义掉。
场景功能:
1.确保用户只执行一个命令 2.用户可以指定不限数量的参数 3.用户不能执行不同的命令
比如:
curl%0a1.1.1.1
利用%0a可以绕过命令注入校验!!!
正确的解决方案
https://github.com/alessio/shellescape/blob/master/shellescape.go https://pkg.go.dev/github.com/alessio/shellescape#example-Quote
过程中的其他思考:
参考PHP中的防范命令注入的两个函数。
PHP对于命令注入漏洞提供了escapeshellarg()和escapeshellcmd()两个函数来进行防御,当然两者针对的场景有区别。
escapeshellarg
主要是为了防止用户的输入逃逸出“参数值”的位置,变成一个“参数选项”。 处理过程:如果输入内容不包含单引号,则直接对输入的字符串添加一对单引号括起来;如果输入内容包含单引号,则先对该单引号进行转义,再对剩余部分字符串添加相应对数的单引号括起来。 场景功能:
escapeshellcmd
主要是防止用户利用shell的一些技巧(如分号、管道符、反引号等)来进行命令注入攻击。
处理过程:如果输入内容中
等特殊字符会被反斜杠给转义掉;如果单引号和双引号不是成对出现时,会被转义掉。
场景功能: