CISCN2024初赛复现
这个比赛也是我第一次打的比较大的比赛,为此我还在赛前把前几年的题目都刷了一下,结果今年的题目怎么变异了,这么难(道心给整碎了),为此我写下这篇博客来复现学习。simple_php这题在比赛的时候其实已经差不多做出来了,可是出题人把flag藏到了数据库里。。。。123456789101112<?phpini_set('open_basedir', '/var/www/html/');error_reporting(0);if(isset($_POST['cmd'])){ $cmd = escapeshellcmd($_POST['cmd']); if (!preg_match('/ls|dir|nl|nc|cat|tail|more|flag|sh|cut|awk|strings|od|curl|ping|\*|sort|ch|zip|mod|sl|find|sed|cp|mv|ty|grep|fd|df|sudo|more|cc|tac|less|head|\.|& ...
think_php3.2.3的简单审计动调
因为在打hnctf的时候遇到了框架代审,当时我是直接通过日志泄露的payload来打的,所以我写下这篇文章来记录一下代审,顺便安装一下动调的环境。exp注入
hnctf wp
周末打了一下hnctf,稍微写一下wp吧。写了五道web。Please_RCE_Me123456789101112131415<?phpif($_GET['moran'] === 'flag'){ highlight_file(__FILE__); if(isset($_POST['task'])&&isset($_POST['flag'])){ $str1 = $_POST['task']; $str2 = $_POST['flag']; if(preg_match('/system|eval|assert|call|create|preg|sort|{|}|filter|exec|passthru|proc|open|echo|`| |\.|include|require|flag/i',$str1) || strlen($str ...
Docker PHP裸文件本地包含
我发现自己的越来越内耗了。不知道为什么最近都没有写博客的动力了。但是还是要写博客来记录一下这个漏洞。这个漏洞是我在无聊写题时遇到的漏洞。文章学习与p牛的博客Docker PHP裸文件本地包含综述
日志文件包含(不行但我还是要写一下)首先我们都知道服务器一般都会有日志文件,我们传入的内容都会被日志文件给记录nginx的默认日志位置如下12error_log /var/log/nginx/error.log;access_log /var/log/nginx/access.log;web的access_log日志下会存储访问的ua头等那只要在ua头写马在包含就可以得到shell
pearcmd.php利用条件php.ini中register_argc_argv=On开启安装pecl/pear
pear这个工具在php7.3前会自动安装但是到了php7.4后就不会自动安装。但是在docker中这个工具是默认安装的,这个工具其实就是个命令行工具,可以使用其来对文件进行操作。pearcmd.php123456789PEAR_Command::setFrontendType('CLI ...
session反序列化
在之前打帕鲁杯的时候遇到了,php写入文件来修改session进行伪造的题目。今天不知道学什么突然就想到了session反序列化我还没水过博客,于是写下这篇学习博客php session介绍首先我们都知道session是以文件的形式存储在服务端的,文件的内容是经过序列化后的数据。而存储的具体格式主要与下面几个php.ini设置有关1234session.save_path:这是session文件的储存路径session.auto_start:这个开关是指定是否在请求开始时就自动启动一个会话,默认为Off;如果它为On的话,相当于就先执行了一个session_start(),会生成一个session_id,一般来说这个开关是不会打开的session.save_handler:这个是设置用户自定义session存储的选项,默认是files,也就是以文件的形式来存储的session.serialize_handler:这是最重要的部分,定义用来序列化/反序列化的处理器名字,默认使用php,还有其他引擎,且不同引擎的对应的session的存储方式不相同,默认是php
session.seria ...
初探pickle反序列化
在打XY时遇到了pickle反序列化,但是没打出来故学习。什么是picklepickle其实就是python中用于序列化和反序列化的一种模块。其将对象序列化的结果是由一系列opcode组成的。如下1234567891011import pickleimport osimport base64import pickletoolsclass lalala(): def __reduce__(self): return (os.system,("dir",))haha=lalala()print(pickle.dumps(haha,protocol=0))----------------------------------------------cnt\nsystem\np0\n(Vdir\np1\ntp2\nRp3\n.我们可以看到其输出值为V0协议的opcode,该协议也称为人类可读的协议版本。
opcode既然其序列化的结果为opcode那么我们想要较为深入的了解pickle反序列化就要了解一下什么是opcode
概念Opcode,全称为Oper ...
XYCTF web
浅浅写一下wp吧,web差两题没有写出来,主要是因为,赛事时间太长,还要大二大三的老登太多了,没有拿奖的希望,就懒的打了。下面就写一下有些难度的吧,简单题就不写了。ezPOP这题难度不是特别高但是又两个算新又不是特别新的知识点第一个知识点就是
GC回收机制触发destruct首先我们来聊聊什么是GC回收机制。GC回收是一种销毁机制,又称垃圾回收机制。在PHP中,使用引用计数和回收周期来自动管理内存对象的,当一个变量被设置为NULL,或者没有任何指针指向时,它就会被变成垃圾,被GC机制自动回收掉那么这里的话我们就可以理解为,当一个对象没有被引用时,就会被GC机制回收,在回收的过程中,它会自动触发_destruct方法,而这也就是我们绕过抛出异常的关键点。
演示12345678910111213<?phpclass A{ public $B=1; public function __destruct() { echo "触发回收"; }}$A=new A();throw new Exce ...
哈希扩展攻击
又是做xy学到的。xy真是每一题都在学习。md5加密我们先聊聊md5加密。
加密过程我们会发现在md5加密后总是会输出一个128位的字符串,不管是多大的数据,因为md5是一个有损加密,这也就导致了我们认为md5加密不可逆。但是可以碰撞。至于其加密流程我直接先贴个图
填充加密的第一步就是填充。在进行md5加密时第一步就是填充,加密数据小于448位的数据会先先填充到448位填充的字符就是16进制的\x80\x00\x00\x00\x00。填充到448位最后的再写入64位的内容代表原数据的长度。补充到512位。如果数据大于512就补充道1024位。如果等于512也要补充到1024
分组加密md5的加密是将数据按512一组分成多组与初始的幻数加密12340x674523010xEFCDAB890x98BADCFE0x10325476初始幻数与第一组进行一系列复杂的运算,得到第二组幻数,第二组幻数再与第而做的数据进行运算,以此类推到最后一组得到的四个最终的幻数进行下面的操作就是得到的md5值假设最后得到的4组幻数都是0xabcdefgh那么首先两两分组得到1234ab cd ef ghab cd ...
帕鲁杯
这个帕鲁杯主要考的是应急响应,本人是一点不会,所以就写了几题web(写了前三题感觉难度不是特别大)和最简单的几题应急响应,由于其是靶机代理的形式搞得web靶机,web靶机一直掉(扫后台还慢)所以我web最后一题就懒的写了,就去玩应急响应了。web-签到123456789101112131415161718192021222324252627282930from flask import Flask, request, jsonifyimport requestsfrom flag import flag # 假设从 flag.py 文件中导入了 flag 函数app = Flask(__name__)@app.route('/', methods=['GET', 'POST'])def getinfo(): url = request.args.get('url') if url: # 请求url response = requests.get(url) ...
NSS刷题
因为XY整体持续时间太长了,而且后面出的题目也越来越不做人。于是我就想着还是刷刷NSS学习学习吧。Unzip(ciscn)这道题目的主要学到的是关于软连接的知识。我先贴几篇文章https://www.cnblogs.com/crazylqy/p/5821105.htmlhttps://www.cnblogs.com/sueyyyy/p/10985443.html这篇文章讲的是软链接
前置知识软连接的概念软链接其实就是相当于windows的快捷方式而快捷方式其实就是一个指向对应路径或文件的一种文件,也就是说即使快捷方式在不同的电脑上只要路径存在其就会指向那个路径,软链接同理
软链接创造指令1234软链接ln -s source target硬链接ln source target
解题看道这题是文件上传那么我们可以很自然的想到上传一个一句话木马文件。但是我们通过扫后台看到的源码,可以看到其文件上传的位置在/tmp目录下123456789<?phperror_reporting(0);highlight_file(__FILE__);$finfo = finfo_open(FILEIN ...