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,最起码在这道题目里面并没有要求传递参数。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |