In diesem Artikel werden hauptsächlich Befehlsangriffe als gängige Angriffsmethoden auf PHP-Websites vorgestellt. Unter Command Injection versteht man eine Angriffsmethode, bei der Hacker den dynamisch generierten Inhalt einer Webseite ändern, indem sie HTML-Code in einen Eingabemechanismus eingeben (z. B. ein Formularfeld, das keine wirksamen Validierungsbeschränkungen aufweist). Die Verwendung von Systembefehlen ist ein gefährlicher Vorgang, insbesondere wenn Sie versuchen, Remote-Daten zum Erstellen des auszuführenden Befehls zu verwenden. Bei Verwendung kontaminierter Daten entstehen Command-Injection-Schwachstellen.
Command-Injection-Angriff
Die folgenden 5 Funktionen können in PHP zur Ausführung verwendet werden externe Anwendung oder Funktion
System, Exec, Passthru, Shell_exec, "(gleiche Funktion wie Shell_exec)
Funktionsprototyp
Stringsystem (string command, int &return_var)
command Der auszuführende Befehl
return_var speichert den Statuswert nach Ausführung des ausgeführten Befehls
string exec ( string command, array &output, int &return_var)
command Der auszuführende Befehl
Output Holen Sie sich jede Zeile der String-Ausgabe, indem Sie den Befehl ausführen
return_var speichert der ausgeführte Befehl Der Statuswert
void passhru (string command, int &return_var)
command Der auszuführende Befehl
return_var speichert den Statuswert nach der Ausführung des Befehls
string shell_exec (string command)
Befehl Befehl zum Ausführen
漏洞实例
例1:
//ex1.php $dir = $_GET["dir"]; if (isset($dir)) { echo ""; system("ls -al ".$dir); echo ""; } ?>
我们提交http://www.sectop.com/ex1.php?dir=| cat /etc/passwd
提交以后,命令变成了 system("ls -al | cat /etc/passwd");
eval注入攻击
eval函数将输入的字符串参数当作PHP程序代码来执行
函数原型:
mixed eval(string code_str) //eval注入一般发生在攻击者能控制输入的字符串的时候
//ex2.php $var = "var"; if (isset($_GET["arg"])) { $arg = $_GET["arg"]; eval("\$var = $arg;"); echo "\$var =".$var; } ?>
当我们提交http://www.sectop.com/ex2.php?arg=phpinfo();漏洞就产生了;
动态函数
php func A() { dosomething(); } func B() { dosomething(); } if (isset($_GET["func"])) { $myfunc = $_GET["func"]; echo $myfunc(); } ?>
程序员原意是想动态调用A和B函数,那我们提交http://www.sectop.com/ex.php?func=phpinfo漏洞产生
防范方法
1、尽量不要执行外部命令
2、使用自定义函数或函数库来替代外部命令的功能
3、使用escapeshellarg函数来处理命令参数
4. Verwenden Sie „safe_mode_exec_dir“, um den Pfad der ausführbaren Datei anzugeben.
Die Funktion esacpeshellarg maskiert alle Zeichen, die das Ende von Parametern oder Befehlen verursachen, und ersetzt sie durch „'“, doppelte Anführungszeichen Setzen Sie „“ in Anführungszeichen, ersetzen Sie es durch „““ und ersetzen Sie das Semikolon „;“ durch „;“
Verwenden Sie „safe_mode_exec_dir“, um den Pfad der ausführbaren Datei anzugeben Pfad im Voraus
safe_mode = On
safe_mode_exec_dir = /usr/local/php/bin/
Das obige ist der detaillierte Inhalt vonAusführliche Erklärung der Angriffsmethoden auf PHP-Websites – Befehlsinjektionsangriff. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!