当前位置:网站首页>web漏洞之远程命令/代码执行
web漏洞之远程命令/代码执行
2022-08-03 14:51:00 【一青一柠】
RCE(remote command/code execute)概述
RCE漏洞,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统。
远程系统命令执行
一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口
而如果设计者在完成该功能时,没有做严格的安全控制,则可能会导致攻击者通过该接口提交“意想不到”的命令,从而让后台进行执行,从而控制整个后台服务器
现在很多的甲方企业都开始实施自动化运维,大量的系统操作会通过"自动化运维平台"进行操作。
在这种平台上往往会出现远程系统命令执行的漏洞。
远程代码执行
同样的道理,因为需求设计,后台有时候也会把用户的输入作为代码的一部分进行执行,也就造成了远程代码执行漏洞。
不管是使用了代码执行的函数,还是使用了不安全的反序列化等等。
因此,如果需要给前端用户提供操作类的API接口,一定需要对接口输入的内容进行严格的判断,比如实施严格的白名单策略会是一个比较好的方法。
1. 管道符号与通用命令符
Linux
;前面的执行完执行后面的
|是管道符,显示后面的执行结果
||当前面的执行出错时执行后面的
Windows
& 前面的语句为假则直接执行后面的
&& 前面的语句为假则直接出错,后面的也不执行
| 直接执行后面的语句
|| 前面出错执行后面的
command1 && command2 command1执行成功才执行command2
command1 | command2 只执行command2
command1 & command2 command1和command2之间互相不影响
2. 远程命令执行
常见命令执行函数;
eval()
assert()
preg_replace()
call_user_func()
$a($b)
实例1
<?php
$var = "var" ;
if(isset($_GET[ 'arg ' ])){
$arg = $_GET [ 'arg ' ];
eval( " \$var = $arg; " );//''的作用是让它识别成字符,不识别成变量
echo "\$var =".$var;
//或者直接 eval($_GET['a']);
?>
这里用get提交的参数就会被当作php代码执行,比如 phpinfo()。
实例2
<?php
if(isset($_GET[ 'a'])){
assert($_GET[ "a ']); } else{ echo "Please input a";
}
?>
这个例子和上面那个eval是一样的用法。
实例3
?php
if(isset($__GET['a' ])){
//Preg_replace("/[(.*)\]/e", '\\1',$_GET[ 'a ']);
Preg_replace("/ (.*)/e", '\\1’,$_GET['a']);
}
else{
echo "Please input a";
}
?>
"/e”修饰符时,$replacement的值会被当成php代码来执行。
.* 是正则的意思,就是匹配所有内容。
总之,get的那个参数就是当php代码执行的。
实例4
<?php
if(isset($_GET[ 'a'])){
cal1_user_func($_GET['a'],$_GET['b']);
}
else{
echo "Please input a";
}
?>
a相当于函数名,b相当于函数参数。
实例5
< ?php
if(isset($_GET['a' ])&isset($_GET[ 'b '])){
@$a = $_GET[ 'a' ];
@$b = $_GET["b']; @$a($b);//函数,可变函数 //$a就是函数的名 //$b就是函数的值 // ?a=assert&b=phpinfo() // assert(phpinfo( )); else{ echo "Please input a&b";
}
?>
3. 系统命令执行
常用函数
system()
exec()
shell_exec()
passthru()
popen()
反引号
实例1
<?php
if(isset($_GET['a'])){
system($_GET['a']);
}
else{
echo "Please input a";
}
?>
实例2
?php
if(isset($_GET['a'])){
echo exec($_GET['a']);
}
else{
echo "Please input a";
}
?>
注意:这里 exec 函数对比 system 函数来看,exec 函数是要输出的,要加上 echo 。
实例3
<?php
if(isset($_GET['a'])){
echo shell_exec($_GET['a']);
}
else{
echo "Please input a";
}
?
这个也是要加 echo 。
实例4
<?php
if(isset($_GET[ 'a' ])){
passthru($_GET['a']);
}
else{
echo "Please input a";
}
?>
这里不用加 echo 。
实例5
<?php
if(isset($_GET['a'])){
popen( "whoami >>1.txt" , 'r');
}else{
echo "Please input a";
}
?>
实例6
k?php
if(isset($__GET['a'])){
echo `whoami`;
else{
echo "Please input a";
}
?>
反引号,就是键盘 tab 上面那个东西。
应用
?a=type c:\windows[system32\drivers\etc\hosts 查看文件
?a=cd 查看当前绝对路径
?a=echo "<?php phpinfo();?>" > E:\xampp\htdocsphplos\phpinfo.php 还可以写shell
边栏推荐
- ubiquant量化竞赛
- Currency ATM: Solana Wallet Has Unknown Security Vulnerability, A Large Number Of Users' Digital Assets Are Stolen
- 程序员面试必备PHP基础面试题 – 第十九天
- Taurus.MVC WebAPI 入门开发教程1:框架下载环境配置与运行(含系列目录)。
- 身为程序员的我们如何卷死别人?破局重生。
- 大势,又一关乎中美竞争的关键行业,走到关键时刻了
- SQL 不新增表 把一张表定义成两张
- 问题10:注册页面的易用性测试?
- PostgreSQL V14中更好的SQL函数
- 树莓派 USB摄像头 实现网络监控( MJPG-Streamer)
猜你喜欢
随机推荐
想成为网络安全技术爱好者(可能是黑客)的话,需要看什么书?
UE4 解决C盘缓存问题
高等数学(第七版)同济大学 习题4-1 个人解答
HDU 1160 FatMouse's Speed(最长递减子序列变形)
【问题】使用pip安装第三方库的时候遇到“timeout”的解决方法
交大医学院临床研究中心如何将 ModelWhale 应用于临床医生教学、研究丨数据科学 x 临床医学
王守创:多组学整合分析揭示植物代谢多样性的分子机制(8月2号晚)
程序员面试必备PHP基础面试题 – 第十八天
NFT盲盒挖矿DAO智能合约dapp系统开发详情
System learning Shell regular expressions
程序员面试必备PHP基础面试题 – 第十九天
手摸手带你完成智慧路灯构建及避坑【华为云至简致远】
2022-08-03日报:汪林望 vs 刘铁岩:AI、机器学习在材料科学研究中能发挥哪些作用?
【FPGA教程案例44】图像案例4——基于FPGA的图像中值滤波verilog实现,通过MATLAB进行辅助验证
Day2:面试必考题目
一个在浏览器中看到的透视Cell实现
2022年镇海夏令营组合数学和数论班 —— 数学作业 1
MATLAB中writetimetable函数用法
地球自转加快
有希望就是好的