首页 > 其他分享 >[HITCON 2017]SSRFme

[HITCON 2017]SSRFme

时间:2024-06-11 14:46:32浏览次数:15  
标签:文件 SSRFme shell GET filename 命令 readflag 2017 HITCON

[HITCON 2017]SSRFme

打开环境就是代码审计

<?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__);

$_SERVER, Server and execution environment information — 服务器和执行环境信息

REMOTE_ADDR:正在浏览当前页面用户的 IP 地址。

X-Forwarded-For:是一个 HTTP 扩展头部

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

escapeshellarg : 把字符串转码为可以在 shell 命令里使用的参数。

pathinfo() 返回一个关联数组包含有 path 的信息。

包括以下的数组元素:

[dirname] //路径名

[basename] //文件名

[extension] //扩展名

chdir(): 把当前的目录改变为指定的目录。

file_put_contents(): 把一个字符串写入文件中。

第一段代码会打印出当前用户IP,然后会创建一个文件夹,路径为sandbox/MD5(orange+ip)

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

通过url参数输入的内容会以GET命令执行,命令执行的结果会被存入我们以filename参数的值命名的文件里

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

这里的GET不是我么平常的GET方法传参,这里的GET是Lib for WWW in Perl中的命令 目的是模拟http的GET请求,GET函数底层就是调用了open处理

首先我们到kali里面去测试一下这个GET有什么作用

W_KMNraSkylZUB-7IRnD2SwZBDW5aGwcdIticDmwlaQ

这里GET一个根目录,功能类似于ls把它给列出来,也可以读取文件

Kr1UdPDhXgdtQzDj4U4wBMOwAxjRezPKEkMxxG58qCg

那么这段代码的意思就是,把shell_exec中GET过来的结果保存到escapeshellarg中用get(此处get为get请求)接收的参数中,并且这个参数是可以在shell命令里使用的参数。

然后用pathinfo函数分割get过来的filename,最后替换点,截取前面目录,最终用file_put_contents函数把之前$data给写进这个目录里面。

首先尝试访问根目录,get:/?url=/&filename=aaa

接着访问aaa文件夹,路径:/sandbox/MD5(orange+ip)/aaa即/sandbox/a9950c04f34c1fc1447fffe46c5a0e5d/aaa

OE3jX6hML3nPoreqNVa9QNPA8phxI22OMGjIV19_7EQ

4seHQlK5WHB_rI6tb4FnNk-wa4cSenEajkZ-gpuUosU

根目录下有flag和readflag文件,但是打不开,我们要利用readflag去读取flag,这里涉及到Perl中open命令执行(GET)内容了。

因为GET的底层是使用open函数的,如下

file.pm84: opendir(D, $path) or132:    open(F, $path) or returnnew

而这个open函数会导致我们的RCE,最终造成GET的RCE

perl函数看到要打开的文件名中如果以管道符(键盘上那个竖杠|)结尾,就会中断原有打开文件操作,并且把这个文件名当作一个命令来执行,并且将命令的执行结果作为这个文件的内容写入。这个命令的执行权限是当前的登录者。如果你执行这个命令,你会看到perl程序运行的结果。

所以我们需要先创建一个与我们需要执行命令相同的文件,然后使用管道截获该流程,使之为命令的执行,这里要创建一模一样的文件。

/?url=file:bash -c /readflag|&filename=bash -c /readflag|

修改存储的文件,并读取flag输入到存储的文件中去。直接rce。

/?url=file:bash -c /readflag|&filename=aaaa

W07_RGcxXgwIDI1qmVGHuZGjMobE-wtslkaMKRodxCY

标签:文件,SSRFme,shell,GET,filename,命令,readflag,2017,HITCON
From: https://www.cnblogs.com/fishjumpriver/p/18242001

