解题量4/6 排名4
flask?jwt?
考察session伪造
登录框直接随手注册一个用户,然后登录进去康康什么情况,我这里随手注册了一个叫aa的用户
点击”拿flag”会提示你不是admin,也就是需要伪造成admin用户,也就需要SECRET_KEY
这里也就几个功能点,瞎点几下发现忘记密码这里输入它主页的邮箱就可以在注释中拿到SECRET_KEY
然后解密后伪造一手即可
1 | python flask_session_en_de.py decode -s “th3f1askisfunny” -c "你的session" |
携带session访问/getFlag
即可
ez_factors
题目描述:原生 Linux 因数爆破工具。flag在根目录
首先进入页面,点击Tool进入/factors/114514
题目描述说是原生 Linux 因数爆破工具,那就预测一手这道题考察命令执行,这就和常见的ping有点相似了
直接换行符(%0a
)执行命令,但似乎没那么简单,ls
没回显,咋回事,cat /etc/passwd
再康康
记得这里/
要url编码,不然会产生歧义嗷
这里明显是执行了的,因为格式和/etc/passwd
是相同的,那难道只会回显数字吗,那我就编个码读/flag
吧
这里就用od
命令,它默认以8进制读取文件,也就是得到的全是数字,爽诶
1 | /factors/114514%0aod%20%2fflag |
但这还没结束,得到的flag内容长这样
1 | 0000000 051516 041523 043124 032573 033461 031146 032144 026467 |
急急急,怎么复原内容呢,一顿搜索没啥结果,最后墨迹了好久发现参数-b
输出结果会好复原很多,只拿了二血,坏
1 | /factors/114514%0aod%20-b%20%2fflag |
1 | 0000000 116 123 123 103 124 106 173 065 061 067 146 062 144 064 067 055 |
最后扔进赛博厨子得到flag
MyWeb
题目描述:试试我的JSON解析工具。
1 |
|
这里审计一手代码,就是一个save和read的过程,我们要想eval的东西是我们想执行的,那就必须破坏它的结构,那就复制下来在本地测试测试,怎么才能闭合原有结构,让危险代码逃逸
最后借鉴sql注入那套思路,闭合加注释,成功执行任意代码
1 | /?mode=save&value=]//%0a;<your_php_code>;// |
但是还有个要注意的点,addslashes()函数会转义预定义字符,也就是单双引号那几个,那么执行的代码也不能有这些东西,所以要用到无参数命令执行
1 | /?mode=save&value=]//%0a;print_r(getenv());// |
然后?mode=read
就能获取环境变量里的flag
flask?jwt?(hard)
这道题和第一题差不多,但是SECRET_KEY藏起来了
首先在注册登录后注释中有提示
1 | <!-- 我der密钥去哪里了,哦!源来氏被 /wor 藏起来了 --> |
访问/wor
路由给出了上次的登录时间,然后就卡住了,急急急,找了半天让后台报错康康有没有debug模式泄露源码的地方,最后在session中获得灵感
可以看到base64解码后看到了进入时的提示语句,嘶,这里的登陆时间该不会也是在session中获取的吧,那就登录后访问/wor
路由,然后随手删除一坨(不带session访问也会报错)让它在获取登录时间时报错
然后得到SECRET_KEY
然后伪造即可
1 | python flask_session_en_de.py encode -s "hardgam3_C0u1d_u_f1ndM3????" -t "{'_fresh': True,'_user_id': '1'}" |
携带session访问/getFlag即可获取flag
Author: ph0ebus