其他分享
首页 > 其他分享> > 命令注入(OS)

命令注入(OS)

作者:互联网

一、OS命令注入

代码注入与命令注入区别:PHP代码注入是具体的语言的代码(如php、Java),命令注入的是系统命令。

原因:

当应用需要调用一些外部程序(系统命令或者exe等可执行文件)时就会用到一些系统命令的函数。应用在调用这些函数执行系统命令的时候,如果将用户的输入做为系统命令的参数拼接到命令行中,在没有过滤用户的输入的情况下,就会造成命令执行漏洞。

1.用户输入作为拼接。

2.没有足够过滤。

危害:

1.继承web服务器程序权限(web用户权限),去执行系统命令。

2.继承web服务器权限,读写文件。

3.反弹shell。服务器主动连接攻击方。

4.控制整个网站。

5.控制整个服务器。

二、相关函数

1.system()

<?php
$str="ipconfig";
system($str);
?>

如果将ipconfig换成变量:

<?php
if($_GET['cmd']){
    $str=$_GET['cmd'];
    system($str);
}
?>

此时在客户端可以通过传参,执行漏洞。(URL路径后面接)命令执行完才在页面显示出来。

?cmd=whoami

2.exec()

输出执行结果,结果内容有限

3.shell_exec()              应用最广泛   

4.passthru()                   自带输出

5.popen

不返回结果,而是返回文件指针。我们关心的是命令执行了。在URL中输入:

>>1.txt     #将执行结果导入文件中看。

6.反引号(1键左边的键)

三、漏洞利用

1.查看系统文件

提交参数

[?cmd=type c:\windows\system32\drivers\etc\hosts]

查看系统hosts文件。

2.显示当前路径

提交参数:

[?cmd=cd]

3.写文件

[?cmd=echo "<?php phpinfo();?>" > D:\xampp\htdocs\Commandi\shell.php]

>  覆盖并建文件   #路径随机 

四、如何避免

1.尽量减少命令执行函数的使用,并在disable_functions  中禁用。

2.在进入命令执行的函数或方法前,对参数过滤。

3.参数的值尽量使用引号包裹,并在拼接前调用addslashes()进行转义。#函数表示返回在预定义的字符之前添加反斜杠的字符串。预定义字符有   (')   (")   (\)   NULL

标签:系统命令,函数,cmd,命令,执行,OS,注入
来源: https://blog.csdn.net/m0_54666999/article/details/120382999