第十周buuctf

本文探讨了一道关于文件备份和PHP代码审计的挑战题目,涉及数字类型检查、字符串操作技巧以及文件路径绕过。参赛者需要理解is_numeric和intval函数,并利用PHP字符串解析特性绕过WAF限制,成功访问加密文件。

[ACTF2020 新生赛]BackupFile

题目类型:备份文件

知识点

==是不判断二者是否是同一数据类型,而===是更为严格的比较,它不仅要求二者值相等,而且还要求它们的数据类型也相同。
常见的备份文件后缀:.rar .zip .7z .tar .gz .bak .swp .txt .html
is_numeric函数用于检测变量是否为数字或数字字符串
intval() 函数用于获取变量的整数值
数字 加 字母等非数字转换

var s = ‘234string’;
parseInt(s); //234
parseFloat(s); //234.0

在这里插入图片描述
用dirsearch扫一下目录:python dirsearch.py -u 3943f78f-4c3d-4d7c-8728-9f59f4527095.node4.buuoj.cn:81 -e php

访问index.php.bak
在这里插入图片描述
出现PHP代码

<?php
include_once "flag.php";

if(isset($_GET['key'])) {
    $key = $_GET['key'];
    //is_numeric函数用于检测变量是否为数字或数字字符串
    if(!is_numeric($key)) {
        exit("Just num!");
    }
    //intval() 函数用于获取变量的整数值
    $key = intval($key);
    $str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
    if($key == $str) {
        echo $flag;
    }
}
else {
    echo "Try to find out source file!";
}



代码审计:通过key变量get传参,要求此变量必须是数字,且取整数之后值为123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3
取key的值为123

在这里插入图片描述

[RoarCTF 2019]Easy Calc

加粗样式
查看源码
在这里插入图片描述
抓包
在这里插入图片描述
发现calc.php,访问一下
在这里插入图片描述
有个黑名单

上面是我所有收集到的信息,然后源码有部分也看不懂,不知道该怎么下手,甚至还不知道这是个什么类型的题目,下面开始学习大佬

知识点:

chr() 函数:从指定的 ASCII 值返回字符。 ASCII 值可被指定为十进制值、八进制值或十六进制值。八进制值被定义为带前置0,而十六进制值被定义为带前置 0x。
file_get_contents() 函数:把整个文件读入一个字符串中。该函数是用于把文件的内容读入到一个字符串中的首选方法。如果服务器操作系统支持,还会使用内存映射技术来增强性能。
PHP的字符串解析特性:PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:1.删除空白符 2.将某些字符转换为下划线(包括空格)【当waf不让你过的时候,php却可以让你过】。假如waf不允许num变量传递字母,可以在num前加个空格,这样waf就找不到num这个变量了,因为现在的变量叫“ num”,而不是“num”。但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。
scandir() 函数:返回指定目录中的文件和目录的数组。

查看源码

在这里插入图片描述
$(“#content”).val()相当于 document.getElementById(“content”).value;
方法一:PHP的字符串解析特性
尝试一下/calc.php?num=phpinfo()
在这里插入图片描述
PHP的字符串解析特性:PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:1.删除空白符 2.将某些字符转换为下划线(包括空格)【当waf不让你过的时候,php却可以让你过】。假如waf不允许num变量传递字母,可以在num前加个空格,这样waf就找不到num这个变量了,因为现在的变量叫“ num”,而不是“num”。但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。

num前加个空格:/calc.php? num=phpinfo()

在这里插入图片描述
由于“/”被过滤了,所以我们可以使用chr(47)来进行表示,进行目录读取:

calc.php? num=1;var_dump(scandir(chr(47)))

在这里插入图片描述
构造

:/flagg——chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)
payload:calc.php? num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))

在这里插入图片描述

[极客大挑战 2019]BuyFlag

在这里插入图片描述
在这里插入图片描述
查看源码

在这里插入图片描述
代码审计:以post方式传参,money=100000000,password满足等于404,但是不能为数字,所以password等于404+任意字符
使用burpsuite抓包

总结一下需要满足四个条件:前面提示必须是cuit的学生;以post方式传参;money=100000000;password=404a。

所以修改cookie里的user=0user=1

在这里插入图片描述

password=404a&money=1e9

在这里插入图片描述

[护网杯 2018]easy_tornado

首先出来三个链接
在这里插入图片描述

flag.txt

在这里插入图片描述

提示flag在/fllllllllllllag中
知道了第一个条件,filename=/fllllllllllllag
查看welcome.txt
在这里插入图片描述

查看hints.txt
在这里插入图片描述

分析一下
在这里插入图片描述

这里有两个参数,第一个参数filename,文件的名称,我们通过查看flag.txt文件知道,藏flag的文件名为fllllllllllllag;第二个参数filehash,翻译一下:文件哈希,也就是加密了

加密方法在第三个文件中md5(cookie_secret+md5(filename)),将cookie_secret+filename的值md5加密后的值,整体再md5加密;然后把最后的值赋给filehash

现在最重要的一步就是获取cookie_secret的值,这个我不会。看一下大佬们怎么做

在试的过程中,尝试只输入filename的值而忽略filehash,结果出来以下内容,URL变成/error?msg=Error

render是python中的一个渲染函数,也就是一种模板,通过调用的参数不同,生成不同的网页 ,如果用户对render内容可控,不仅可以注入XSS代码,而且还可以通过{{}}进行传递变量和执行简单的表达式。
Tornado是一种 Web 服务器软件的开源版本。Tornado 和现在的主流 Web 服务器框架(包括大多数 Python 的框架)有着明显的区别:它是非阻塞式服务器,而且速度相当快。

