当前位置:网站首页>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
边栏推荐
- PAT乙级-B1014 福尔摩斯的约会(20)
- Linux安装Mysql的几种方法
- 【报错】import cv2 as cv ModuleNotFoundError: No module named ‘cv2
- 问题8:对朋友圈进行用例设计
- JS每晚24:00更新某方法
- 正则表达式入门二(普通字符)
- PAT乙级-B1015 德才论(25)
- 20220801使用安信可的ESP-01S模块实现WIFI的UART传输功能
- Top 10 free proxy IP software_Domestic static IP proxy software
- Clickhouse Filling the Pit 3: Left Join changed to Right Join, resulting in incorrect statistical results
猜你喜欢
![Detailed explanation of cloud hard disk EVS and how to use and avoid pits [HUAWEI CLOUD is simple and far]](/img/95/c05f184a6221fefaaa93beb9dccc33.png)
Detailed explanation of cloud hard disk EVS and how to use and avoid pits [HUAWEI CLOUD is simple and far]

“杀猪盘”宰向环球影城

利用华为云ECS服务器搭建安防视频监控平台【华为云至简致远】

【实战】Next.js + 云函数开发一个面试刷题网站

不安装运行时运行.NET程序

在北极都可以穿短袖了,温度飙升至32.5℃

使用Jetty服务器和Axis2框架技术发布Webservice接口

手摸手带你完成智慧路灯构建及避坑【华为云至简致远】

Lecture 2 Software Life Cycle

使用华为HECS云服务器打造Telegraf+Influxdb+Grafana 监控系统【华为云至简致远】
随机推荐
SQL 不新增表 把一张表定义成两张
MATLAB中writetimetable函数用法
自己悦表存心
LeetCode136:只出现一次的数字
NFT盲盒挖矿DAO智能合约dapp系统开发详情
正则表达式入门二(普通字符)
你把 vite打包 玩明白
Day1:面试必考真题
“杀猪盘”宰向环球影城
问题10:注册页面的易用性测试?
Huffman tree
使用alarm函数实现sleep,使用alarm函数实现对阻塞操作设置超时
【问题】torch和torchvision对应版本
Tao Te: Engine or baggage?
王守创:多组学整合分析揭示植物代谢多样性的分子机制(8月2号晚)
树莓派 USB摄像头 实现网络监控( MJPG-Streamer)
个人秋招记录——欢迎交流
淘特:引擎还是包袱?
php中接口、抽象类以及接口和抽象类区别详解
PAT乙级-B1012 数字分类(20)