利用 PHP 特性绕 WAF 测试

这篇具有很好参考价值的文章主要介绍了利用 PHP 特性绕 WAF 测试。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在测试绕过 WAF 执行远程代码之前,首先构造一个简单的、易受攻击的远程代码执行脚本,内容如图:


第 6 行是一个比较明显的命令执行代码,第 3 行尝试拦截 system、exec 或 passthru 等函数(PHP 中有许多其他函数可以执行系统命令,这三个是最常见的)。

这个脚本部署在 Cloudflare WAF 和 ModSecurity + OWASP CRS3 之后。对于第一个测试,尝试读取 passwd 的内容;

/cfwaf.php?code=system("cat /etc/passwd");


可以看到,被 CloudFlare 拦截了,我们可以尝试使用未初始化变量的方式绕过,比如:

cat /etc$u/passwd


Cloudflare WAF 已被绕过,但是由于脚本检查敏感函数,所以被脚本拦截,那么如何绕过脚本的函数检测呢?我们看看关于字符串的 PHP 文档:

https://secure.php.net/manual/en/language.types.string.php

PHP 字符串转义序列:

  • [0–7]{1,3} 八进制表示法的字符序列,它会自动溢出以适应一个字节(例如“\400”===“\000”)

  • \x[0–9A-Fa-f]{1,2} 十六进制字符序列(例如“\x41”)

  • \u{[0–9A-Fa-f]+} Unicode 代码点序列,将作为该代码点的 UTF-8 表示输出到字符串(在 PHP 7.0.0 中添加)

不是每个人都知道 PHP 表示字符串的语法,而“PHP 变量函数”则成为我们绕过过滤器和规则的瑞士军刀。

【----帮助网安学习,以下所有学习资料免费领!加vx:yj009991,备注 “博客园” 获取!】

 ① 网安学习成长路径思维导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析报告
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权威CISSP 认证考试指南+题库
 ⑥ 超1800页CTF实战技巧手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)

PHP变量函数

PHP 支持变量函数的概念。这意味着如果变量名后面附加了圆括号,PHP 将寻找与变量求值结果同名的函数,并尝试执行它。除其他事项外,这可用于实现回调、函数表等。

