当前位置:网站首页>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
边栏推荐
猜你喜欢
雷克萨斯lm的安全性如何,通过两个角度来聊这个话题
552个元宇宙App,70个搞社交,哪款真能交到朋友?
PostgreSQL 每周新闻 2022-7-27
用1000行代码统计西安新房价格后,我有一个惊人的发现……
手摸手带你完成智慧路灯构建及避坑【华为云至简致远】
A high-performance creation book, ASUS Dreadnought Pro15 2022 is completely enough for daily photo editing and editing!
【指针内功修炼】函数指针 + 函数指针数组 + 回调函数(二)
MMA安装及使用优化
技术分享 | 接口自动化测试如何搞定 json 响应断言?
162_Power Query 快速合并文件夹中表格之自定义函数 TableXlsxCsv_2.0
随机推荐
云硬盘EVS详解以及如何用与避坑【华为云至简致远】
内心的需求
MMA安装及使用优化
【报错】import cv2 as cv ModuleNotFoundError: No module named ‘cv2
输出一个整数的二进制形式
C语言中操作符的详细介绍
SwiftUI SQLite教程之了解如何在 SwiftUI 中使用 SQLite 数据库并执行 CRUD 操作(教程含源码)
理解string类
How to use redis
The difference between servlet and jsp _ the difference between servlet and class
网络通信的过程
rust编程基础
Day2:面试必考题目
WMS软件国内主要供应商分析
利用华为云ECS服务器搭建安防视频监控平台【华为云至简致远】
MySQL面试必备(一)基础篇
教你如何获取微信公众号历史文章链接
【实战】Next.js + 云函数开发一个面试刷题网站
使用Typora+EasyBlogImageForTypora写博客,无图床快速上传图片
基于ModelArts的动漫头像自动生成丨【华为云至简致远】