最近(被迫)拿到了不少经过混淆的PHP代码样本,尤其是我使用的某个开源软件里面竟然也有被混淆的PHP代码(还有几十个JS后门),导致我不得不把它们都解混淆来检查一下。不过,这些只要20分钟就能写出通用解混淆代码的混淆有什么意义呢?好想出去玩_(:з」∠)_但出不去,只好在家里应XCTF抗疫赛邀请出题了。但是实在没题出怎么办?恰巧看到Xray的一篇吐槽安全从业人员代码平均开发能力差的文章,考虑到解混淆需要一定的开发能力,不如来用混淆水一题吧……顺带一提,本次比赛中,我观赏了一下各个队伍的去混淆脚本,基本上都是正则表达式+黑魔法的写法,根本看不懂……How?我相信很多人对写一个PHP混淆与去混淆是一头雾水,完全不知道怎么下手的状态,或者除了正则表达式以外就没有思路了。实际上,写混淆器等于写半个编译器。如果你的程序能够正确理解PHP代码中每一个“单词”的意思,那么你的混淆器就基本开发完成一半了。一个编译器通常分为编译器前端和后端两个部分,编译器前端负责对代码的解析。我们要着眼的也基本就是前端部分。编译过程中的第一步是词法分析,词法分析器读入源程序的字符流,把他们组织成有意义的词素(lexeme);对于每个词素,词法分析器产生对应的词法单元(...
好久没写文章了,干脆把我最近的研究拿出来凑个数。想不到吧,竟然是一篇和技术完全没关系的文章(。这篇文章是一篇面向个人的非专业记账教程,旨在安利Beancount,并介绍Beancount的一些适应中国国情的使用方式。如果你喜欢手动记账,那Beancount可能是最好用的记账工具;如果你嫌手动麻烦,只想快速地完成记账工作,Beancount也很适合你。Why 记账?最近几个月,看到我微信朋友圈的朋友都会发现我似乎一直在折腾记账。当然,这不是一时兴起,我记账已经有好几年了。记账的最原始动机自然还是「穷」了。在消费主义盛行的当代,要对自己(被资本主义人为创造出)的欲望进行克制,似乎并不是一件容易的事情。《乐记-乐本》所论曰:「夫物之感人无穷,而人之好恶无节,则是物至而人化物也」。如果能通过记账了解自己的财务情况,从「节流」的角度看,就可以遏制自己的非必要商品购买欲望;从「开源」的角度看,也能对自己的收入情况有一定的把握,从而可以想办法通过各种手段增多自己的收入来源;通过对历史数据的分析,也能对自己使用分期付款等金融工具的风险抵御能力有一定的清晰认识。──记账,就是一个了解更完整的自己的过程。为了达成这个目的,则需要一套科学的记账方法和科学...
这次RCTF2019中,我出了一题SourceGuardian解密。和Hook zend_compile_string就能解决php_screw、php-beast等扩展一样,没有对PHP总体的执行流程做出较大更改的扩展,依然有通用的(或是较为通用的)破解方案。这其中,SourceGuardian就是一个例子。这篇文章将从Zend虚拟机的角度来谈这一类加密的破解方案。这一题的题目和Writeup见:https://github.com/zsxsoft/my-ctf-challenges/tree/master/rctf2019/sourceguardian我们首先需要熟悉PHP代码执行的流程──即,PHP到底是如何加载文件并执行的。PHP代码由于历史原因较为散乱,因此入手点很多。经过分析后,我认为从php-cli入手是一个不错的选择。https://github.com/php/php-src/blob/php-7.3.5/sapi/cli/php_cli.c#L937让我们来整理一遍吧。第一步:打开文件句柄,CLI在这里顺便处理以#!/bin/php开头的可执行文件,防止该头被输出。...
好久没写前端文章了,写一篇来凑个数吧。 本文相关GitHub:https://github.com/zsxsoft/nextjs-csr 效果见:https://codesandbox.io/s/github/zsxsoft/nextjs-csr请注意:本文并非一种新思路的介绍,仅仅是使用Nextjs解决具体的某一类业务场景的实现。Nextjs作为一个优秀的React SSR框架,被各厂商广为使用。但是,在它强大而高性能的同时,也有不少限制。例如,纯CSR渲染。问题Why CSR?为什么要纯CSR渲染呢?这个问题首先要回到为什么需要SSR。SSR带来的好处主要包括搜索引擎收录、首屏渲染速度提升。根据我的实测,使用React和Vuejs渲染的网页,谷歌都有相当大的概率渲染失败,导致收录大量重复内容。但相应的代价便是,不得不增加服务器投入。以及,实现CSR和SSR的同构,在开发上更是麻烦。Nextjs在一定程度上为我们解决了开发成本这一问题,但是服务器成本这一问题仍然无法解决。无论怎么说,SSR都在服务器上进行了渲染,该做的一点不少。这个时候,一般都会想到通过缓存来解决性能压力。当然,对于游客和搜索引擎来说没什么问题。但对于登录用户这...
今年的HITCON打完了,沉迷写前端搞Nextjs骚操作的我成功爆0(雾),不想写前端了.jpg。先跑个题。 HITCON 2016上,🍊出了一道PHP反序列化。 HITCON 2017上,🍊出了一道Phar + PHP反序列化。 HITCON 2018上,🍊出了一道file_get_contents + Phar + PHP反序列化。 让我们期待HITCON 2019的操作(雾。Phar RCE今年HITCON上,baby cake这一题,涉及到了今年BlackHat大会上的Sam Thomas分享的File Operation Induced Unserialization via the “phar://” Stream Wrapper这个议题,见:https://i.blackhat.com/us-18/Thu-August-9/us-18-Thomas-Its-A-PHP-Unserialization-Vulnerability-Jim-But-Not-As-We-Know-It-wp.pdf...
刚刚在深圳的0CTF/TCTF全球总决赛结束,然后本蒟蒻果断地打出了GG,大佬们太强了。成功达成国际赛不当倒一的目标,也算不虚此行。 我有相当一部分时间花在了nwjs这一题,虽然最后没解出来。更令人难过的是,这一题我本来想在RCTF 2018里出的,因为发现难度太高,因此放弃出题,没曾想竟然还能被考到了。这里写一篇博客大概记录一点阶段性成果。另外顺便膜一下刘大佬的暴搜思路。 以下代码,我使用的Nwjs版本为v0.30.5,v8版本为 6.6.346.32。 首先是,什么是Nw.js的Source Protection。 在Nwjs的官方文档中,有这么一个 Protect JavaScript Source Code。经过它,也就是 nwjc 的编译之后,会变成在一般意义上人类不可读的二进制文件。...
خوراک خبری خود را بسازید
آیا آماده هستید تا آن را اجرا کنید؟
بدون نیاز به کارت اعتباری، یک دوره آزمایشی 14 روزه را شروع کنید.