誰でも入力を提供できるスクリプトが提供されます。変数から抜け出すことができる入力はありますか?たとえば、次のスクリプトが提供されます。
echo $1
次のようにすることは可能ですか$1
?
text && rm -rf /
上記のような操作を試していますが、動作しません。
上記のシナリオが不可能であることを誰でも確認できますか?
答え1
2014年には、ShellshockというBashの脆弱性が悪用されました。一般的なソフトウェアのほとんどの脆弱性と同様に、Common Vulnerability and Exposures(CVE)勧告CVE-2014-6278が公開されました。 Shellshockは、ApacheのcgiモジュールとOpenSSHを含む一般的なサーバーソフトウェアスタックの複数の攻撃ベクトルを介してリモートホストで任意のコードを実行できるようにするBash用のリモート攻撃です。
この脆弱性は 1989 年から 2014 年までのすべての Bash バージョンに影響を及ぼし、簡単に作成された脆弱性が広く実証され、パッチが適用されました。
追加資料:
ServerFault Shellshockの問題、2014
Distro Reposで利用可能なほとんどのバージョンがすでにパッチされていると思います。
訂正:シェルショックは家族脆弱性...
また、Apache WebサーバーやSSHなどのポート転送やパッチが適用されていない(おそらくパッチが適用されていない)IoTデバイスがある場合は、LANに簡単に影響を与える可能性があることに注意してください。
答え2
コマンド区切り文字は拡張前に処理されるため、変数の\n
、、、または変数の内容を編集しない限り、;
変数には影響しません。&
&&
||
eval
答え3
ワイルドカードが脆弱性のようです。
$ echo 'echo $1' > injection.sh
$ bash injection.sh '/*'
/bin /boot /dev /etc /home /lib /lib64 /media /mnt /opt /proc /root /run /sbin /srv /sys /tmp /usr /var
だからあなたはいつも参照変数:
$ echo 'echo "$1"' > injection.sh
$ bash injection.sh '/*'
/*