#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)

目录
五、shrine
解题方法:
过程:
六、lottery
解题方法:
过程:


五、shrine


#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)
文章图片



解题方法: 1、php源码理解,SSTI(服务器端)模板注入



过程: Ctrl+U
查看源码
#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)
文章图片

使用了2个模块flask和os模块,看是否能模块注入

#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)
文章图片

app.route传了两个路径
#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)
文章图片

过滤()和'config','self'被加入了黑名单
#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)
文章图片

访问shrine路径
/shrine/{{1+3}}
进行了运输,存在SSTI(服务器端)模板注入
#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)
文章图片



又因为过滤()和'config','self'被加入了黑名单
1、payload:
/shrine/{{url_for.__globals__['current_app'].config}}
#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)
文章图片

2、payload:
/shrine/{{get_flashed_messages.__globals__['current_app'].config['FLAG']}}#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)
文章图片


六、lottery
#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)
文章图片



解题方法: 1、逻辑漏洞,弱相等



过程: 游走一遍
#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)
文章图片

然后再是注册
#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)
文章图片

#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)
文章图片


#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)
文章图片

在此处看见了flag
#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)
文章图片

点击buy后
抓包
出现api.php的post传参
#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)
文章图片

api.php成了重点
查看robots.txt发现了
标明不能通过git获得源码#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)
文章图片

发现题目给的附件
就是源码
#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)
文章图片


自动审计
(没啥漏洞)
#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)
文章图片

自己查看源码
可以发现
1、request是json格式(json支持布尔型数据)
#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)
文章图片


2、7位数的对比,是一位一位对比的
3、且使用的是弱相等(TRUE,1,"1"都是相等的,只是类型不同)
#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)
文章图片


构造payload
[true,true,true,true,true,true,true]
即改为
{"action":"buy","numbers":[true,true,true,true,true,true,true]}
使用bp抓包
#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)
文章图片

#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)
文章图片

再点击buy
#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)
文章图片

【#|【攻防世界WEB】难度三星9分入门题(下)(shrine、lottery)】

    推荐阅读