héroe bg sin separador
Directrices

インジェクション 101

最もよく知られている脆弱性のクラスの 1 つは、インジェクションの脆弱性です。特に、誰もが疑う余地のない存在である SQL インジェクションは、誰も驚かないでしょう。テクノロジーの世界で SQL インジェクションについて耳にするのは避けられないので、ここではそのことについて話すことにします。

SQL インジェクションを使用すると、SQL クエリの動作を操作して攻撃者の命令を実行することができます。

表面的には異なりますが、すべて同じ原理に基づいて機能する注入タイプは他にもたくさんあります。

要約すると、最も一般的な注入タイプのいくつかは次のとおりです。

  • Inyección SQL
  • クロスサイトスクリプティング (HTML/JavaScript インジェクション)
  • パストラバーサル (パス/URL インジェクション)
  • コマンド・インジェクション
  • コード・インジェクション

ア・リトル・インジェクション 101

前述のインジェクションタイプのリストを見ると、すべて共通点が1つあります。それらはすべて文字列に関係し、それがインタープリターを介して実行され、インタープリターが文字列が表すすべての処理を行います。「ユーザー入力」は中括弧で囲んでいます。

Tipo Ejemplo de entrada Cómo se interpreta
SQL SELECT nombre FROM usuarios WHERE nombre de usuario = '{admin}' Selecciona la columna "Nombre" de todas las filas de la tabla de usuarios en las que el nombre de usuario es 'admin'.
HTML {John Smith} Muestra el nombre "John Smith" en negrita
Ruta /var/www/app/documents/{privacy-policy.pdf} Señala el archivo `privacy-policy.pdf` en la carpeta `/var/www/app/documents/`.
Comando ping {8.8.8.8} Envía una serie de pings ICMP a la IP `8.8.8.8`.
Código const name = '{John Smith}'; Establece la variable constante `nombre` al valor `John Smith

では、ユーザー入力の挿入が安全でない場合はどうなるでしょうか。攻撃者には何ができるでしょうか?繰り返しになりますが、このシナリオでは、中括弧内のものはすべて「ユーザー入力」と見なされます。

Tipo Ejemplo de entrada Cómo se interpreta
SQL - Inyectado SELECT name FROM users WHERE username = '{1' UNION SELECT passwordhash from users WHERE username = 'admin}' Selecciona el "Nombre" de todas las filas de la tabla de usuarios donde el nombre de usuario es 'admin', y el hash de la contraseña de los usuarios donde el nombre de usuario es 'admin'.
HTML - Inyectado {} Mostrar el nombre "John Smith" en negrita
Trayectoria - Inyectado /var/www/app/documents/{../../../../../etc/shadow} Apunta al archivo `shadow` en la carpeta `/etc/`.
Mando - Inyectado ping {8.8.8.8 && ls . } Envía una serie de pings ICMP a la IP `8.8.8.8`, e imprime el contenido del directorio actual con `ls`.
Código - Inyectado const name = '{John Smith'; exec('ls .'); # }'; Establece la variable constante `nombre` con el valor `John Smith` y, a continuación, ejecuta el comando del sistema `ls .

これらの例では、入力がどのようにユーザー入力の結果に影響を与えることができるかに注意してください。

これが注射の本質です。元のプログラマーが意図していたこととは違うことを実行させるために、インタープリターに渡される内容に影響を及ぼしているのです。

これらは考慮すべき基本事項にすぎません。もう少し注意が必要なため、いくつかの異なるインジェクションタイプを個別のページに分けました。

ここで見つけることができます:

コマンド・インジェクション

パストラバーサル

SQL インジェクション

クロスサイトスクリプティング