pickle反序列化
前置知识这几天打完xyctf了,里面刚好有一道pickle反序列化的题目,当时也是现学然后现打的,但总归学的还是不仔细,赛后还是得针对性的学一下 什么是Pickle?参考官方文档:pickle — Python 对象序列化 跟PHP反序列化一样,在python中也会存在对象序列化和反序列化的操作,那么Pickle就是用于实现这一功能的模块之一 模块 pickle 实现了对一个 Python 对象结构的二进制序列化和反序列化。 “pickling” 是将 Python 对象及其所拥有的层次结构转化为一个字节流的过程,而 “unpickling” 是相反的操作,会将(来自一个 binary file 或者 bytes-like object 的)字节流转化回一个对象层次结构。 但是其实在python中并不只有pickle可以实现序列化的操作,python有一个更原始的序列化模块叫marshal,但一般地 pickle 应该是序列化 Python 对象时的首选。marshal 存在主要是为了支持 Python 的 .pyc...
XYCTF2024复现
ezMake扫了一下目录发现有flag文件,下载下来就是flag,不过好像这不是预期解 传入一个1之后有回显 分析一下内容 这里PATH变量被设置为空,这段 Makefile 的逻辑检查了 PATH 是否未定义,如果未定义则设为空,如果已定义也重设为空。因为**make 命令本身也依赖 PATH 查找**,当PATH被设置为空之后, 但是测试之后发现Bash内置命令是可以执行的 内置命令列表 命令 说明 : 扩展参数列表,执行重定向操作 . 读取并执行指定文件中的命令(在当前 shell 环境中) alias 为指定命令定义一个别名 bg 将作业以后台模式运行 bind 将键盘序列绑定到一个 readline 函数或宏 break 退出 for、while、select 或 until 循环 builtin 执行指定的 shell 内建命令 caller 返回活动子函数调用的上下文 cd 将当前目录切换为指定的目录 command 执行指定的命令,无需进行通常的 shell...
java从0到1的学习
基础知识先讲讲Java语言的几个重要特性 Java语言是面向对象的语言(oop) Java语言是健壮的,Java 的强类型机制、异常处理、垃圾的自动收集等是 Java 程序健壮性的重要保证。 Java语言是跨平台型的语言 Java语言是强类型的语言 Java语言是解释型语言 解释型语言:javascript,PHP,java 编译性语言:C/C++ 什么是解释性语言?就是编译后的代码不能直接被机器执行的,需要解释器去执行 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。 程序员的第一个程序必然就是hello world了,那我们先拿这个代码来分析一下 12345678public class HelloWorld { /* 我的第一个Java程序 * 它将输出字符串 Hello World */ public static void main(String[] args) { System.out.println("Hello World");...
java反序列化
0x01前言因为前面学习了java的一些基础知识,java反序列化也算是搁置了很久的知识点,所以就来学习一下关于这个java反序列化的知识点 参考文章和视频: JAVA反序列化漏洞总结-青叶 java序列化与反序列化全讲解 Java反序列化漏洞专题-基础篇(21/09/05更新类加载部分) 0x02正文什么是java反序列化Java 序列化是指把 Java 对象转换为字节序列的过程便于保存在内存或文件中,实现跨平台通讯和持久化存储,而反序列化则指把字节序列恢复为 Java 对象的过程。(这个的话在之前学ctfshow里头的反序列化篇也有详细的介绍过) 为什么需要序列化我们知道,当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等,...
Phar反序列化
0x01前言因为做到了GXYCTF一道题的考点是phar反序列化,所以就来专门学习一下关于这个phar反序列化的知识点 0x02正题PHP反序列化常见的是使用unserilize()进行反序列化,除此之外还有其它的反序列化方法,不需要用到unserilize()。就是用到了本文的主要内容——phar反序列化,用这种方法可以在不使用unserialize()函数的情况下触发PHP反序列化漏洞。漏洞触发是利用Phar:// 伪协议读取phar文件时,会反序列化meta-data储存的信息。然后我去翻阅了大量大佬的文章进行学习,最后做成自己的笔记去方便自己以后随时可以看 什么是phar?Phar(PHP归档)是将php文件打包而成的一种压缩文档,类似于Java中的jar包。这个特性使得 PHP也可以像 Java 一样方便地实现应用程序打包和组件化。一个应用程序可以打成一个 Phar 包,直接放到 PHP-FPM 中运行。 ...
ctfshow1024杯
1024_WEB签到#签到123error_reporting(0);highlight_file(__FILE__);call_user_func($_GET['f']); 动态函数调用,而且是无参数的函数 1?f=phpinfo 一开始没什么头绪,就翻了一下php配置,看到里面有一个function 调用这个函数就能拿到flag了 1?f=ctfshow_1024 1024_柏拉图#phar反序列化 口子挺多的,先常规转一圈看看,在index.php中有一个url参数,传入1后有回显 1难道我不知道你在想什么?除非绕过我?! 提示很明显了,这里可以绕过,可是这里是干什么的呢?根据url参数来看这里应该是获取其他网站的资源用的,猜测存在SSRF,那我们用file协议读取一下本地的文件,看看能不能获取到源码 file协议被过滤了,用双写去绕过 1?url=filefile://:///var/www/html/index.php 12345678910111213141516171819//index.phpfunction...
ctfshow渔人杯(已做完)
神仙姐姐 点了拜之后就显示拜了几次,提示磕首千遍,抓包看看 爆破发了999个包,但是好像还是没拿到flag,难道还有别的思路? 后面看了wp才发现是在差不多四百多次的时候就有flag了,没办法,另外开靶机吧,这次直接用脚本跑,免得找了 12345678910import requestsurl = "http://aa7bd384-045a-4847-8494-a621ad75572b.challenge.ctf.show/sx.php"Cookies = {"PHPSESSID" : "r4cvn9krjkdr67mm4ghb1uuhu4"}while(True): r = requests.get(url, cookies=Cookies) if "ctfshow{" in r.text: ...
极客大挑战2024wp--web
0x01前言极客2024没来得及比赛就结束了,所以下面的都是后面复现去做的 0x02赛题baby_uploadhint:Parar说他的黑名单无懈可击,GSBP师傅只花了十分钟就拿下了他的权限,你看看怎么绕过呢 先上传一个php文件看看 有过滤,把文件内容删掉后测试发现存在后缀名验证,先看看能不能绕过这个,后面我随便上传一个图片都显示上传失败,有点神奇 换个思路,先随便在url中传入一个路径 版本apache2.4.10,CVE-2017-15715,然后当时就复现了一下写在另一篇文章了,这里直接给payload 先上传我们的一句话木马然后抓包 12345678910111213141516171819202122232425262728293031323334353637POST /index.php HTTP/2Host: 80-74c251eb-096f-471b-ac79-241c6f54f8bc.challenge.ctfplus.cnCookie: _ga=GA1.1.143187499.1742196271;...
CVE-2017-15715漏洞复现
漏洞信息0x01漏洞描述Apache HTTPD是一款HTTP服务器,它可以通过mod_PHP来运行PHP网页。其2.4.0~2.4.29版本中存在一个解析漏洞,此漏洞的出现是由于 apache 在修复第一个后缀名解析漏洞时,用正则来匹配后缀。在解析 php 时 xxx.php\x0A 将被按照 php 后缀进行解析,导致绕过一些服务器的安全策略。 0x02影响版本Apache HTTPD 2.4.0~2.4.29 0x03漏洞分析index.php源码 12345678910111213141516171819202122232425262728293031323334<?phpif(isset($_FILES['file'])) { $name = basename($_POST['name']); $ext = pathinfo($name,PATHINFO_EXTENSION); if(in_array($ext, ['php', 'php3',...
极客大挑战2020wp--web(已做完)
web-Welcome#请求方法+sha1哈希绕过 打开是405错误,抓包后看到是Method Not Allowed 搜索后发现是请求方式错误,换成POST传参就可以拿到源码了 1234567891011121314<?phperror_reporting(0);if ($_SERVER['REQUEST_METHOD'] !== 'POST') {header("HTTP/1.1 405 Method Not Allowed");exit();} else { if (!isset($_POST['roam1']) || !isset($_POST['roam2'])){ show_source(__FILE__); } else if ($_POST['roam1'] !== $_POST['roam2'] &&...