PHP代码审计学习(一)--命令注入

news2024/12/18 20:39:59

1、漏洞原理

参数用户可控,程序将用户可控的恶意参数通过php可执行命令的函数中运行导致。

2、示例代码

<?php
echo'rec-test';
$command = 'ping -c 1 '.$_GET['ip'];
system($command); //system函数特性 执行结果会自动打印
?>

通过示例代码可知通过system函数执行ping命令,用户可通过控制参数ip传入域名或者是ip进行测试。

3、漏洞测试

那么攻击者可通过这个功能进行其他危险测试;

由于ip参数没有任何过滤限制;在审计时遇到输入可控时排查是否存在过滤是否能绕过;要检查是否存在escapeshellarg  escapeshellcmd 函数转义 或者是其他的处理方法(如 强制类型转换 替换字符 等)

4、常见绕过手段

符号

描述

示例

<和>

输入输出重定向

echo abc >1.txt

;分号

按照从左到右顺序执行命令

id;whoami;ls

| 管道符

将左侧命令的输出作为右侧命令的输入

ps -aux|grep root

&&

按照从左到右顺序执行命令 只有执行成功才执行后面的语句

||

按照从左到右顺序执行命令 只有执行失败才执行后面的语句

错误ip || whoami

5、常见可执行命令的函数

函数/语法

描述

例子

system

执行命令并输出结果

system('id');

exec

执行命令 只可获取最后一行结果

exec('id',$a); print_r($a);

passthru

同 system

passthru('id');