这意味着语法如 $var(args); 和 "sting"(args; 等于 func(args); 。如果我可以通过使用变量或字符串来调用函数,则意味着我可以使用转义序列而不是函数名。这里有一个例子:


第三种语法是十六进制符号的转义字符序列,PHP 将其转换为字符串“system”,然后使用参数“ls”转换为函数系统。让我们尝试使用易受攻击的脚本:


此技术不适用于所有 PHP 函数,变量函数不适用于 echo、print、unset()、isset()、empty()、include、require 。利用包装函数将这些构造中的任何一个用作变量函数。

改进用户输入检测

如果我从易受攻击脚本的用户输入中排除双引号和单引号等字符,会发生什么情况?即使不使用双引号也可以绕过它吗?让我们试试:

正如您在第三行看到的,现在脚本阻止在 $_GET[code] 查询字符串参数中使用“和”。我以前的有效负载现在应该被阻止:

幸运的是,在 PHP 中,我们并不总是需要引号来表示字符串。PHP 使您能够声明元素的类型,例如 $a = (string)foo; 在这种情况下,$a 包含字符串“foo”。此外,圆括号内没有特定类型声明的任何内容都被视为字符串:

在这种情况下,我们有两种方法可以绕过新过滤器:第一种是使用类似 (system)(ls) 的方法;但是我们不能在代码参数中使用“system”,所以我们可以像 (sy.(st).em)(ls); 一样连接字符串。第二种是使用 $GET 变量。如果我发送像 ?a=system&b=ls&code=$GETa 这样的请求;结果是:$GET[a] 将替换为字符串“system”,$GET[b] 将替换为字符串“ls”,我将能够绕过所有过滤器!

让我们尝试使用第一个有效负载 (sy.(st).em)(whoami);

和第二个有效载荷 ?

?a=system&b=cat+/etc&c=/passwd&code=$\_GET[a]($\_GET[b].$\_GET[c]);

在这种情况下,没有用,但您甚至可以在函数名称和参数内部插入注释(这可能有助于绕过阻止特定 PHP 函数名称的 WAF 规则集)。以下所有语法均有效:

get_defined_functions 函数

此 PHP 函数返回一个多维数组,其中包含所有已定义函数的列表,包括内置(内部)函数和用户定义函数。内部函数可以通过 $arr[“internal”] 访问,用户定义的函数可以使用 $arr[“user”] 访问。例如:

这可能是另一种无需使用其名称即可访问系统功能的方法。如果我对“系统”进行 grep,我可以发现它的索引号并将其用作我的代码执行的字符串:

显然,这应该对我们的 Cloudflare WAF 和脚本过滤器有效:

字符数组

PHP 中的每个字符串都可以用作字符数组(几乎像 Python 那样),您可以使用语法 $string[2] 或 $string[-3] 引用单个字符串字符。这可能是另一种规避阻止 PHP 函数名称的规则的方法。例如,使用这个字符串 $a=”elmsty/ “; 我可以编写语法系统(“ls /tmp”);

如果幸运的话,您可以在脚本文件名中找到所需的所有字符。使用相同的技术,您可以使用类似的方法选择所需的所有字符

OWASP CRS3

有了 OWASP CRS3,一切都变得更难了。首先,使用之前看到的技术,我只能绕过第一个偏执级别,这太神奇了!因为 Paranoia Level 1 只是我们可以在 CRS3 中找到的规则的一小部分,所以这个级别旨在防止任何误报。对于 2 级偏执狂,由于规则 942430“受限 SQL 字符异常检测(args):超出特殊字符数”,所有事情都变得困难。我能做的只是执行一个不带参数的命令,如“ls”、“whoami”等。但我无法像使用 Cloudflare WAF 那样执行类似 system(“cat /etc/passwd”) 的命令:


更多网安技能的在线实操练习,请点击这里>>

 文章来源地址https://www.toymoban.com/news/detail-482160.html

到了这里,关于利用 PHP 特性绕 WAF 测试的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 远程代码执行漏洞的利用与防御

    全称:remote command/code execute 分为远程命令执行和远程代码执行 1.命令执行漏洞: 直接调用操作系统命令 2.代码执行漏洞: 靠执行脚本代码调用操作系统命令 一般出现这种漏洞,是因为应用系统从设计上需要给用户提供指定的远程命令操作的接口,比如我们常见的路由器、防

    2024年02月15日
    浏览(33)
  • CVE-2019-11043(PHP远程代码执行漏洞)复现

    今天继续给大家介绍渗透测试相关知识,本文主要内容是CVE-2019-11043(PHP远程代码执行漏洞)复现。 免责声明: 本文所介绍的内容仅做学习交流使用,严禁利用文中技术进行非法行为,否则造成一切严重后果自负! 再次强调:严禁对未授权设备进行渗透测试! CVE-2019-11043漏

    2024年02月06日
    浏览(37)
  • PHP特性之CTF中常见的PHP绕过

    目录 一、关于md5()和sha1()的常见绕过 1、使用数组绕过 2、 使用特殊字符串绕过 二、strcmp绕过 三、switch绕过 四、intval绕过 人工智能 https://www.captainbed.cn/myon/ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   正文开始   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 知识介绍: 1、对于php强比较和弱比较:md5(),sha1()函

    2024年02月07日
    浏览(30)
  • 利用Fastcgi+PHP-FPM非授权访问实现代码执行

    目录 Fastcgi Record Fastcgi Type PHP-FPM(FastCGI进程管理器) Nginx(IIS7)解析漏洞 security.limit_extensions配置 漏洞演示 今天要和大家分享的是利用Fastcgi和PHP_FPM实现未授权访问实现代码执行,首先我们需要知道cgi、fastcgi和php-fpm这些都是什么。 什么是CGI CGI全称是“公共网关接口”(Co

    2024年01月21日
    浏览(37)
  • PHP-CGI远程代码执行漏洞(CVE-2012-1823)

    0x01 漏洞介绍 这个漏洞简单来说,就是用户请求的 querystring ( querystring 字面上的意思就是查询字符串,一般是对http请求所带的数据进行解析,这里也是指http请求中所带的数据)被作为了 php-cgi 的参数,最终导致了一系列结果。 CGI 即通用网关接口( Common Gateway Interface ),它是

    2024年02月05日
    浏览(42)
  • 远程代码执行渗透测试—Server2128

    远程代码执行渗透测试 任务环境说明: √ 服务器场景:Server2128(开放链接)     √服务器场景操作系统:Windows     √服务器用户名:Administrator密码:p@ssw0rd 1.找出靶机桌面上文件夹1中的文件RCEBackdoor.zip,使用静态 反编译 工具IDA对该压缩包中的程序进行分析,根据提示

    2024年02月07日
    浏览(31)
  • CTFHub笔记之技能树RCE:eval执行、文件包含、远程包含、php://input、读取源代码

    小白一个,记录解题过程,如有错误请指正! 知识点:         eval():把字符串 code 作为PHP代码执行。函数eval()语言结构是非常危险的,因为它允许执行任意 PHP 代码。它这样用是很危险的。如果您仔细的确认过,除了使用此结构以外别无方法, 请多加注意,不要允许传入

    2024年02月01日
    浏览(36)
  • CVE-2022-30190分析以及复现和POC利用 //Microsoft Office MSDT 远程代码执行漏洞

    在微软官方的介绍里,是从 Word 等调用应用程序使用 URL 协议调用 MSDT 时存在远程执行代码漏洞。成功利用此漏洞的攻击者可以使用调用应用程序的权限运行任意代码。 意思是恶意 Word 文档可以使用远程模板功能从远程服务器获取 HTML 文件,并且 HTML 代码可以使用 Microsoft 的

    2024年02月04日
    浏览(50)
  • PHP利用PCRE回溯次数限制绕过某些安全限制实战案例

    目录 一、正则表达式概述 有限状态自动机 匹配输入的过程分别是: DFA(确定性有限状态自动机) NFA(非确定性有限状态自动机) 二、回溯的过程 三、 PHP 的 pcre.backtrack_limit 限制利用 例题一 回溯绕过步骤 : 1、运行结果: 可见无法匹配 2、尝试匹配:依旧无法匹配 3、再

    2024年02月13日
    浏览(26)
  • mysql waf绕过-WAF Bypass技巧(2)

     数据库waf绕过的一些玩法 WAF Bypass技巧(0)_luozhonghua2000的博客-CSDN博客  WAF绕过-WAF Bypass技巧(1)_luozhonghua2000的博客-CSDN博客  数据库特性 第一篇: Mysql数据库特性 0x01 前言 我们经常利用一些数据库特性来进行WAF绕过。在Mysgl中,比如可以这样       位置一: 参数和union之间的位

    2024年02月08日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包