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.mzph.cn/bicheng/64391.shtml

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

相关文章

【并发容器】源码级ConcurrentHashMap详解(java78)

1. ConcurrentHashMap 为什么要使用ConcurrentHashmap 在多线程的情况下&#xff0c;使用HashMap是线程不安全的。另外可以使用Hashtable&#xff0c;其是线程安全的&#xff0c;但是Hashtable的运行效率很低&#xff0c;之所以效率低下主要是因为其实现使用了synchronized关…

Redis的基本使用命令(GET,SET,KEYS,EXISTS,DEL,EXPIRE,TTL,TYPE)

目录 SET GET KEYS EXISTS DEL EXPIRE TTL redis中的过期策略是怎么实现的&#xff08;面试&#xff09; 上文介绍reids的安装以及基本概念&#xff0c;本章节主要介绍 Redis的基本使用命令的使用 Redis 是一个基于键值对&#xff08;KEY - VALUE&#xff09;存储的…

基于SpringBoot的乡村信息服务平台的设计与实现

摘 要 乡村信息服务平台的研究背景源于当前乡村振兴战略的实施和信息化技术的快速发展。随着城乡经济差距的逐渐凸显&#xff0c;乡村信息服务平台成为一种新型的信息化手段。本系统采用Java语言&#xff0c;MySQL数据库&#xff0c;采用MVC框架, JS技术开发。乡村信息服务平…

大数据技术与应用——数据可视化(山东省大数据职称考试)

大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 数据可视化 大…

sql中case when若条件重复 执行的顺序

sql case when若条件重复 执行的顺序 在 SQL 中&#xff0c;如果你在 CASE 表达式中定义了多个 WHEN 子句&#xff0c;并且这些条件有重叠&#xff0c;那么 CASE 表达式的执行顺序遵循以下规则&#xff1a; &#xff08;1&#xff09;从上到下&#xff1a;SQL 引擎会按照 CASE …

【并发容器】ConcurrentLinkedQueue:优雅地实现非阻塞式线程安全队列

实现一个线程安全的队列有两 种方式:一种是使用阻塞算法&#xff0c;另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁 (入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现。非阻塞的实现方 式则可以使用循环CAS的方式来实现。 1. 简介 ConcurrentLi…

Flink CDC 读取oracle库数据性能优化

通过综合考虑Oracle数据库配置、Flink作业配置以及其他优化措施&#xff0c;可以显著提升Flink CDC读取Oracle库数据的性能和效率。可以从以下几个方面进行&#xff1a; 一、Oracle数据库配置优化 ‌开启归档日志‌&#xff1a; 通过执行sqlplus /assysdba或sqlplus/nolog命令…

SpringAop-拦截参数带注解的方法

拦截方法中参数类型为String 且带有Crypto注解的方法&#xff1a;execution(* *(..,Crypto (String),..)) 拦截方法中参数上带有Crypto注解的方法&#xff1a;execution(* *(..,Crypto (*),..)) ..&#xff1a;零个或者多个 *&#xff1a;通配符 样例 /*** 针对带有Crypto…

selenium获取请求头

【原创】Selenium获取请求头、响应头-腾讯云开发者社区-腾讯云 selenium 4.0.0 selenium-wire 5.1.0 python 3.10 from seleniumwire import webdriver import time from selenium.webdriver.common.by import By import re def get_request_headers(driver):"""…

【C++移动语义与完美转发】左值右值,引用,引用折叠,移动语义,万能引用与完美转发

前言 nav2系列教材&#xff0c;yolov11部署,系统迁移教程我会放到年后一起更新&#xff0c;最近年末手头事情多&#xff0c;还请大家多多谅解。本期是一个鸽了半年的教程&#xff0c;很早以前我就一直想写一篇文章有关C的移动语义&#xff0c;一直拖到现在()&#xff0c;那么今…

暂停一下,给Next.js项目配置一下ESLint(Next+tailwind项目)

前提 之前开自己的GitHub项目&#xff0c;想着不是团队项目&#xff0c;偷懒没有配置eslint&#xff0c;后面发现还是不行。eslint的存在可以帮助我们规范代码格式&#xff0c;同时 ctrl s保存立即调整代码格式是真的很爽。 除此之外&#xff0c;团队使用eslint也是好处颇多…

iOS 应用的生命周期

Managing your app’s life cycle | Apple Developer Documentation Performance and metrics | Apple Developer Documentation iOS 应用的生命周期状态是理解应用如何在不同状态下运行和管理资源的基础。在 iOS 开发中&#xff0c;应用生命周期管理的是应用从启动到终止的整…

Hadoop学习笔记(包括hadoop3.4.0集群安装)(黑马)

Hadoop学习笔记 0-前置章节-环境准备 0.1 环境介绍 配置环境&#xff1a;hadoop-3.4.0&#xff0c;jdk-8u171-linux-x64 0.2 VMware准备Linux虚拟机 0.2.1主机名、IP、SSH免密登录 1.配置固定IP地址&#xff08;root权限&#xff09; 开启master&#xff0c;修改主机名为…

扩展SpringBoot中的SpringMVC的默认配置

SpringBoot默认已经给我们做了很多SpringMVC的配置&#xff0c;哪些配置&#xff1f; 视图解析器ViewResolver静态资料的目录默认首页index.html图标名字和图标所在目录&#xff0c;favicon.ico类型转换器Converter&#xff0c;格式转换器的Formatter消息转换器HttpMessageCon…

企业内训|阅读行业产品运营实战训练营-某运营商数字娱乐公司

近日&#xff0c;TsingtaoAI公司为某运营商旗下数字娱乐公司组织的“阅读行业产品运营实战训练营”在杭州落下帷幕。此次训练营由TsingtaoAI资深互联网产品专家程靖主持。该公司的业务骨干——来自内容、市场、业务、产品与技术等跨部门核心岗位、拥有8-10年实战经验的中坚力量…

Android Room 数据库使用详解

一、Room介绍 Android Room 是 Google 提供的一个 Android 数据持久化库&#xff0c;是 Android Jetpack 组成部分之一。它提供了一个抽象层&#xff0c;使得 SQLite 数据库的使用更为便捷。通过 Room&#xff0c;开发者可以轻松地操作数据库&#xff0c;不需要直接编写繁琐的…

双目测距中的鼠标操作回调函数

参考&#xff1a;【OpenCV】双目测距&#xff08;双目标定、双目校正和立体匹配&#xff09; /*****描述&#xff1a;鼠标操作回调函数定义*****/ static void onMouse(int event, int x, int y, int, void*) {if (selectObject){selection.x MIN(x, origin.x);selection.y …

Kaggler日志--Day7

进度24/12/17 昨日复盘&#xff1a; 尝试自己爬取了两个学校的就业信息数据&#xff0c;比较简单但是顺通了爬虫流程 看别人的代码&#xff1a;AQX的。 今日进度&#xff1a; 分析理解昨天代码的过程&#xff0c;统计问题 过程理解 EDA部分 对于不同变量类型判别的举例说明…

NDRCContextUnmarshall断点函数分析之I_RpcBindingCopy函数的作用

NDRCContextUnmarshall断点函数分析之I_RpcBindingCopy函数的作用 第一部分&#xff1a; void RPC_ENTRY NDRCContextUnmarshall ( // process returned context OUT NDR_CCONTEXT PAPI *phCContext,// stub context to update IN RPC_BINDING_HANDLE hRPC, …

IS-IS协议

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