RCE与SQL漏洞的复现

打印 上一主题 下一主题

主题 721|帖子 721|积分 2163

eval长度限定突破


php eval函数参数限定在16个字符的情况下,如何拿到webshell呢
起首,我们还是先把情况搭好(此次的所有漏洞情况我都部署在Ubuntu下,我的Ubuntu下的情况是nginx+php,至于Ubuntu下的nginx+php情况我也有博客也写到,希望可以帮助到到家。在这里,我建议nginx下的html文件夹最好的用户组和用户都设置为www-data,否则之后的创建一句话木马可能不能创建,我的情况在最开始的时候用户组和用户为root,所以我在这吃了点亏,望各人引以为戒。)
  1. <?php
  2. $param = $_REQUEST['param'];
  3. if (
  4. strlen($param) < 17 && stripos($param, 'eval') === false && stripos($param, 'assert') === false
  5. ) {
  6. eval($param);
  7. }
复制代码
在这里,我们分析代码,这个PHP代码片断存在严重的安全漏洞。它接收用户输入,通过eval()函数实验输入的代码。尽管代码对输入举行了部分过滤,但这种掩护并不完全有效,可能导致代码实验攻击(例如,代码注入或长途代码实验)。
这个语句从用户的请求中获取 param 参数。$_REQUEST 包罗了 $_GET, $_POST, 和 $_COOKIE 的混淆数据。
  1. if
  2. strlen($param)<17 && stripos($param,=== false && stripos($param,'eval')'assert')
  3. false
复制代码


  • 这个条件语句查抄 $param 的长度是否小于17个字符,并且 $param 中不包罗 "eval" 和 "assert" 字符串。
  • 通过这种方式,它试图阻止一些显着的危险输入,如包罗 eval 或 assert 关键字的代码。
  1. {
  2. eval($param);
  3. }
复制代码
 eval() 函数会将传入的字符串看成PHP代码实验。
这意味着如果用户的输入通过了上述条件查抄,输入的内容会直接在服务器上实验。
第一种方法
尽管代码中试图过滤掉 "eval" 和 "assert",以及限定了输入的长度,但这并不能阻止所有可能的攻击。例如,攻击者可以尝试绕过这些过滤条件,输入一些看似无害但实际上可以实验恣意代码的内容。例如 phpinfo();

但是我们该如何天生一句话木马呢,由于他限定了eval和assert,突发奇想,因为这个情况部署在linux下,那我们可以利用``包裹代码实验啊
  1. echo `$_GET=[1]`;&1=id
复制代码
数一下16个字符,刚好限定在了17个字符以内,而我们可以传参给1,那么问题不就办理了吗
试试吧

 
这个时候,我们看了之后权限只是www-data,那我们可以创建文件
   echo `$_GET=[1]`;&1=touch /tmp/111.txt
   

 
我们既然可以创建这个,那么webshell不也可以吗,只做到这里,剩下的一句话木马的天生可以自行研究下。



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

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

西河刘卡车医

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

标签云

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