命令注入(OS)

Posted 兔子长虎牙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了命令注入(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

以上是关于命令注入(OS)的主要内容,如果未能解决你的问题,请参考以下文章

以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?

代码注入

WEB安全番外第五篇--关于使用通配符进行OS命令注入绕WAF

injection

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段

初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段