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可能会遇到⽹络阻塞问题,没有回显的师傅可以尝试重启靶机
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有