随手记录一下(
5呢

简单的正则
通过构造符合题意的正则表达式即可得到 flag。

http://10.60.38.227:34003/?s=the%20flag12/d/31
你会那样读文件吗
进入后链接提示我们跳转到 http://10.60.38.227:34007/index.php?file=hint.php ,之后在源码中找到提示:

然后通过 php 伪协议获得 flag.php 的 base64,再通过解码就能拿到 flag了:
http://10.60.38.227:34007/index.php?file=php://filter/read=convert.base64-encode/resource=flag.php

快速计算
标题虽然说是 Python 计算,但其实并用不到 Python(
通过观察我们知道我们需要计算的内容是第二个 div 里的算式去掉 =? 的部分,于是简单写一个油猴脚本:
1 | // ==UserScript== |
加载后刷新页面即可:

哪个才是 flag
找不同,在源码中找到真正的 flag:

Serialize & Unserialize
首先先根据题目要求构造字符串:
1 |
|
得到第一步答案:s:6:"Spirit";,根据提示跳转到 info.php:
1 |
|
根据观察,可以发现类从上到下类似链式调用,于是补充代码如下:

得到输出结果:
O:5:”Start”:2:{s:1:”a”;O:5:”Func1”:2:{s:1:”a”;O:5:”Func2”:2:{s:1:”a”;O:5:”Func3”:2:{s:1:”a”;O:4:”Flag”:0:{}s:1:”b”;N;}s:1:”b”;N;}s:1:”b”;N;}s:1:”b”;N;}flag{**}

log
首先观察 access.log 文件本身,我们可以发现其中充斥这很多 URI 编码后的字符串。我们先将其过一遍 decodeURIComponent,再去除一些无用的内容,诸如 UserAgent。
再观察,可以发现这是一次 SQL 注入的攻击日志,攻击者通过各位比较确认了 flag。于是我们可以利用攻击者确认 flag 的日志获得 flag。搜索 !=:

可以看到,这些数字已经是我们想要的 f,l,a了。最后将其拼接起来即可:

可靠的WebApp
通过观察可以发现核心在于 main.min.js:

打开文件,发现文件经过了混淆。我们使用 JSNice 简单对内容进行反混淆:

再对所有用到 _0x76ef 的项进行整理,最后得到相对反混淆后的结果。在这个过程中,我们观察到这个对象:
1 | this.APIModels = { |
通过这个对象,我们构建出增加余额的函数(上文对象中 count 需要改大):
1 | this.adminAddCoin = function() { |
最后,用我们修改完的 main 函数在 Console 中替换原有的 console 即可:


最后修改后的 main.min.js 如下:
1 | ; |