shell_exec ` (反引号)

执行命令并返回结果

$a=shell_exec('id');print_r($a); $a=`id`;print_r($a);

popen

执行命令并建立管道 返回一个指针 使用fread等函数操作指针进行读写

$a=popen("id", "r"); echo fread($a, 2096);

proc_open

同 popen (进程控制功能更强大)

见PHP手册

pcntl_exec

执行命令 只返回是否发生错误

pcntl_exec('id');

exec函数示例:

该函数无回显需使用echo或var_dump进行输出,且只返回执行后的最后一行结果。

shell_exec()函数``反引号函数,同exec一样不在示例。(均为无回显)

<?php
$sys = $_REQUEST['cmd'];
$cmder = exec($sys);
echo $cmder;
?>

system函数示例:

该函数会将输入的参数当做命令执行,有回显且返回所有内容。在实战中也是最常见的造成命令执行漏洞的函数之一。
注意:如果目标是LInux则执行Bash命令,如果是Windows则执行cmd命令。

passthru()函数同system一样有回显

<?php
$sys = $_REQUEST['cmd'];
$cmder = system($sys);
?>

popen()函数示例:

该函数通常用于打开进程文件指针,但如果传入的参数可控也可造成命令执行,且该函数无回显,通过echo不会直接返回执行的结果,而是返回的是文件指针。

proc_open()

执行一个命令,并且打开用来输入/输出的文件指针。类似popen()函数,但是proc_open()所需参
数更多,且处理数据能力更强

<?php
$sys = $_REQUEST['value'];
$cmd = popen($sys,'r');
var_dump($cmd); ;
?>

rce代码示例:

ping.html

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="utf-8" />
    <title>系统命令执行demo</title>
</head>
<body>
<div id="main">
    <div class="title">Ping功能测试</div>
    <form action="rce.php" method="post" onsubmit="return enter()">
        <label><input class="text" type="text" placeholder="请输入IP地址" name="ip"/>            
        </label>
        <label><input class="submit" type="submit" name="submit" value="测试" />
        </label>
    </form>
</div>
</body>
</html>

rce.php代码示例:

<?php
header("content-type:text/html;charset=utf-8");
if(isset($_POST['submit'])){
    $target = $_REQUEST['ip'];
//php_uname()判断当前操作系统是否为Windows NT
    if(stristr(php_uname('s'),'Windows NT')){
        $cmd = shell_exec('ping '.$target);
        echo '<pre>'.$cmd.'<pre>';//shell_exec无回显需echo输出
    }else{
        $cmd = shell_exec('ping -c 3 '.$target);
        echo '<pre>'.$cmd.'<pre>';//shell_exec无回显需echo输出
    }
}

php_uname()函数使用:

<?php
// 获取完整的系统信息
echo php_uname(); // 相当于 php_uname("a")
// 获取操作系统名称
echo php_uname("s");
// 获取主机名
echo php_uname("n");
// 获取操作系统版本号
echo php_uname("r");
// 获取操作系统详细版本信息
echo php_uname("v");
// 获取机器硬件架构
echo php_uname("m");
?>

6、总结

在PHP中还有很多函数可以造成命令执行,但在代码审计中常见的命令执行危险函数已经给大家列出,PHP代码审计中只要多留意这些函数且该函数的参数是可以被我们所控制,这是命令执行漏洞存在的关键。其实命令执行和代码执行都是一样的,命令执行可以通过调用代码执行的函数实现代码执行,代码执行也可以通过调用命令执行的函数来实现命令执行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2261781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CTFHub-ssrf

技能树--Web--SSRF 内网访问 开启题目 尝试访问位于127.0.0.1的flag.php吧 进入环境 根据提示输入即可 127.0.0.1/flag.php 伪协议读取文件 开启题目 尝试去读取一下Web目录下的flag.php吧 进入环境&#xff0c;根据提示输入 file:///var/www/html/flag.php 鼠标右键查看…

Stable Diffusion Controlnet常用控制类型解析与实战课程 4

本节内容&#xff0c;是stable diffusion Controlnet常用控制类型解析与实战的第四节课程。上节课程&#xff0c;我们陆续讲解了几个与图像风格约束相关的控制类型&#xff0c;本节课程我们再学习一些实用价值较高的控制类型&#xff0c;看一看他们提供了哪些控制思路。 一&…

DC-8笔记

靶机信息 官网地址:DC: 8 ~ VulnHub DC-8 is another purposely built vulnerable lab with the intent of gaining experience in the world of penetration testing.This challenge is a bit of a hybrid between being an actual challenge, and being a "proof of c…

购物商城案例 1-- VueCli创建项目,调整目录,vant组件库

基于VueCli创建项目 调整目录&#xff0c;新增两个目录 修改路由和App.vue 路由中规则清空 新建文件夹api和utils api文件夹&#xff1a;发请求的一些文件 utils文件夹&#xff1a;工具函数方法 vant组件库&#xff1a;第三方vue组件库 vant-ui 找到vant官网&#xff0c;进入va…

npm : 无法加载文件 D:\nodejs\npm.ps1

问题描述 npm run serve 启动一个Vue项目&#xff0c;报错如下&#xff1a; npm : 无法加载文件 D:\nodejs\npm.ps1&#xff0c;因为在此系统上禁止运行脚本。有关详细信息&#xff0c;请参阅 https:/go.microsoft.com/fwlink/? LinkID135170 中的 about_Execution_Policies。…

12.17双向链表,循环链表

循环单向链表 1.头文件test.h #ifndef __TEST_H_ #define __TEST_H_#include<stdio.h> #include<stdlib.h>typedef struct node {union{int len;int data;};struct node *next; }looplink,*looplinkPtr;//创建 looplinkPtr create();//判空 int empty(); //申请…

【多模态】MiniCPM-V多模态大模型使用学习

MiniCPM-V模型使用 前言1. 模型文件下载和选择2. 环境安装配置3. 模型微调3.1 qlora微调minicpm-v-int43.2 lora微调minicpm-v3.3 merge_lora3.4 lora微调后量化int4 4. 模型推理4.1 huggingface API4.2 swift API(A) swift&#xff08;不支持batch inference&#xff09;(B) s…

VMware ubuntu12.04怎么设置静态IP联网

记得刚开始学习嵌入式就是从ubuntu12.04的环境开始学习的C语言&#xff0c;当时没有弄清楚怎么设置静态IP联网&#xff0c;现在写一篇文章。 1.首先&#xff0c;关闭ubuntu的网络&#xff1b; 2.电脑使用的是wifi,将VMware桥接到该网卡上&#xff1b; 3.在虚拟机设置里面选择桥…

vs 调试

常用&#xff1a; 调试->窗口-> 断点 监视 自动窗口 局部变量 调用堆栈 内存 反汇编&#xff08;也可以右键&#xff0c;转到反汇编&#xff09; 寄存器 快捷键&#xff1a; F5:启用调试&#xff0c;经常用来跳到下一个断点处 F9创建断点和取消断点。断点的重要作用&…

从构想到实现:EasyOne 多模态 AI 产品开发历程

在人工智能技术飞速发展的今天&#xff0c;智能产品和服务已经从单一的应用向多模态智能系统进化。随着大语言模型、计算机视觉、语音识别等领域的突破&#xff0c;开发集成多种 AI 技术的平台变得日益重要。为此&#xff0c;我们开发了 EasyOne&#xff0c;一个全新的 AI 多模…

游戏引擎学习第43天

仓库 https://gitee.com/mrxiao_com/2d_game 介绍运动方程 今天我们将更进一步&#xff0c;探索运动方程&#xff0c;了解真实世界中的物理&#xff0c;并调整它们&#xff0c;以创建一种让玩家感觉愉悦的控制体验。这并不是在做一个完美的物理模拟&#xff0c;而是找到最有趣…

【已解决】启动此实时调试器时未使用必需的安全权限。要调试该进程,必须以管理员身份运行此实时调试器。是否调试该进程?

【已解决】启动此实时调试器时未使用必需的安全权限。要调试该进程&#xff0c;必须以管理员身份运行此实时调试器。是否调试该进程? 目录一、前言二、具体原因三、解决方法 目录 报错截图 一、前言 进行应用程序开发时&#xff0c;需要对w3wp进行附加调试等场景&#xff…

idea无法识别文件,如何把floder文件恢复成model

前景&#xff1a; 昨天&#xff0c;我在之前的A1214模块包下新增了一个demo类&#xff0c;然后又新建了一个A1216模块&#xff0c;写了算法题&#xff0c;后面打算用git提交&#xff0c;发现之前的A1214模块下的demo类和新建的模块源文件都已经被追踪了&#xff0c;都是绿色的&…

2024三掌柜赠书活动第三十六期:深度学习高手笔记系列

目录 前言 理解深度学习基础 数据预处理技巧 关于《深度学习高手笔记》 编辑推荐 内容简介 作者简介 图书目录 媒体评论 《深度学习高手笔记》全书速览 结束语 前言 不用多讲&#xff0c;近两年的技术圈关于AI相关的技术讨论层出不穷&#xff0c;而深度学习作为人工…

【技术干货】移动SDK安全风险及应对策略

移动SDK&#xff08;软件开发工具包&#xff09;已经成为应用开发中不可或缺的一部分。通过SDK&#xff0c;开发者能够快速集成分析、广告调度、音视频处理、社交功能和用户身份验证等常见功能&#xff0c;而无需从零开始构建。这不仅能节省时间和资源&#xff0c;还能提高开发…

【一文概述】常见的几种内外网数据交换方案介绍

一、内外网数据交换的核心需求 内外网数据交换的需求核心在于“安全、效率、合规”&#xff0c;而应用场景的多样性使得不同企业需要定制化的解决方案。通过结合业务特性和安全等级要求&#xff0c;企业能够选择适合的技术方案来实现高效、安全的内外网数据交换。 1、数据安全…

【Linux 篇】Docker 容器星河与镜像灯塔:Linux 系统下解锁应用部署奇幻征程

文章目录 【Linux 篇】Docker 容器星河与镜像灯塔&#xff1a;Linux 系统下解锁应用部署奇幻征程前言一 、docker上部署mysql1. 拉取mysql镜像2. 创建容器3. 远程登录mysql 二 、docker上部署nginx1. 拉取nginx镜像2. 在dockerTar目录下 上传nginx.tar rz命令3. 创建nginx容器4…

Pytorch | 从零构建Vgg对CIFAR10进行分类

Pytorch | 从零构建Vgg对CIFAR10进行分类 CIFAR10数据集Vgg网络结构特点性能应用影响 Vgg结构代码详解结构代码代码详解特征提取层 _make_layers前向传播 forward 训练和测试训练代码train.py测试代码test.py训练过程和测试结果 代码汇总vgg.pytrain.pytest.py 前面文章我们构建…

实战 | 某院校小程序记录

更多大厂面试经验的视频分享看主页和专栏 目录&#xff1a; 前言&#xff1a; 渗透思路 1.绕过前端 2.信息泄露 3.爆破用户账号密码 4.信息泄露2 结束 前言&#xff1a; 遇到一个学校小程序的站点&#xff0c;只在前端登录口做了校验&#xff0c;后端没有任何校验&#x…

k8s kubernetes

文章目录 CGroupk8s运行时k8s组件k8s组件安装kubeadm命令kubectl命令k8s官网代码 CGroup 在 Linux 上&#xff0c;控制组&#xff08;CGroup&#xff09;用于限制分配给进程的资源。kubelet 和底层容器运行时都需要对接控制组来强制执行 为 Pod 和容器管理资源 并为诸如 CPU、…