php 命令执行中 PHPSESSID 妙用


前言

之前刷CTF的时候,遇到一个命令执行的题,看大佬的WP是通过PHPSESSID传值,绕过waf,最近有时间复现了一下。


题目地址

http://39.99.135.23:9999/ ,VPS 12月10号过期,flag在web目录下的flag.php

查看源码

写得比较丑,不要太介意哈在这里插入图片描述
没禁用任何函数,system() 可以直接用
在这里插入图片描述
但是过滤了flag,不能使用cat flag.php
在这里插入图片描述


使用PHPSESSID绕过限制

首先,设置 PHPSESSID 的值为 flag(本来想设置为 flag.php 的,但是不知为什么不可以,明明记得之前有这么用的,求大佬们帮忙解答)
在这里插入图片描述


然后,可以使用 session_id(session_start()) 获取 PHPSESSID 的值,即 flag,虽然没有直接得到 flag.php,但是通过拼接也很容易得到了
在这里插入图片描述
关于 session_id() 和 session_start() 简单的介绍

session_start() 启动 session
session_id() 获取 session_id

拼接payload,获取flag

?cmd=show_source(session_id(session_start()).'.php');

在这里插入图片描述

使用反引号绕过限制

其实这题还有个bug,由于没过滤反引号,可以构造如下payload

?cmd=system('cat `ls`|base64');

在这里插入图片描述
关于反引号的作用

反引号的作用就是将反引号内的Linux命令先执行,然后将执行结果赋予变量。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值