相关文章

  • CSP历年复赛题-P3957 [NOIP2017 普及组] 跳房子
    原题链接:https://www.luogu.com.cn/problem/P3957题意解读:有n个格子,每个格子有不同的距离和分数,从起点,每次可跳距离为d,用g金币后可跳距离范围可以变成max(d-g,1)~d+g,求最小的g,使得可跳跃得分不少于k。解题思路:1、单调性分析:如果g越大,可跳跃的范围就越大,理论上能得的分数越......
  • P3756 [CQOI2017] 老C的方块 解题报告
    oj:https://gxyzoj.com/d/gxyznoi/p/P266又是网格题,考虑染色:显然可以发现,每一个不合法的图形都可以被染成黄->蓝->特殊边->绿->红,且旋转后同样满足条件推广到整个棋盘就是:所以是否可以将颜色编号,然后按照上述方法连边呢?显然是可以的,若一个格子被填上了方块,则讨厌的形状一定......
  • CSP历年复赛题-P3956 [NOIP2017 普及组] 棋盘
    原题链接:https://www.luogu.com.cn/problem/P3956题意解读:计算从(1,1)走到(m,m)的最小花费,有几个限定:同色格子可以走,花费为0;不同色格子可以走,花费为1;有色格子可以走到无色格子,花费为2,且用将无色格子临时染色;无色格子不能走到无色格子。解题思路:可以采用DFS来暴搜所有路径,需......
  • CSP历年复赛题-P3955 [NOIP2017 普及组] 图书管理员
    原题链接:https://www.luogu.com.cn/problem/P3955题意解读:给出n个图书编号,q个需求码,找到后缀与需求码匹配的最小图书编号,没有输出-1。解题思路:先对图书编号排序,用枚举法遍历每一个图书编号,看后缀是否与需求码相同。100分代码:#include<bits/stdc++.h>usingnamespacestd;c......
  • 网鼎杯 2020 玄武组 SSRFMe
    复习一下常见的redis主从复制主要是redis伪服务器的选择和一些小坑点<?phpfunctioncheck_inner_ip($url){$match_result=preg_match('/^(http|https|gopher|dict)?:\/\/.*(\/)?.*$/',$url);if(!$match_result){die('urlfomaterror......
  • P4003 [清华集训 2017] 无限之环 解题报告
    oj:https://gxyzoj.com/d/gxyznoi/p/P93它要判断什么时候不漏水,就是需要建一种图,使得原图的最大流是答案因为是网格图,考虑黑白染色,可以将\((i+j)\)对2取模的结果作为颜色,将所有颜色为1的点向源点连边,颜色为0的点向汇点连边接下来考虑如何判断是否漏水,因为有四个方向,考虑拆点将......
  • P6342 [CCO2017] Vera 与道路建设 题解
    题目大意对于一个图w一共有v个点点的编号为1,2,...,v,对于点a与点b如果满足$a\tob$且$b\toa$使得每一条道路都只走过一次,那么我们称$a,b$为完美点对,当一个联通图只有$k$个完美点对时,称这个联通图为美丽公路网,要求求出一个美丽公路网......
  • 【NOIP2017普及组复赛】题2:图书管理员
    题2:图书管理员【题目描述】图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个正整数。每位借书的读者手中有一个需求码,这个需求码也是一个正整数。如果一本书的图书编码恰好以读者的需求码结尾,那么这本书就是这位读者所需要的。小......
  • P8655 [蓝桥杯 2017 国 B] 发现环
    原题链接题解有点像拓扑排序拓扑排序怎么做来着?首先找老祖节点对不对?老祖节点有什么特性?入度为零而在无向图中,我们把叶子节点看成老祖节点,它们有什么特性?连接的边只有一条code#include<bits/stdc++.h>usingnamespacestd;vector<int>G[100005];intcon[100005]={......
  • [Usaco2017 Open]Bovine Genomics 题解^&*^(
    不知道为啥,我死活想不到二分(楼下正解)所以,就有了这篇题解可以看到,这道题离暴力的距离只有一步!就是数组开不下!!小问答:数组开不下时,你会?A:mapB:优化代码C:gp_hash_table由于正在学hash,所以容易想到...tong[本来的下标%9999999]然后就玄学的过了。。。ACcode#include<bi......