当前位置:网站首页>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
边栏推荐
猜你喜欢
随机推荐
JS每晚24:00更新某方法
输出1!+2!+3!+......+n!
GMapping principle analysis/easy to understand
游戏版号“地下交易”,一个版号能卖上千万?
网络通信的过程
0代码4步体验物联网设备上云
输出一个整数的二进制形式
取消转义字符(r)
php类的析构函数:__destruct
基于matlab的遥测信道的基本特性仿真分析
正则表达式入门一
苹果开发「AI 建筑师」GAUDI:根据文本生成超逼真 3D 场景!
What are the visual database design software _ database visual programming
ffplay视频播放原理分析
LARS (Least Angle Regression)
Detailed explanation of cloud hard disk EVS and how to use and avoid pits [HUAWEI CLOUD is simple and far]
进程通信的方式
SwiftUI SQLite教程之了解如何在 SwiftUI 中使用 SQLite 数据库并执行 CRUD 操作(教程含源码)
未来无法预料
又有大厂员工连续加班倒下/ 百度搜狗取消快照/ 马斯克生父不为他骄傲...今日更多新鲜事在此...