前言:
之前比赛没有打,本来想24国赛赛前准备做做题选择这个来练习一下,但是做的过程中发现难度过大复现有点挑战(未完)
一、realrce
描述:在和队友的测试中不断缝缝补补的辣鸡waf,师傅们看看还有没有其他打法
考点:js原型链污染
参考资料:JavaScript原型链污染原理及相关CVE漏洞剖析、
下载附件得到源码,找到关键点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| app.post('/', function (req, res) { let msg = req.body.msg; //从请求体(req.body)中提取名为msg的字段,并将其赋值给变量msg
let msgString = convertToString(msg); //将变量msg转换为字符串格式,并将结果赋值给变量 msgString if (!waf(msgString)) { try { const msg_rce = {}; merge(msg_rce, msg); if (cmd_rce && Door_lock(cmd_rce)) { try { const result = proc.execSync(cmd_rce.replace(/\r?\n/g,"").replace(/[a-zA-Z0-9 ]+=[a-zA-Z0-9 ]+/g,"114514").replace(/(\$\d+)|(\$SHELL)|(\$_)|(\$\()|(\${)/g,"114514").replace(/(\'\/)|(\"\/)|(\"\.)|(\"\.)|(\'~)|(\"~)|(\.\/+)/,"114514")); res.render('index', { result }); } catch (error) { res.render('index', { error: error.message }); } } else { res.render('index', { result: "this is a lock" }); } } catch (error) { res.render('index', { result: "无事发生" }); } } else { res.render('index', { result: "this is a waf" }); } })
|
第一层waf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| function waf(input_code) { bypasspin = /%[0-9a-fA-F]{2}/i; //匹配 URL 编码的字符 const bypasscode = bypasspin.test(input_code); //使用正则表达式bypasspin来测试输入字符串input_code是否包含匹配的模式 if (bypasscode) { try { return waf(decodeURIComponent(input_code)); //尝试解码输入字符串,递归调用waf确保所有层次的URL编码字符都被解码 } catch (error) { //解码过程中发生错误,则进入 catch 块 console.error("Error decoding input: ", error); //打印错误信息 return false; } } const blacklist = [/__proto__/i, /constructor/i, /prototype/i]; //设置黑名单 for (const blackword of blacklist) { /循环遍历blacklist数组中的每个正则表达式 if (blackword.test(input_code)) { //检查input_code是否匹配当前的黑名单关键字 blackword return true; } } return false; }
|
二、EzPenetration
描述:题目源自真实渗透案例
提示1:flag写入方式已修改。flag在wp那个机器的 /flag
提示2:数据库里 的 邮箱key已更改为管理员密码,拿到后可直接登录
考点:
参考资料:【网安神器篇】——WPScan漏洞扫描工具、活动日历注册 < 2.7.6 - 未经身份验证的 SQL 注入
进去页面后可以看到一个搜索框搜索个1,猜测这题的考点可能是sql注入(但是用sqlmap没有跑出来)

尝试了半天发现应该就是sql注入了但是基础的那几个试了一遍过去都没用(完全没有思路了)
看了一下wp思路就是需要用sql注入得到管理员邮箱及其授权码
用wappalyzer查看一下发现网站的CMS是wordpress,数据库是mysql的(那就有可能是wordpress里的一种sqlz注入漏洞)

看了一下wp,用wpscan扫描网站漏洞(不是哥们)
1
| wpscan --url http://node5.buuoj.cn:26114/ --api-token=JOZ43JQiv5HB49X1CN9HUKOXGAaVaKo7aOwIasinEpY
|

扫出来了一堆洞但是不知道还存不存在(有些是误报得自己判断),选择sql的漏洞进行一个一个的尝试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| WP < 6.0.2 - SQLi via Link API
WP < 6.0.3 - Reflected XSS via SQLi in Media Library
WP < 6.0.3 - SQLi in WP_Date_Query
Email Subscribers & Newsletters < 5.3.2 - Subscriber+ Blind SQL injection
Icegram Express < 5.5.1 - Subscriber+ SQLi
Icegram Express - Email Subscribers, Newsletters and Marketing Automation Plugin < 5.7.15 - Unauthenticated SQL Injection
Email Subscribers by Icegram Express < 5.7.21 - Unauthenticated SQL Injection via hash
Icegram Express < 5.7.23 - Authenticated (Subscriber+) SQL Injection Vulnerability via options[list_id]
Icegram Express - Email Subscribers, Newsletters and Marketing Automation Plugin < 5.7.24 - Unauthenticated SQL Injection via optin
Email Subscribers by Icegram Express – Email Marketing, Newsletters, Automation for WordPress & WooCommerce < 5.7.26 - Unauthenticated SQL Injection via unsubscribe
Registrations for the Events Calendar < 2.7.6 - Unauthenticated SQL Injection https://wpscan.com/vulnerability/ba50c590-42ee-4523-8aa0-87ac644b77ed https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-24943
Registrations for the Events Calendar – Event Registration Plugin < 2.12.3 - Authenticated (Contributor+) SQL Injection
|
这边就直接用wp里的Registrations for the Events Calendar < 2.7.6 - Unauthenticated SQL Injection