DaXin Space

DaXin Space

5rKh6ZSZIOi/meaYr+S4gOS4qkJhc2U2NCDkvaDmmK/lr7nnmoQ=
github

浅学$IFS在Shell与Web攻击中的用法

今日、データパケットの検索資料を分析している際に、偶然に ${IFS} についての Freebuf の記事を見つけました。
以下にリンクを添付します:
https://www.freebuf.com/articles/web/286513.html

知識の盲点だったので、調べてみました。自分の理解を記録しておきます。

$IFS は、シェルスクリプト内の set 変数の一種であり、シェルが「コマンドの置換」と「パラメータの置換」を処理する際に、IFS の値に基づいて、デフォルトではスペース、タブ、改行を使用して入力された変数を分解し、特殊文字を処理し、最後に再度組み合わせてその変数に割り当てます。

もし直接 echo "cd${IFS}/home" を実行すると、${IFS} の値は \n になるはずです。

image
しかし、$IFS をダブルクォーテーションで囲むと、$IFS は無効になります。例えば、以下の内容を含むシェルファイルを作成します。
入力:

IFS='-'
string2="1--2--3--4"
echo $string2
echo "$string2"

出力:

1  2  3  4
1--2--3--4

リンク先のハッカーの攻撃手法に従って、サーバー上で直接実行してみます:

/bin/sh${IFS}-c${IFS}'cd${IFS}/home/target;ls${IFS}-l'

このような書き方のコマンドは実行可能であり、コマンドの実行結果を取得することができます。
もし、このようなコマンドが URL に含まれており、ウェブ上にディレクトリトラバーサルの脆弱性が存在し、IPS や WAF が URL の検出時に ${IFS} の判断を含んでいない場合、攻撃者によって悪用される可能性が非常に高くなります。
その場合、攻撃者はパスワードファイルの抽出や nc の逆接続などを行うかもしれません。

今後、新たな学びの結果があれば、追記しますね〜

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。