命令注入(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

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

RootZY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值