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

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 NTif(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.rhkb.cn/news/491443.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vivado安装System Generator不支持新版Matlab解决方法

目录 前言&#xff1a; Vivado安装System Generator不支持新版Matlab解决方法 前言&#xff1a; 本文介绍一下Vivado不支持新版Matlab的解决办法&#xff0c;Vivado只支持最近两年3个版本的Matlab&#xff0c;当前最新版vivado 2018.3只支持2017a,2017b,2018a。 Vivado安装Sy…

半导体数据分析(二):徒手玩转STDF格式文件 -- 码农切入半导体系列

一、概述 在上一篇文章中&#xff0c;我们一起学习了STDF格式的文件&#xff0c;知道了这是半导体测试数据的标准格式文件。也解释了为什么码农掌握了STDF文件之后&#xff0c;好比掌握了切入半导体行业的金钥匙。 从今天开始&#xff0c;我们一起来一步步地学习如何解构、熟…

#渗透测试#漏洞挖掘#红蓝攻防#SRC漏洞挖掘02之权限漏洞挖掘技巧

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。 权限相关漏洞 越权、未授权访问、oss、后台暴露、…

IS-IS协议

IS-IS协议介绍 IS-IS&#xff08;Intermediate System to Intermediate System&#xff09;协议是一种链路状态的内部网关协议&#xff08;IGP&#xff09;&#xff0c;用于在同一个自治系统&#xff08;Autonomous System, AS&#xff09;内部的路由器之间交换路由信息。IS-I…

4.7 TCP 的流量控制

欢迎大家订阅【计算机网络】学习专栏&#xff0c;开启你的计算机网络学习之旅&#xff01; 文章目录 前言1 滑动窗口与流量控制2 持续计时器与零窗口探测3 控制TCP发送报文段的时机3.1 控制发送时机的三种机制3.2 糊涂窗口综合症 前言 在网络通信中&#xff0c;流量控制是确保…

不良人系列-复兴数据结构(栈和队列)

个人主页&#xff1a;爱编程的小新☆ 不良人经典语录&#xff1a;“相呴相济 玉汝于成 勿念 心安” 目录 一. 栈(stack) 1. 栈的概念 2. 栈的常见方法 3.栈的模拟实现 ​编辑 二. 队列 1. 队列的概念 2. 队列的使用 2.1 队列的常见方法 2.2 队列的模拟实现 2.3 队列…

在clion中使用MySQL的教程

首先就是配置好东西&#xff0c;也是非常简单的&#xff1a; 1.把mysql安装目录&#xff08;其中的lib好像&#xff09;中的2个文件复制到下面就行 2.然后配置&#xff0c;这个文件 cmake_minimum_required(VERSION 3.24) project(2024_12project)include_directories(D:\\mys…

某名校考研自命题C++程序设计——近10年真题汇总(下)

第二期&#xff0c;相比上一贴本帖的题目难度更高一些&#xff0c;我当然不会告诉你我先挑简单的写~ 某名校考研自命题C程序设计——近10年真题汇总&#xff08;上&#xff09;-CSDN博客文章浏览阅读651次&#xff0c;点赞9次&#xff0c;收藏13次。本帖更新一些某校的编程真题…

探讨不同类型的自动化测试框架

以下为作者观点&#xff1a; 在自动化测试中&#xff0c;框架提供了一种组织和执行测试案例的结构化方式。它们提供了一套准则和最佳实践&#xff0c;使测试人员能够编写可重复使用、可维护和可扩展的测试脚本。在这篇文章中&#xff0c;我们将讨论自动化测试中不同类型的框架…

C# 网络编程--关于Socket编程TCP协议中封包、拆包问题

在使用 Socket 编程&#xff0c;进行TCP协议网络通信时&#xff0c;经常会遇到“粘包”&#xff08;也称为“封包、拆包”&#xff09;的问题。粘包是指发送方发送的多个数据包被接收方合并成一个数据包&#xff0c;或者一个数据包被拆分成多个数据包接收。这通常是由于 TCP协议…

HarmonyOS:@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

装饰器仅能观察到第一层的变化&#xff0c;但是在实际应用开发中&#xff0c;应用会根据开发需要&#xff0c;封装自己的数据模型。对于多层嵌套的情况&#xff0c;比如二维数组&#xff0c;或者数组项class&#xff0c;或者class的属性是class&#xff0c;他们的第二层的属性变…

Excel拆分脚本

Excel拆分 工作表按行拆分为工作薄 工作表按行拆分为工作薄 打开要拆分的Excel文件&#xff0c;使用快捷键&#xff08;AltF11&#xff09;打开脚本界面&#xff0c;选择要拆分的sheet&#xff0c;打开Module&#xff0c;在Module中输入脚本代码&#xff0c;然后运行脚本 Su…

【机器人】Graspness 端到端 抓取点估计 | 论文解读

在复杂场景中实现抓取检测&#xff0c;Graspness是一种端到端的方法&#xff1b; 输入点云数据&#xff0c;输出抓取角度、抓取深度、夹具宽度等信息。 开源地址&#xff1a;GitHub - rhett-chen/graspness_implementation: My implementation of Graspnet Graspness. 论文地…

盛元广通畜牧与水产品检验技术研究所LIMS系统

一、系统概述 盛元广通畜牧与水产品检验技术研究所LIMS系统集成了检测流程管理、样品管理、仪器设备管理、质量控制、数据记录与分析、合规性管理等功能于一体&#xff0c;能够帮助实验室实现全流程的数字化管理。在水产、畜牧产品的质检实验室中&#xff0c;LIMS系统通过引入…

kubeadm安装K8s高可用集群之集群初始化及master/node节点加入calico网络插件安装

系列文章目录 1.kubeadm安装K8s高可用集群之基础环境配置 2.kubeadm安装K8s集群之高可用组件keepalivednginx及kubeadm部署 3.kubeadm安装K8s高可用集群之集群初始化及master/node节点加入集群calico网络插件安装 kubeadm安装K8s高可用集群之集群初始化及master/node节点加入ca…

【机器学习】以机器学习为翼,翱翔网络安全创新苍穹

我的个人主页 我的领域&#xff1a;人工智能篇&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;&#x1f44d;点赞 收藏❤ 在数字化浪潮汹涌澎湃的当下&#xff0c;网络安全如同守护数字世界的坚固堡垒&#xff0c;其重要性不言而喻。而机器学习技术的蓬勃…

go引用包生成不了vendor的问题

比如我要引入github.com/jinzhu/gorm这个包. 1. 首先获取包 go get github.com/jinzhu/gorm 这时go.mod文件中也有这个包依赖信息了. 2. 然后构建vendor go mod vendor 结果发现vendor目录下没有生成对应的包, 而且modules.txt也注释掉这个包了. 原因是没有其进行引用, go…

多模块的spring boot项目发布指定模块的脚本

我有一个多模块的Spring Boot项目&#xff0c;里面有基础模块&#xff0c;有业务模块&#xff0c;业务模块依赖一些基础模块。发布的时候&#xff0c;如果单独将某个模块发布&#xff0c;一般会报错。所以我都是整个项目&#xff0c;无论多少个模块&#xff0c;不管3721&#x…

fabric.js

目录 一、在canvas上画简单的图形 二、在canvas上用路径(Path)画不规则图形 三、在canvas上插入图片并设置旋转属性(angle) 四、让元素动起来(animate) 五、图像过滤器(filters)让图片多姿多彩 六、颜色模式(Color)和相互转换(toRgb、toHex) 七、对图形的渐变填充(Gradi…

23. 合并 K 个升序链表(java)

题目描述&#xff1a; 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到一个升序链表中&#xff0c;返回合并后的链表。 示例 1&#xff1a; 输入&#xff1a;lists [[1,4,5],[1,3,4],[2,6]] 输出&#xff1a;[1,1,2,3,4,4,5,6] 解释&#xff…