大佬解法:
由于是python的一个模板,首先想到的就是模板注入{{}},最终找到的位置是报错网页(随便访问一个文件是更改它的签名就可以进入),里面的参数msg。
render是模板注入,经过测试发现过滤了。构造payload:/error?msg={{1*2}}

在这里插入图片描述

在tornado模板中,存在一些可以访问的快速对象,这里用到的是handler.settings,handler指向RequestHandler,而RequestHandler.settings又指向self.application.settings,所以handler.settings就指向RequestHandler.application.settings了,这里面就是我们的一些环境变量

构造payload/error?msg={{handler.settings}}

在这里插入图片描述
找到cookie_secret为6e6e371d-7445-46db-8066-46e0e25c8b7a

filename的值md5加密后为3bf9f6cf685a6dd8defadabfb41a03a1
cookie_secret+filename加密后的值为9ff081746c35f525a315a313ac1a00d8
构造payload:/file?filename=/fllllllllllllag&filehash=9ff081746c35f525a315a313ac1a00d8

在这里插入图片描述

[BJDCTF2020]Easy MD5

在这里插入图片描述
查看源代码没有什么发现,抓包看一看

在这里插入图片描述
线索暗示:Hint: select * from 'admin' where password=md5($pass,true)

md5(string,raw)

string 必需。规定要计算的字符串。
raw 可选。规定十六进制或二进制输出格式: TRUE - 原始 16 字符二进制格式;FALSE - 默认。32 字符十六进制数

现在需要构造or来绕过password,md5(ffifdyop,true)='or'6\xc9]\x99\xe9!r,\xf9\xedb\x1c
原sql查询语句则变为select * from user where username ='admin' and password =''or'6\xc9]\x99\xe9!r,\xf9\xedb\x1c'即可绕过
类似的字符串还有:md5(129581926211651571912466741651878684928,true)=\x06\xdaT0D\x9f\x8fo#\xdf\xc1'or'8
在输入ffifdyop后,出现

在这里插入图片描述
查看源码:
在这里插入图片描述
这里就需要知道一个知识点:md5加密后的值开头为0E是他们的值相等

/levels91.php?a=s878926199a&b=s155964671a

出现以下提示

在这里插入图片描述
我们访问levell14.php
在这里插入图片描述
这里用php数组绕过,由于哈希函数无法处理php数组,在遇到数组时返回false,我们就可以利用false==false成立使条件成立。

param1[]=1&param2[]=2

在这里插入图片描述

03-11
<think>好的,用户想要查找关于BUUCTF网络安全挑战赛的题目和解决方案。首先,我需要回顾用户提供的引用内容,看看是否有相关的信息。 引用[1]提到了注册账号、选择挑战场景、学习相关知识等步骤,但并没有具体题目或解决方案。引用[2]讨论了不同赛题类型的侧重点,比如PWN、Reverse、Crypto等,这对理解题目类型有帮助。引用[3]则是一个具体的Misc题目解析,涉及到NTFS数据流的处理,这可以作为解决方案的一个例子。 接下来,我需要根据这些信息,整理出BUUCTF常见的题目类型和对应的解决思路。例如,Web类可能需要SQL注入或XSS的知识,Crypto可能需要数学算法,Misc则可能涉及隐写术或数据恢复。然后,需要提供具体的解题步骤示例,比如引用[3]中的NTFS数据流题目,使用WinRAR和特定工具解决。 同时,用户可能希望了解如何系统地准备和解决这些题目,所以需要分步骤说明,比如注册、学习、解题方法等。另外,生成的相关问题要覆盖题目类型、学习资源、解题工具和比赛策略等方面,确保全面帮助用户。 最后,确保回答符合格式要求,使用正确的LaTeX语法,结构清晰,引用标识正确添加。还要检查是否有遗漏的信息,比如是否需要更多例子或更详细的步骤,确保用户能根据回答顺利找到题目解决方案。</think>### BUUCTF网络安全挑战赛题目类型与解决方案 BUUCTF网络安全竞赛题目覆盖Web安全、密码学、逆向工程(PWN/Reverse)、隐写术(Misc)等领域。以下是常见题型及解决思路: --- #### 一、Web类题目 **典型题目**:SQL注入、XSS攻击、文件上传漏洞 **解决方案示例**: 1. 使用工具$sqlmap$自动化检测注入点[^1] 2. 构造Payload绕过过滤,例如:`admin' OR 1=1 -- ` 3. 利用浏览器开发者工具分析HTTP请求与响应 --- #### 二、Crypto类题目 **典型题目**:RSA加密、哈希碰撞、古典密码破译 **关键公式**: - RSA解密公式:$$m = c^d \mod n$$ **解决步骤**: 1. 分解公钥中的$n$值获取素数$p,q$ 2. 通过$d \equiv e^{-1} \mod \phi(n)$计算私钥 --- #### 三、Misc类题目 **案例参考**:[ACTF新生赛2020] NTFS数据流 **解决步骤**[^3]: 1. 使用$WinRAR$解压题目文件 2. 通过$NtfsStreamEditor2$工具提取隐藏数据流 3. 分析提取文件中的Flag信息 ```python # 示例:隐写术常用工具链 import binwalk binwalk.scan('target_file', signature=True) # 检测文件隐藏内容 ``` --- #### 四、Reverse/PWN类题目 **典型题目**:缓冲区溢出、Shellcode注入 **工具链**: - $GDB$调试器分析程序崩溃点 - $pwntools$编写自动化攻击脚本 --- ###
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值