代码规范系列|黑盒挖掘-命令注入

1、前言
命令注入是什么?
程序员使用脚本语言(比如PHP)开发应用程序过程中 , 脚本语言开发十分快速、简洁 , 方便 , 但是也伴随着一些问题 。 比如说速度慢 , 或者无法接触系统底层 , 如果我们开发的应用,特别是企业级的一些应用需要去调用一些外部程序 。 当应用需要调用一些外部程序时就会用到一些执行系统命令的函数 。
当用户可控点可以使用管道符进行命令拼接 , 或者参数点的过滤不严格 , 从而可以被绕过 , 就有可能会导致Web服务器程序权限被继承 , 去执行系统命令、读写文件、反弹shell、甚至控制整个服务器等危害
代码规范系列|黑盒挖掘-命令注入】PHP常见命令执行函数:system()、exec()、shell_exec()等
2、常见的命令
拼接符单管道符(|)
将前面一条命令的执行结果 , 作为后面一条命令的执行参数
代码规范系列|黑盒挖掘-命令注入
文章图片
双管道符(||)
或命令 , 执行前面的命令 , 如果前面的命令执行结果错误 , 则执行后面的命令并返回输出 , 如果前面的命令执行正确 , 则只执行前面的命令
代码规范系列|黑盒挖掘-命令注入
文章图片
双连字符(&&)
与命令 , 如果前面的命令执行成功则执行后面的命令 , 反之不执行
代码规范系列|黑盒挖掘-命令注入
文章图片
3、案例
在某站点使用账号密码进行登录 , 然后购买某个服务
代码规范系列|黑盒挖掘-命令注入
文章图片
填写信息--->商标图样自动生成处存在命令注入
代码规范系列|黑盒挖掘-命令注入
文章图片
在商家名称处输入单引号 , 页面报错
代码规范系列|黑盒挖掘-命令注入
文章图片
刚开始 , 尝试测试SQL注入 , 但是发现常见函数均未定义 , 沉思ing…
仔细看了看报错信息 , 发现有提示Commandfailed , 和‘curl’命令 , 并且有一些参数设置 , 开始思考是否存在命令注入
拼接命令
cmd命令
代码规范系列|黑盒挖掘-命令注入
文章图片
得知当前用户权限是root
4、防御技巧
禁用部分敏感函数
严格过滤关键字符(管道命令)
使用自定义函数或函数库来代替外部命令
最小特权原则返回搜狐 , 查看更多
责任编辑: