我在检查Shellshock漏洞时得到了这个结果:
host1:~$ env x='(){ :;}; echo vulnerable' bash -c "echo hello" hello host1:~$ env x='() { :;}; echo vulnerable' bash -c "echo hello" vulnerable hello host1:~$
怪怪的?
node.Js读取受保护的文件而不以root身份运行
直接在USB磁盘上写入字节
PHPconfiguration模块安全注意事项
我如何通过xmlrpc安全地获得对supervisord的编程访问权限?
我的Python程序中的安全缺陷
如果以环境变量的四个字符() {包括空格() {开始,Bash会将其识别为一个函数。 所以env x='(){ :;}; echo vulnerable' env x='(){ :;}; echo vulnerable'不算。
这并不完全符合你在bash定义函数的语法。 在内部, bash将以规范化的形式存储函数的字符串表示形式。 如果函数被导出(带有export -f function_name ),那么规范化的形式被添加到环境中,子bash进程将它识别为函数定义。
“shellshock”错误来自bash处理公认函数的方式; bash的BUG版本(可以回溯很久)简单地将环境中的字符串作为函数定义(通过预先给定变量的名称作为函数名称)来评估,这受到漏洞攻击的影响,如漏洞测试。
手动创建看起来像bash函数定义的字符串,以便在子bash进程中定义函数是一种已知技术。 导出函数并重新导入它们是非常普遍的,甚至不被用户注意到。 (例如,这个技术用于将bash函数传递到由xargs bash -c启动的子xargs bash -c并find ... -exec bash -c 。)
bash对于它认为在环境中的嵌入式函数定义有点挑剔。 在第一个
env x='(){ :;}; echo vulnerable' bash -c "echo hello"}
()和{之间缺少空格足以防止bash将其识别为导出的函数,所以它仍然是一个简单的shell变量; 看,试试跑吧
env x='(){ :;}; echo vulnerable' bash -c 'echo $x'
在第二个例子中, 带有空格的x值正确地模拟了一个导出的函数,所以子bash计算x的整个值来“导入”函数,但是执行函数定义之后的代码作为好。
总结以上是内存溢出为你收集整理的我很难理解Shellshock漏洞validation全部内容,希望文章能够帮你解决我很难理解Shellshock漏洞validation所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)