加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

getshell不用英文数字

发布时间:2020-12-15 23:14:38 所属栏目:安全 来源:网络整理
导读:getshell不用英文字母和数字 上代码 实际代码没有echo strlen($code);我测试的时候加上去的 思路是eval执行getFlag函数。 过滤了字母和数字,长度得小于40 直接看payload吧: ?code=$_="`{{{"^"?/";${$_}[_](${$_}[__]);_=getFlag 这里给大家说说我的疑惑: ①

getshell不用英文字母和数字

上代码

实际代码没有echo strlen($code);我测试的时候加上去的

思路是eval执行getFlag函数。

过滤了字母和数字,长度得小于40

直接看payload吧:

?code=$_="`{{{"^"?<>/";${$_}[_](${$_}[__]);&_=getFlag

这里给大家说说我的疑惑:

①$_是什么玩意?  _是变量的名字。这句话的意思是定义了个变量,名字叫做_(你想问为什么起个这么别扭的名字那就去搜一下php变量命名规则)
②"`{{{"^"?<>/"实际是代表了双引号里面四个值对应异或,异或后的结果是_GET  
③${$_}[_](${$_}[__]),按照$_是_GET拼接就好了。$_GET[_]($_GET(__))  
④不是说过滤了英文字母了吗?为什么后边还有getFlag。&是传递参数是的分割符,code确实是过滤了英文字符,但是&_=getFlag中_是变量,他并没有过滤。    
⑤{}是个省力的操作,不需要用.再来连接
⑥他是怎么执行的?
@eval($_=_GET;$_GET[_]($_GET(__));&_=getFlag);  
这个代码可以直接看做  
@eval($_GET[_]($_GET(__));&_=getFlag);  
进一步变为  
@eval(getFlag($_GET(__)););

我现在不明白getFlag()括号里的$_GET(__)有什么用,我直接去掉()里面的也可以成功的得到flag,最起码在这道题目里面并没有要求传递参数。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读