CTFshow-web-红包题第二弹

CTFshow-web-红包题第二弹

打开靶场,显示如下
在这里插入图片描述
右键点击源代码,发现有提示
在这里插入图片描述
在url后添加?cmd=phpinfo(),进行远程代码执行

?cmd=phpinfo()

在这里插入图片描述
关键点是两个正则表达式,分别为preg_match(“/[A-Za-oq-z0-9 ] + / " , ]+/", ]+/",cmd)和preg_match(”/~|!|@|#|%|^|&|*|(|)|\(|\)|-|_|{|}|[|]|'|“|:|,/”,$cmd),这两个正则将除了p字母以外的所有字母数字和一些特殊符号进行了过滤。

可以选择上传一个脚本文件进行执行,先用burpsuite抓包获取请求头

PHP文件上传机制

在Linux的PHP环境下面,客户端(页面)如果对服务器上传文件,会先生成一个临时文件,存放在根目录下面的tmp文件夹下面,也就是/tmp目录下面.之后再对临时文件进行处理,比如是否将其存储到本地.无论服务器是否存在一个上传文件的请求,只要我们上传了一个临时文件,就一定会在该目录下面生成临时文件,但是会在生成后立刻删除.这个临时文件有一个特征,就是以php开头,后面跟6个随机字符,比如php123abc.因此我们可以使用通配符*对该文件进行匹配.
在这个题里面,我们可以利用其中的时间间隙,再上传文件的同时,使用cmd命令执行脚本文件.

媒体类型multipart/form-data的数据体由多个部分组成,这些部分由一个固定边界值(Boundary)分隔。

如果我们获取了一个HTTP的数据包,我们可以通过构造一个post请求上传一个文件。先把GET文字改成POST,之后在请求头加入
Content-Type: multipart/form-data; boundary=---------------------------10242300956292313528205888 这是一个
HTTP 请求头中的一部分,用于指定请求体的格式和边界。后面上传的脚本文件内容,就是使用上方定义的边界符号进行识别和区分。

在这里插入图片描述

上面两行表示了文件的信息,中间用一种注释表示使用bash解释器,最后一行是文件的内容.于是数据包变成了这个样子:
在这里插入图片描述

这样子就可以对服务器上传一个脚本文件. 接下来就是对cmd进行绕过,使上传的文件得以执行,这就涉及php的命令执行.

php命令执行

php的上传接受multipart/form-data,然后会将它保存在临时文件中。php.ini中设置的upload_tmp_dir就是这个临时文件的保存目录。linux下默认为/tmp。也就是说,只要是php接收到上传的POST请求,就会保存一个临时文件,如果这个php脚本具有“上传功能”那么它将拷贝走,无论如何当脚本执行结束这个临时文件都会被删除。另外,这个php临时文件在linux系统下的命名规则永远是phpXXXXXX

php里面有很多执行外部命令的函数,如exec等.
反引号也可以用于执行外部命令,并把执行完成的结果以字符串的形式返回,而本题未过滤反引号,可以进行利用.除此之外,我们还需要对执行结果进行输出,但是输出函数以及全部被过滤.这就涉及段标记语法了.<?= ... ?> 是在 PHP 中的一种短标记(short tag)语法,也被称为echo短标记,它可以简化输出变量或表达式的操作。使用<?= ... ?>就相当于echo … 使用短标记需要<?标签,因此我们构造cmd=?><?=`.+/??p/p?p??????`;先把前面的<?php闭合,再与后面的?>形成一个短标签.再PHP里面.在Linux里面, .(点命令)使source命令的别名,用于读取并且在当前的shell中执行文件中的命令,加号+等价于空格,于是通过构造.+/执行后面的脚本文件.之后就是通过模糊匹配,用?通配符对上传的文件进行匹配,tmp目录写成??p,php临时文件写成p?p???,最后变成cmd=?><?=.+/??p/p?p??????;

在这里插入图片描述

根据提供的引用内容,这道红包的目标是找到flag。在源代码中,我们可以看到一个GET参数cmd,它可以用来执行命令。然后,在引用中,我们可以看到一个POST请求,其中cmd参数被设置为`. /??p/p?p??????`,这可能是一个命令路径。通过修改POST请求,我们可以尝试找到flag.txt文件。根据引用中的内容,根目录下有flag.txt文件,因此我们可以尝试执行`ls /`命令来列出根目录中的文件。请记住,这是一个漏洞目,仅用于学习和研究目的,不要在未授权的情况下尝试攻击他人的服务器。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [CTFshow--web--红包第二](https://blog.csdn.net/weixin_45908624/article/details/128786662)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [CTFSHOW 红包第二](https://blog.csdn.net/qq_46091464/article/details/107954930)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值