前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DASCTF|June GKCTF X DASCTF应急挑战杯WriteUP-WEB篇

DASCTF|June GKCTF X DASCTF应急挑战杯WriteUP-WEB篇

作者头像
安恒网络空间安全讲武堂
发布2021-07-09 15:48:09
2.4K0
发布2021-07-09 15:48:09
举报

June GKCTF X DASCTF WEB篇

2021年6月26日,GKCTF X DASCTF应急挑战杯圆满落幕。

本次竞赛涵盖WEB、CRYPTO、MISC、PWN、REVERSE常规CTF五大类赛题。

本篇主要分享WEB方向writeup,一起来看看吧~

NO.00

WEB类榜单

排名

战队名称

单位

积分

解题数

1

杭州职业技术学院

3177

4

2

共禾

南昌大学共青学院

2118

3

3

EDI

EDI

2118

3

4

NGF

广西大学

1200

2

5

SUS

东南大学

1199

2

NO.01

ezcms

访问admin.php,可以访问到后台,后台账号密码为弱⼝令

admin 12345

可以找到模板注⼊的地⽅,但是发现存在限制。

在微信接⼝下存在⽬录穿越,步骤:

需要先创建⼀个正常的接⼝,然后再重新创建⼀个⽬录穿越接⼝,否则会报错

编辑⼀个存在路径穿越的漏洞

上传到任意图⽚

再回去编辑模板

回到前台即可getflflag

NO.02

eznode

登录的时候可以发现过滤相当的严格

常规的注⼊肯定是⽆法注⼊成功的,但是我们通过审计代码可以知道,该waf的主要功能是 利⽤for循环提取字符,再将该字符丢到⿊名单中逐字对⽐。但是在JS当中for循环遍历数组的话 就是逐步对⽐元素,在这种情况下就可以绕过⿊名单。

但是由于写了这么⼀⾏,substr函数仅允许字符串使⽤,所以如果输⼊的内容经过check 之后还是数组的话,就会报错。此时⼜需要审计代码。

我们可以得知该waf遇⻅加号的情况下,会直接将字符串左右的内容进⾏⼀个"加"运算,如 果⽤nodeJS做过开发的师傅应该知道该⽅法经常⽤于将数字,对象等转换为字符串。

到这⾥绕过的⽅法就跃然纸上了,我们可以先利⽤数组绕过,在我们的payload最后⼏段元素 当中⼜加上waf会过滤的内容,这样就会将我们输⼊的数组⼜转回字符串了。

那么是到⽹站⾥,我们需要运⾏的就是:

这样就得到了管理员token。之后就是很常规的原型链污染到EJS模块RCE了,看代码,就是在DIV模块下回读取⽤户的⽤户 名,之后将DIV的键名和值直接导⼊进去,所以我们需要先注册⼀个⽤户为__proto__,再污染 outputFunctionName进⾏RC

在adminDIV路由下下:

之后回到admin路由即可触发EJS的任意代码执⾏。

NO.03

babycat

⾮预期:

⾸先是uploadServlet中doPost没权限校验导致guest也能直接传⽂件,其次在check函数后转发 没返回,后⾯的代码依旧执⾏,造成了严重的⾮预期(出题人内心OS:呜呜呜呜)

所以只要上传jsp到web⽬录即可getshell

预期解:

babycat-revenge做了修复 ⾸先需要登陆,点击register有⼀个not allowed的烟雾弹,但是源码中写出了传参⽅式

先⽼实注册⼀个⽤户

登录后当前⽤户为guest,也会发现upload需要admin访问,downtest处可以任意⽂件下载,并 且根据web.xml可以⼀步步得到所有源码

⽂件⽬录

然后先关注怎么成为admin,看到com.web.servlet.registerServlet这⾥

接收data参数,然后正则匹配其中的

并将最后⼀个匹配强制替换为了guest,这⾥由于是json库,并且是gson进⾏解析,于是可以在 json中⾃由使⽤注释符/**/,所以payload可为

登录成为admin

然后uploadServlet那有⽩名单

注意到这⾥能上传xml⽂件,⽽在操作数据库的com.web.dao.baseDao中有使⽤了 xmldecoder来获取数据库信息

并且上传只对后缀和⽂件内容做了过滤,那么就可以考虑路径穿越写⼊恶意的xml,然后触发 xmldecoder反序列化

这⾥过了⽐较常⻅的xmldecoder需要⽤到的类

其实也不算啥waf,后来给了提示使⽤java.io.PrintWriter来写⽂件到static⽬录getshell(绝对 路径可以通过读../../../../../../../proc/self/environ得知)

PrintWriter

也可以直接⽤实体编码绕过滤 (来⾃NaN)

覆盖之后找个地⽅调⽤了getConnection,登录注册都可以 然后连上/readflflag即可

NO.04

hackme

提示nosql盲注

这⾥过滤了regex/ne/eq字符,因为是json,所以可以⽤unicode来绕过

这⾥python中写`\u0024`会被转义成`\\u0024`,所以⽤php的http发包了

得到密码42276606202db06ad1f29ab6b4a1307f,登录

info.php(出题人:这⾥我犯了个错,admin.php的跳转后⾯没die掉,不⽤登录也⾏,并且我⼿⽋多加⼀个 info.php使得有⼀个队的师傅⽤PHP_SESSION_UPLOAD_PROGRESS拿shell然后把后⾯的内⽹代理出来打了 确实厉害)

继续,可以猜测是通过php info.php执⾏的,/etc/passwd能读取⽂件 /flflag发现提示flflag在内⽹

这⾥没有ssrf的地⽅,结合提示"注意server和其配置⽂件"。那么⾸先去看server,burp抓⼀下 返回包会发现server是nginx 1.17.6(在1.17.7之前版本中的error_page 存在⾛私漏洞)

https://v0w.top/2020/12/20/HTTPsmuggling/#5-1-%EF%BC%88CVE-2019-20372%E F%BC%89Nginx-error-page-%E8%AF%B7%E6%B1%82%E8%B5%B0%E7%A7%81% E6%BC%8F%E6%B4%9E

并且有个⼩细节是访问404的路由会⾃动跳转到404.php。先继续看他的配置⽂件,这⾥可以通 过读/proc/self/environ得到当前⽬录/usr/local/nginx/html

nginx配置⽂件/usr/local/nginx/conf/nginx.conf

发现nginx反代

server_name是weblogic,尝试⾛私⼀下(这⾥⽤burp⾛私着实不太⽅便。所以我下⾯⽤的 socket)注:图为本地环境

⾛私访问/console/login/LoginForm.jsp,payload为:

得到版本为12.2.1.4.0,使⽤CVE-2020-14882,%252e%252e绕过登录,回显exp直接打, socket发包

header头⾥执⾏/readflflag即可

NO.05

CheckBOT

admin.php⻚⾯

bot点击提交的URL访问⽂件触发js,判断是否是内⽹ip,vps上构造

bot可能会遇到⽹络阻塞问题,没有回显的师傅可以尝试重启靶机

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-06-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 恒星EDU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档