SQLスタイルの注入にbash入力を使用しますか?

SQLスタイルの注入にbash入力を使用しますか?

誰でも入力を提供できるスクリプトが提供されます。変数から抜け出すことができる入力はありますか?たとえば、次のスクリプトが提供されます。

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 バージョンに影響を及ぼし、簡単に作成された脆弱性が広く実証され、パッチが適用されました。

追加資料:

OWASPシェルショックプレゼンテーション、PDF

NIST CVE-2014-6278

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 '/*'
/*

関連情報