文章

0xGame 2024-Web-Week 1

[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

  • 继续提醒从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__()

  • 先构造如下payload{{"".class.bases[0].subclasses()}}读取全部子类

  • 找到<class 'warnings.catch_warnings'>获得索引[226]

  • ps.其实可以用for循环构建来查找,最后用__name__输出显示查看是否正确

  • .__init__: 访问该子类的初始化方法

  • .__globals__: 访问该初始化方法的全局命名空间

  • ['__builtins__']

  • ['eval']: 从__builtins__中获取eval函数。

  • ("__import__('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。正解应该是直接从脚本变量里拿到的

0 条评论