#命令注入攻击(Command Injection)
黑客利用HTML 代码输入机制中的缺陷
修改网页上动态生成的内容(例如没有有效验证约束的表单字段)。
这允许您使用系统命令操作来实现构造命令以使用远程数据执行的操作。
登录后复制
PHP 允许您使用四个函数运行外部应用程序或函数:
系统,
高管,
通过,
shell_exec,
这四个函数的原型是:
1.2.3.4.5.6。
string system(string command, int return_var)
命令要运行的命令。
return_var 存储命令执行后的状态值。
string exec(字符串命令,数组输出,int return_var)
命令要执行的命令,
Output 执行命令并获取每一行字符串输出。
return_var 存储命令执行后的状态值。
void passthru(字符串命令,int return_var)
命令要执行的命令,
return_var 存储命令执行后的状态值。
string shell_exec(字符串命令)
命令要执行的命令,
如下例所示:
通过发送http://www.sectop.com/ex1.php?dir=|
执行命令为system(\”ls -al | cat /etc/passwd\”),
打印/etc/passwd 文件的特定内容。
登录后复制
//ex1.php
?php
$dir=$_GET[\’dir\’];
如果(isset($dir))
{
回声\’\’;
系统(\’ls -al \’.$dir);
回声\’\’;
}
?
1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19。
服务器配置:apache+php+Mysql;
实验URL (http://10.1.1.11:81)
#使远程服务器执行“whoami”的命令#
该程序获取GET参数ip,将其绑定到system()函数,并使用system()函数执行ping函数。
但这里参数ip没有被过滤,没有被检测到。
因此,您可以使用管道字符来执行其他系统命令。
Windows 中的“|”表示将前一个结果视为下一个输入。
尝试使用ip=127.0.0.1|whoami
以下命令运行成功,ID为system。
在Windows 中,“”表示同时运行两个命令,先运行前一个命令,然后运行最后一个命令。
让我们尝试使用ip=127.0.0.1whoami
原因是ulr中“”是连接符号,被转义为“%26”。
然后,如果直接使用“%26”,它将转义为实际的“”。
因此您也可以使用ip=127.0.0.1%26whoami 重试。 Windows 中的“||”表示如果前一次运行失败,则执行下一次运行。
尝试使用ip=127.0.0.1||whoami
前面的命令是成功的,所以这次没有执行whoami命令。
它只是使前一个命令无法执行并允许下一个命令自动运行。
根据前面提供的关键代码,只要传递一个正常的IP地址即可;
命令(ping) 运行正常,因此我尝试删除IP 地址。
尝试使用ip=||whoami
#使远程服务器执行ipconfig命令#
preg_match() 函数用于正则表达式匹配。
如果成功则返回1,否则返回0。
preg_match() 在一次成功匹配后停止匹配。
如果你想匹配所有结果,你应该使用preg_match_all() 函数。
header()函数的功能如下:
将原始HTTP 标头[Http Header] 发送到客户端。
标头是服务器在使用HTTP 协议将HTML 数据发送到浏览器之前发送的字符串。
标头和HTML 文件之间需要有一个空行。
该代码只是过滤IP 地址,如果匹配则执行下面的系统命令。
如果它们不匹配,您将无法运行下一个命令(即ping)。
首先想到的是引发错误并导致执行失败。
使用双管道运行ipconfig。接下来,尝试使用ip=127。 ||ipconfig:尝试使用单个管道(ip=127.0.0.1|ipconfig)。使用“%26”(ip=127.0.0.1)。 0.1%26ipconfig)尝试:
通过ping命令返回结果中的TTL项可以判断服务器的操作系统。
Linux——64
WIN2K/NT——128
WINDOWS系列——32
UNIX系列——255(前面是操作系统,后面是TTL值)
通过ping返回结果,查看TTL值最接近哪一项以及服务器是什么操作系统。由于TTL值为52,因此TTL值与64之间有12条路由,因此服务器必须是LINUX。
接下来,添加一些常用的管道字符。
Windows 系统支持的管道字符有:
“|”:直接执行下一条语句。
“||”:如果前一条语句失败,则执行下一条语句。先前的说法只是错误的。
\”\”:两个命令都执行。如果上一条语句为假,则直接执行下一条语句。前面的陈述可以是正确的,也可以是错误的。
\”\”:如果上一条语句为假,则直接出错,不执行下一条语句。如果前一个语句为true,则两个命令都会执行,并且只有前一个语句为true。
Linux 系统支持的管道字符有:
“;”:执行完上一条语句后,执行下一条语句。
“|”:显示后面语句的执行结果。
“||”:如果执行上一条语句时发生错误,则执行下一条语句。
\”\”:两个命令都被执行。如果前一条语句为假,则执行下一条语句。前面的陈述可以是正确的,也可以是错误的。
\”\”:如果上一条语句为假,则直接出错,不执行下一条语句。如果前一个语句为true,则两个命令都会执行,并且只有前一个语句为true。
#入侵原理——以上有关PHP命令注入攻击的相关内容均来自网络,仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92640.html