常见的覆盖问题有哪些,判定覆盖和语句覆盖

常见的覆盖问题有哪些,判定覆盖和语句覆盖,第1张

变量覆盖与方法覆盖的区别(教你辨别kali扫描web漏洞的方法)

0x 01 sea CMS近期财务审计,官网:https://www.seacms.net。版本号是最新版本(财务审计期间)。不像这些单通道架构,这个cms财务审计很流畅,但是如果过虑就很干涩了。印象中,你好像看到三个过分担心的屏蔽网页。

360webscan(cmseasy也有一个),好像内置了两个,不道德。但这仍然是一种绕过介绍的方法。

0x02

首先了解参数传递方法。关键文档是/include/common.php,很多文档中都有。看这个文档,第114-117行:

foreach(Array('_GET ',' _POST ',' _ COOKIE ')as $ _ request){ foreach($ $ _ request as $ _ k = gt;$ _ v)$ { $ _ k } = _ runmagic quotes($ _ v);}

GET、POST、Cookie的主要参数会被一个独立实参覆盖一次,然后将值$_v赋给匹配的独立实参$ $ _ k,这里$_v会被求解,单引号会被转义。在这里,自变量可以被覆盖,换句话说,我可以操纵一些静态变量!!!我认为这是一个大问题。

接下来看第20-26行:

foreach($ _ REQUEST as $ _ k = gt;$_v){ if( strlen($_k)>0 amp ampm_eregi('^(cfg_|globals)',$_k) amp; amp!isset($ _ COOKIE[$ _ k]){ exit(' Request var not allow!');}}

这里的代码在上一步的独立变量屏蔽之前已经被过滤了,静态变量$GLOBALS和一些配备的独立变量(以$cfg_)不能被屏蔽。然而,令人担忧的是$_REQUEST,换句话说,令人担忧的只是$_POST和$_GET。在这里,您可以通过将想要覆盖的参数放入Cookie中来绕过它。比如下图中,cfg_runmode和cfg_paramset2的值都取为1。

0x03

这个想法在前一步得到了澄清,然后发现了包括common.php在内的一批文件。大概就这么多,忽略了后台管理。

例如,这种文档在自变量覆盖后由整数求解


有很多领域都有类似的解决方案。

0x04

第二个自变量包括。

在/detail/index.php文件中。在echoContent($vId)模式下,sql语句拼凑在第38行,$ row = $ dsql-->:get one(" Select d . *,p.body作为v_playdata,p.body1作为v_downdata,C. body作为v _ content from ` sea _ data ` d left join ` sea _ play data ` p on p . v _ id = d . v _ id = d . v _ id = c . v _ id where d . v _ id = ' $ vId ' ")

if($ GLOBALS[' CFG _ run mode ']= = 2 | | $ GLOBALS[' CFG _ paramset ']= = 0){ $ paras = str _ replace(getfileSuffix(),'',$ _ SERVER[' QUERY _ STRING ']);$ id = intval($ paras);$ id =(isset($ id) amp; ampis_numeric($id)?$ id:0);} else { $ id = $ $ GLOBALS[' CFG _ paramid '];}if($id==0){ showmsg('主参数丢失,请返回!', -1);退出;} echo content($ id);函数echoContent($vId){ global $dsql,$cfg_iscache,$mainClassObj,$t1,$ cfg _ user$ row = $ dsql- gt;GetOne("Select d.*,p.body作为v_playdata,p.body1作为v_downdata,c.body作为v _ content From ` sea _ data ` d left join ` sea _ playdata ` p on p . v _ id = d . v _ id = d . v _ id = c . v _ id其中d . v _ id = ' $ vId ' ");如果(!Is_array($row)){ShowMsg("内容已被删除或隐藏","../index.php ",0,10000);exit();} $ vType = $ row[' tid '];

在第23行,echoContent($id)方法被启用。查看传入的$id是如何分配的。

正如您在第16行看到的,$id=$$GLOBALS['cfg_paramid'],第二个参数屏蔽在这里执行。

这里有一个标准,if($ globals[' CFG _ run mode ']= = 2 | | $ globals[' CFG _ paramset ']= = 0),要求$cfg_runmode的值不为2,$cfg_paramset的值不为0。在这一带走动很容易。如0x02中所述,您可以通过将想要覆盖的独立变量放入Cookie中来解决这个问题。

接下来,考虑独立变量的哪些值被赋给$id。最后一步,想很多办法。将引入的代码放入主参数是通过转义来解决的。然后考虑将代码引入$_SERVER参数,可以绕过360webscan和内置过滤器。

这带来了另一个问题。$_SERVER是数字能量数组,$id=$$GLOBALS['cfg_paramid']无法根据key获取数字能量数组中的值,包括$_GET,$_POST,$GLOBALS等。而且,添加代码GET,POST会打开360webscan。

我在这里堵了很久,终于想起来一个办法。

0x05

最初,/include/common.php,第114-117行:

foreach(Array('_GET ',' _POST ',' _ COOKIE ')as $ _ request){ foreach($ $ _ request as $ _ k = gt;$ _ v)$ { $ _ k } = _ runmagic quotes($ _ v);}

这里自变量$_k在循环系统进行后没有被破坏,可以使用。将cfg_paramid=_k添加到Cookie中,$$GLOBALS['cfg_paramid']的值就是$_k的值,然后将代码添加到Cookie的最后一个主参数名中,例如:1 '和(update XML (1,concat (1,user(),1))和。$_k的值取为1 '和(update XML (1,concat (1,user(),1))和' 1),$id的值取为1 '和(update XML (1,concat (1,user(),1))和'。而且不容易被挡住或者逃脱。最终的概念验证如下:

0x06

系统漏洞已通知厂商和cnnvd,1月31日升级了最新的9.0版本,修复了系统漏洞。

有个骚想法,热烈欢迎一起讨论,不喷豪门!

文章由白帽俱乐部原创。转载请注明出处:https:/osec . org/home/detail/2222 . html。

白帽交易所从事网络信息安全,致力于互联网大数据和公司威胁情报的安全。

企业:FOFA-网络环境安全百度搜索引擎、慧眼-网络环境检索系统、NOSEC-安全信息服务平台。

给你看:网络环境测绘项目,公司财产收集,公司威胁信息,应急服务项目。

欢迎分享,转载请注明来源:聚客百科

原文地址: http://juke.outofmemory.cn/life/186926.html

()
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存