zoukankan      html  css  js  c++  java
  • BUUCTF | [RoarCTF 2019]Easy Calc 1

    发现:

    看一下页面源码,发现了提示WAF:

    calc.php?num=encodeURIComponent($("#content").val())
    

    $("#content").val() 的意思:

    获取id为content的HTML标签元素的值,是JQuery。

    $("#content")相当于document.getElementById("content");       

    $("#content").val()相当于 document.getElementById("content").value;

    但是无论怎么注入都是400,403和500,这里用的是一个新的点:PHP的字符串解析特性

    发现网页源码中有calc.php直接上链接http://11112-3f4892c5-4c06-4fa2-b6dc-8afd17a4ed88node3.buuoj.cn:28003/calc.php查看PHP源码:

    步骤:

    1.扫一下根目录,发现flagg文件:

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

    知识点解析:(? num=1;var_dump(scandir(chr(47))))

    ①:scandir — 列出指定路径中的文件和目录。

    ②:var_dump() —  函数用于输出变量的相关信息。

    ③:chr(47) — 是指ascii码为47的字符为/而/在linux中指的是根目录。

    ④:unm=1 — 指输入的名称为1。

    总结:输出并列出指定路径中的文件和根目录。

     2.列出flagg:

    ?%20num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))

    知识点解析:(/calc.php?%20num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103))))

    ①:file_get_contents() — 函数是用于将文件的内容读入到一个字符串中的首选方法。如果操作系统支持,还会使用内存映射技术来增强性能。

    ②:var_dump() —  函数用于输出变量的相关信息。

    ③:%20 — 空格的html编码,如果两个空格的话就是两个%20。

    ④:chr(47).chr(102).chr(49).chr(97).chr(103).chr(103) — 指的是ascii码转换为f1agg

    总结:输出calc.php文件中f1agg目录的字符串内容。

    解析:

     为什么要在num前加一个空格?

    答:假如waf不允许num变量传递字母,可以在num前加个空格,这样waf就找不到num这个变量了,因为现在的变量叫“ num”,而不是“num”。但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。

    发现过滤怎么办?

    答:用char()转ascii再进行拼接

    PHP的字符串解析特性是什么?

    答: PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:1.删除空白符  2.将某些字符转换为下划线(包括空格)【当waf不让你过的时候,php却可以让你过】


    这题还可以用:http走私

    用post模式发一个请求,出现源码

    方法二

    利用HTTP请求走私

    当我们向代理服务器发送一个比较模糊的HTTP请求时,由于两者服务器的实现方式不同,可能代理服务器认为这是一个HTTP请求,然后将其转发给了后端的源站服务器,但源站服务器经过解析处理后,只认为其中的一部分为正常请求,剩下的那一部分,就算是走私的请求,当该部分对正常用户的请求造成了影响之后,就实现了HTTP走私攻击。

    添加Transfer-Encoding: chunked,在消息体加几个回车

    分块传输编码(Chunked transfer encoding)是超文本传输协议(HTTP)中的一种数据传输机制,允许HTTP由网页服务器发送给客户端的数据可以分成多个部分。分块传输编码只在HTTP协议1.1版本(HTTP/1.1)中提供

    作者:gtfly

    作者用的应该是CL-TE:

    所谓CL-TE,就是当收到存在两个请求头的请求包时,前端代理服务器只处理Content-Length这一请求头。后端服务器会遵守RFC2616的规定,忽略掉Content-Length,处理Transfer-Encoding这一请求头。


    参考:

    https://blog.csdn.net/weixin_44077544/article/details/102630714

    https://www.freebuf.com/articles/web/213359.html

    https://paper.seebug.org/1048/

    https://mp.weixin.qq.com/s?__biz=MzkwNzAwMDYyNQ==&mid=2247483858&idx=1&sn=19234bf6611400ae9da5d9a49a233cde&chksm=c0deaf8cf7a9269a32d928617d0c3eb11720914c591e0dc4d017450b9ef3809f2ed6a348a1b8&mpshare=1&scene=23&srcid=1016GXIy2HOar4STCzN93JIO&sharer_sharetime=1571219697654&sharer_shareid=71cadfa52e2be93573b54a69aeddea8b#rd

    http://www.gtfly.top/2019/10/19/RoarCTF-wp.html

  • 相关阅读:
    python Database Poll for SQL SERVER
    SQLAlchemy表操作和增删改查
    flask动态url规则
    flask配置管理
    一个Flask运行分析
    Function Set in OPEN CASCADE
    Happy New Year 2016
    Apply Newton Method to Find Extrema in OPEN CASCADE
    OPEN CASCADE Multiple Variable Function
    OPEN CASCADE Gauss Least Square
  • 原文地址:https://www.cnblogs.com/SpouseLJ/p/13206362.html
Copyright © 2011-2022 走看看