ctfshow西瓜杯wp
暑假还是有点犯懒了,哎意料之中,上周ctfshow西瓜杯的题目我看了一些,感觉还是很有价值的所有复现一下。CodeInject简单闭合一下前面的就可以命令执行了\
easy_polluted和ciscn线下的python污染就不多说了
Ezzz_php这题做道了一半但是因为我是最后一天下午才打的这个比赛导致我最后虽然查道了如何将file_get_contents升级为命令执行的文章但是还是没有写出来
反序列链1234567891011121314151617181920212223242526272829303132<?php highlight_file(__FILE__);error_reporting(0);function substrstr($data){ $start = mb_strpos($data, "["); $end = mb_strpos($data, "]"); return mb_substr($data, $start + 1, $end - 1 - $start);}cl ...
checklist
信息收集(找到站)1.目录扫描2.web框架识别3.
CISCN2024线下赛后感
第一次打CISCN结果是大大出乎了我们的意料,本来是冲着三等去的没想到最后拿了个20名(我个人认为我在这次线下赛的表现还是非常出色的,嘿嘿),web的break和fix都差一题node.js(考node.js是一点都不会啊也没存文章,)我记得刚打出python原型链污染的时候排名直接到了11名当然很快就掉下去了师傅们太强了
wp签到不必多说,f12submitbreak:he幽默文件上传,盲盒测试时发现可以上传php文件,幽默文件上传,队友和我说这个只能上传png图片,并且检测php,所以我直接上传了端标签的php马并再前面添加了图片文件头,赛后发现其应该只是再文件里检测了php之类的
fix:直接加图片文件尾的白名单即可
粗心的程序员break分析源码我们可以发现,其在home.php直接将修改的用户名加到了config.php里而config.php是再web页面的是能被解析到的。而其将写入的内容前加了个注释,且没有过滤?<>=那么这就可以直接使用?>来饶过注释再利用短标签来执行命令再使用#来注释后面拼接的内容,即可命令执行
fix检测?,>,<等其就 ...
再谈外网信息收集(微信小程序)
好久没有水博客了。主要是最近考试还有,打攻防太忙了,刚打完上周的攻防,做了5天的牢主要都是在信息收集,发现攻防要打的好,信息收集是一定要做好的。从小程序开始信息收集打了这次攻防,我发现现在各种系统后台的弱密码已经非常少了。直接使用fofa等工具来找很容易出现打歪的情况。而在这次攻防里我学到了可以从小程序来进行信息收集,因为小程序是近几年才兴起的,这回导致很多公司对小程序的安全并不重视,这就会导致小程序背后的网站经常会出现,弱密码和常见的框架漏洞。
很多小程序虽然是放在了微信上但是其实就是魔改的网站罢了,我们通过bp来抓包会发现很多小程序的很多功能走的都是http的协议,题目http报文我们就可以发现其所连接的网站,从而找到其后台网站,而这些后台网站一般都是很薄弱的资产,大部分存在弱密码,而且很多是使用的开源宽假(而且是老版本的)而通过小程序找到的网站我们有可以在通过ip反查,爆破子域名等来扩大资产。这里我贴一个大神写的文章微信小程序的修炼五脉这位大神的这个系列文章共有五篇。干货满满。
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来打的,所以我写下这篇文章来记录一下代审,顺便安装一下动调的环境。xdebug的配置先通过phpinfo来看其推荐版本
https://xdebug.org/wizard将phpinfo信息复制,官网会推荐其版本跟着安装即可配置如下1234567891011121314151617[XDebug]zend_extension="D:\phpstudy_pro\Extensions\php\php7.3.4nts\ext\php_xdebug.dll"xdebug.remote_enable = 1xdebug.client_port = 9001 ;端口配置xdebug.remote_host = localhost ;远程主机域名,对应本地phpstudy的网站域名xdebug.idekey = PHPSTORM ;设置IDE KEYxdebug.auto_trace = On ;开启自动跟踪, ...
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.上面的代码利用了__reduce__魔术方法该方法可以在被序列化时,会返回一个元组,以第一个参数为函数,第二个参数为执行的参数。我们可以看到其输出值为V0协议的opcode,该协议也称为人类可读的协议版本。其实__reduce__也就 ...