安恒杯十月月赛wp

题很难,不过稳住

easy audit

即容易的审计(一点都不容易)

每次刷新上面的数字都不一样,查看源代码

发现有’index.php?func1’,还发现有’flag.php’

进入到flag.php,发现只有一组随机数

进入到index.php?func1,还是原始页面,设置参数

index.php?func1=phpinfo

发现有回显,说明可以执行参数func1后的函数值,下面用到了

get_defined_functions() 获取所有已经定义的函数
get_defined_vars() 这个函数是返回由所有已定义变量所组成的数组

参考
https://www.jb51.net/article/42890.htm

构造

/index.php?func1=get_defined_functions

在数组最后发现 jam_source_ctf_flag 这个函数

构造

/index.php?func1=jam_source_ctf_flag

进入到这个函数

很乱,查看源代码,发现隐藏了一些代码

即当前页面的代码就是flag.php中的代码。

代码意思为:定义了一个类,里面有属性$a,魔法方法__construct自动获取传入的参数a的值并赋值给$a;方法gen_str返回变量$str,$str是一个随机的数字字符串;方法GiveYouTheFlag会包含’real_flag.php’,如果$secret(即$str)与$a相同则输出flag

但$str是随机的,无法通过设置参数a来进行匹配,不过下面还有代码

如果post提交了flag参数且值为’I want the flag’,就会将’real_flag.php’包含

这时,再构造

index.php?func1=get_defined_vars

获得所有变量,即可得到flag

Ordinary keybord

李磊是一名程序员,在他的笔记本里有一些这样的记录:
QQ:iloveyou521
blog:blog132
wechat:wechat190

看着应该像是密码,于是尝试去登录,发现密码错误
后来一打听,原来他将这些密码经过自己写的一个简单的加密算法变成真实的密码,而自己笔记本中存放的只是一些虚假的密码,只是方便记忆而已

其真实密码如下:
QQ:+p)g$_)'521
blog:hp)u132
wechat:A$ezr&190

hint:Caesar

flag is spru.r5sf3h7660h7394e169699hffe0s0h$4,

Please restore the real flag

分析:

根据加密后的flag,spru对应的应该为flag

s - f
p - l
r - a
u - g
. - {
, - }

根据已知记录

+ - i
p - l
) - o
g - v
$ - e
_ - y
) - o
' - u

h - b
p - l
) - o
u - g

A - w
$ - e
e - c
z - h
r - a
& - t

加密时数字不进行加密

则根据加密后的密文,可以得知的解密为:

flag{a5f?3b7660b7394c169699b??c0f0be4}

根据对应关系,可以得出没有对应关系的字母为:

d j k m n p q r s x z

依次尝试发现?为d

flag{a5fd3b7660b7394c169699bddc0f0be4}

下回做题一定要记得多尝试。。。