hgameweek3
week3
web
webvpn
审计源代码,发现最后一段函数,要求我们从本地访问该网站,才能进行读文件操作
联想到SSRF
但是怎么进行攻击?
接着审计代码,发现了典型能造成的原型链污染的函数update
原型链污染的逻辑是
1 | 原型链污染简单来说就是如果能够控制并修改一个对象的原型,就可以影响到所有和这个对象同一个原型的对象 |
而本网站的作用是构造一个VPN访问外网,联想到我们需要从本地访问,也就是说构造一个127.0.0.1
的网站供我们访问
同时注意函数禁用了__proto__
因此我们采用constructor.prototype
,
而根据代码要求我们在user/info
发送post请求同时调用req.body作为update函数的参数因此我们可以构造payload,
考虑到访问ip地址默认80端口,而本地开放3000端口,因此访问的时候利用3000端口访问/flag就可以得到flag啦
ZeroLink
网页是一个存储记忆的东西(?)可以查询记忆
查看源码,发现以管理员身份登录后还可以上传文件等操作,因此我们先登录(登录界面也只能以管理员身份登录)
但是远程的密码数据库中并不能查询到,通过询问,这是一个go独特的安全问题,查了资料了解到是因为go声明变量时如果没有赋值会自动赋值为0,只是go独特的语法
1 | 如果User结构体的token字段本身是一个字符串类型的属性,在初始化User对象的时候Token属性将会拥有一个默认的零值,空字符串;如果此时用户传入的token也是一个空字符串,其赋值给Token属性的时候,对于这个User对象的值将不会有任何改变。 |
因此我们构造payload,把username
和token
都置为空,就会自动查询管理员的密码啦
得到密码啦
管理员界面是一个上传压缩包的界面
接着审计代码查看这一块的代码原理
代码对文件的前后端都做了要求只可以传zip,但是经过测试只有linux远程才能正常传文件
管理员界面有三个功能
1:上传zip压缩包
2.解压缩包到/tmp/
3.读/app/secret
secret链接的是/fake_flag
考虑把fake_flag替代成/flag
因此思路是上传一个同名的文件,解压缩后再读我们构造好的secret
但是后端代码再解压缩的时候把所有解压文件都放在/tmp下
无法进行同名文件的替换。如何把/tmp/换到/app下呢
查询资料到一个软连接的东西,可以把该文件的操作都转化为这个目录下的操作
可以创建一个链接到/app的文件link再压缩成压缩包
再搞一个同名为Link的目录把我们构造好的secret文件塞进去,把这个文件夹压缩一下成link1
先传进link,解压缩,再传link1解压缩这时候/tmp文件夹下的是link/secret再读文件就是链接到app下了
misc
与ai聊天
聊了一会,莫名其妙出flag了?
Blind SQL Injection
打开pcapng分析流量包,导出http
对象,根据题目提示以及id=1-
后面的内容猜测是sql盲注,盲注的思路是逆向+ascll编码并且利用二分法判断每一个字符对应的ascll码的大小关系,搓了个简陋的代码。
1 | import pyshark |