极客之命令注入实操第二篇
长度限制绕过
极客之命令注入实操第二篇
命令注入通常指因为Web应用在服务器上拼接系统命令而造成的漏洞。 该类漏洞通常出现在调用外部程序完成一些功能的情景下。比如一些Web管理界面的配置主机名IP掩码网关、查看系统信息以及关闭重启等功能,或者一些站点提供如ping、nslookup、提供发送邮件、转换图片等功能都可能出现该类漏洞。
wget\ >foo.\ >com ls -t > a sh a
上面的方法为通过命令行重定向写入命令,接着通过ls按时间排序把命令写入文件,最后执行 直接在Linux终端下执行的话,创建文件需要在重定向符号之前添加命令 这里可以使用一些诸如w,[之类的短命令,(使用ls /usr/bin/?查看) 如果不添加命令,需要Ctrl+D才能结束,这样就等于标准输入流的重定向 而在php中 , 使用 shell_exec 等执行系统命令的函数的时候 , 是不存在标准输入流的,所以可以直接创建文件
常用符号编辑
命令分隔符
%0a / %0d / \n / \r
;
& / &&
通配符
- 0到无穷个任意字符
? 一个任意字符
[ ] 一个在括号内的字符,e.g. [abcd]
[ - ] 在编码顺序内的所有字符
[^ ] 一个不在括号内的字符
防御编辑
不使用时禁用相应函数
尽量不要执行外部的应用程序或命令
做输入的格式检查
转义命令中的所有shell元字符
shell元字符包括 #&;,|*?~<>^()[]{}$`
命令行注入,用户输入的字符串被直接作为系统命令在命令行执行。 存储型命令行注入,来自存储设备的字符串被直接作为命令行使用。
阅读我的更多文章