RoarCTF 2019-WEB-Easy Cal

漏洞复现地址
https://buuoj.cn/challenges#[RoarCTF%202019]Easy%20Calc

考察点:
(1)HTTP请求走私
(2)PHP的字符串解析特性Bypass

0x01 HTTP请求走私
大多数HTTP请求走私漏洞的出现是因为HTTP规范提供了两种不同的方法来指定请求的结束位置:Content-Length标头和Transfer-Encoding标头。
同时使用两种不同的方法时,Content-Length无效。当使用多个服务器时,对客户端传入的数据理解不一致时,就会出现有些服务器认为Content-Length的长度有效,有些以Transfer-Encoding有效。而一般情况下,反向代理服务器与后端的源站服务器之间,会重用TCP链接。这样超出的长度就会拼接到下一次请求进行请求,从而导致HTTP请求走私漏洞。
如果收到同时存在Content-Length和Transfer-Encoding这两个请求头的请求包时,在处理的时候必须忽略Content-Length。

相关PHP函数

scandir() 函数
返回指定目录中的文件和目录的数组。


base_convert() 函数
在任意进制之间转换数字。
image

dechex() 函数:把十进制转换为十六进制。
hex2bin() 函数:把十六进制值的字符串转换为 ASCII 字符。
readfile() 函数
输出一个文件。
该函数读入一个文件并写入到输出缓冲。若成功,则返回从文件中读入的字节数。若失败,则返回 false。您可以通过 @readfile() 形式调用该函数,来隐藏错误信息。
image

HTTP走私绕过WAF
  1. HTTP请求走私测试(CL-CL漏洞)
    两个CL直接导致前端转发的服务器400,而且完整转发了post包给后端。


    image.png
  2. HTTP请求走私测试(CL-TE漏洞)
    CL和TE直接导致前端转发的服务器400,完整转发了post包给后端。


    image.png

构造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(读取根目录得到的)

1、列目录
首先要使用scandir()函数,尝试构造payload列举根目录下的文件。
scandir()可以用base_convert()函数构造,但是利用base_convert()只能解决a~z的利用。
因为根目录需要/符号,且不在a~z,所以需要hex2bin(dechex(47))这种构造方式,dechex() 函数把十进制数转换为十六进制数。hex2bin() 函数把十六进制值的字符串转换为 ASCII 字符。当然,也可以直接用chr()函数。

var_dump(base_convert(61693386291,10,36)(chr(47)))
image.png

2、读取flag

payload

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

PHP字符串解析特性绕过WAF

输入时发现num只能输入数字,输入字符无法解析。
PHP需要将所有参数转换为有效变量名,因此在解析查询字符串时,它会做两件事:1,删除空白字符;2,将某些字符转换为下划线(包括空格)


现在的变量叫“ num”,而不是“num”。但php在解析的时候,会先把空格给去掉,这样代码还能正常运行,还上传了非法字符。
然后再利用scandir()函数,列出 参数目录 中的文件和目录。
首先,要先扫根目录下的所有文件,也就是是scandir("/"),因为/被过滤了,所以直接用chr(“47”)绕过。
发现flagg文件

http://node3.buuoj.cn:27909/calc.php? num=1;var_dump(scandir(chr(47)))
image.png
calc.php? num=1;var_dump(readfile(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))

参考地址
[https://xz.aliyun.com/t/6654#toc-1]

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • PHP常用函数大全 usleep() 函数延迟代码执行若干微秒。 unpack() 函数从二进制字符串对数据进行解...
    上街买菜丶迷倒老太阅读 1,479评论 0 20
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,694评论 0 3
  • 总结了一些开发中常用的函数: usleep() //函数延迟代码执行若干微秒。 unpack() //函数从二进制...
    ADL2022阅读 530评论 0 3
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 4,657评论 0 5
  • 一、会话控制(session与cookie) 1.cookie简介 Cookie是存储在客户端浏览器中的数据,我们...
    空谷悠阅读 690评论 0 5

友情链接更多精彩内容