免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1408 | 回复: 2
打印 上一主题 下一主题

关于 shell 内的 Path 和 IFS 的保护 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-14 02:33 |只看该作者 |倒序浏览
本帖最后由 splendid12 于 2012-03-14 02:37 编辑

疑惑来自 乌龟封皮 的shell书
在 8.1 里面,讲解了一个案例:

#! /bin/sh -
#...
#...
IFS='  # 疑惑1

OLDPATH="$PATH"

PATH=/bin:/usr/bin
export PATH

... # 这里处理了所有的 -* 的选项,剩下的第一个参数就是 envvar,调用时可以传递 `basename $0` -* PATH ...,不是 $PATH

envvar=$1
test "x$envvar" = "xPATH" && envvar=OLDPATH  # 疑惑2
...

--------------
疑惑1:
书上说“有一种攻击 shell 脚本的方式,就是利用字符分割符:IFS。它会影响 shell 接下来对输入数据解释的方式。为避免此类攻击,部分 shell 仅在脚本执行前,将 IFS 重设为标准值,其他则导入该变量的一个外部变量。我们则是将自己做的防御操作放在脚本的第一行:”

能举一个攻击不处理 IFS 的案例吗?

--------------
疑惑2:
书上说:“另一种常见的攻击,则是欺骗软件,它执行非我们所预期的命令。为了阻断这种攻击,我们希望调用的程序是可信任的版本,而非潜伏在用户提供的查找路径下的欺骗程序,因此我们将 PATH 重设为一个最小值,以存储初始值以后使用”

我自己也尝试写了一个功能一样的程序,但是我就没有使用它这种机制:
`basename $0` -* $PATH ...
我在程序中就用 tr : ' ' 来处理的 $PATH,当然一切正常。

我想知道怎么攻击这个没有处理 PATH 的 Shell 程序 或者 相关的案例?

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
2 [报告]
发表于 2012-03-14 09:14 |只看该作者
疑惑1:
比如我们最常在linux中用的防火墙脚本 ... IPTABLES=/sbin/iptables; $IPTABLES xxx ooo ....
如果IFS=/ 能正常运行么?

疑惑2: 参考一下
http://bbs.chinaunix.net/thread-3683080-1-1.html

别外的话题:
1.个人觉得看书通读几遍比直接细钻效率要高
2.根据你提供的这些上下文是很难猜测作者想说什么的

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
3 [报告]
发表于 2012-03-14 19:16 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP