寒假刷刷刷之ctfshow终极考核

web640 checkin
放在页面上,直接提交
web641
发现一个index.partial.html的页面(对,你猜的没错,他没**用)

flag在头部
web642

有点离谱,有点难找,我有点裂开。访问system36d的时候,抓包,拿到flag(要还没输密码的时候)

web643

这道题其实在解外后面的题才接出来的,首先是已经进第一层的后台了奥,然后网络测试这里只能输入单条命令。所以我们使用find直接打印出当前system36d文件夹下的所有文件名

burp抓包pwd改find 找到所有的文件名

1

然后访问一下secret.txt

得到一段url编码。然后解码

web644

就在system36d的index.js.你可以选择输入密码或者直接搜索ctfshow就能找到644的flag

web645

到数据备份那边下载dat文件,找到645flag(有大用)

web646

远程更新这里需要权限key也就是645关的flag直接复制上去

抓包,然后update_address里面对应地址,发现更新是远程地址,然后地址不可达,可以推测出靶机不出网。

我试了半天的csrf,结果居然是ssrf。(但是直接用文件名也可以直接显示在前端,所以按照此方法拿下了全部文件。

找到了646的flag

web647

要到拿到647的flag 得看这个自定义函数

2

首先是action要等于evilString(switch函数控制)m可控

Untitled

然后call_user_func要怎么弄呢,这里用一个奇技淫巧。用sessionid()函数把变量转移到PHPSESSID 让其=372619038,那么拿到了flag

Untitled

这里开始最好记录上一关的flag,因为每一关都要上一关的flag。。

web648

能获取648的flag的类是evilClass 关键代码

Untitled

payload

?action=evilClass&m=asdasd&key=上一关flag

web649

关键代码

Untitled

Untitled

看似getArray的代码很复杂,然后条件看起来也很难满足,但是只要不管m就行了,

?action=evilNumber&key=648flag

web650

关键代码

Untitled

有点像之前的647,直接用647的payload

GET:action=evilFunction&m=session_id&key=649flag

COOKIE:PHPSESSID=ffffffff

web651

关键代码。

Untitled

明显的看到了Unserialize,反序列化

然后要在$array中找到username键和找到ctfshow值。

故构造php

Untitled 9.png

payload

action=evilArray&m=O%3A6%3A"daidai"%3A1%3A%7Bs%3A8%3A"username"%3Bs%3A7%3A"ctfshow"%3B%7D&key=flag_650

至此users.php

这边的flag就拿完了。

web652

在page.php里面,关键代码。

Untitled 10.png

Untitled 11.png

上图看括号闭合,下图,回显位在title

Untitled 12.png

就离谱

传统手艺,首先爆库

-1) union select database()-+

爆表。

-1) union select group_concat(table_name) from information_Schema.tables where table_schema=0x63746673686f77--+

爆列

-1) union select group_concat(column_name) from information_Schema.columns where table_name=0x63746673686f775f736563726574--+

爆字段

-1) union select secret from ctfshow_secret--+

拿到flag

web653

关键代码。

这边开始我们就要拿shell

Untitled 13.png

k是651的flag

然后file就是要包含的文件,然后又一个key的校验,所以我们上一关的sql注入还有作用。

还是和上关差不多的操作,先拿到key

-1)union+select+(SELECT+secret+FROM+ctfshow_secret)--+-

拿到key

key_is_here_you_know

然后在新建用户里面,放一个一句话木马的用户

然后包含/db/data_you_never_know.db

那么就可以构造payload

get:k=flag_651=ctfshow{a4c64b86d754b3b132a138e3e0adcaa6}

POST:file=../db/data_you_never_know.db&key=key_is_here_you_know

成功getshell

根目录下有一个secret.txt的文件就是flag

web654

在uitl的dbutil.php里面看到密码,mysqli连接,拿到数据库之后,开始udf提权

找到插件文件夹。

Untitled 14.png

然后去msf里面拿到.so的udf提权文件

查看靶机为64位系统

Untitled 15.png

Untitled 16.png

发现.so文件无法直接放入plugn文件夹(蚁剑会报错,所以就上传到util文件夹,然后在cp到plugln

Untitled 17.png

执行CREATE FUNCTION sys_eval RETURNS STRING SONAME 'udf.so';

Untitled 18.png

提权成功

Untitled 19.png

拿到flag

Untitled 20.png