代码执行漏洞
代码执行漏洞利用
ZZZPHP1.6 远程代码执行漏洞分析
漏洞点函数
此处如果能控制$ifstr
就可以进行闭合,执行恶意代码
parserIfLabel函数
将传入的参数进行正则匹配,当匹配通过时继续往下走
下面并没有对恶意代码内容进行过滤
跟踪parserIfLabel函数
查看它的参数是在哪里传入的
此处将parserCommom函数
传入的参数作为参数,来调用parserIfLabel函数
继续跟踪parserCommom函数
查看它的参数是在哪里传入的
此处parserCommom函数
的参数值是通过load_file函数
的结果进行赋值的
继续跟踪load_file函数
此函数的功能就是载入对应路径的文件,并返回文件内容
也就是载入此处传入的$tplfile变量
中的路径的文件,并返回文件内容
继续找变量$tplfile
的值是从哪里赋来的
$tplfile
的值是通过一个switch
语句根据变量$location
的值进行判断匹配然后赋值的,TPL_DIR
为绝对路径
$location
变量的值又是通过getlocation函数
返回的
跟踪getlocation函数
,此函数的作用就是返回get
请求方式url
中的最后一个文件名
例如:http://127.0.0.1/zzzphp/search.html
返回的就是search
复现
找到serach
的页面
此页面就是一个模板
点击编辑可以对此页面的模板内容进行编辑
将我们的恶意代码{if:phpinfo()};{end if}
随便插入
分析:
1.当我们插入恶意语句后,getlocation函数
获取url
最后的文件名称为search
赋值给变量$location
2.switch
语句判断变量$location
中的值为search
,将当前绝对路径TPL_DIR
和search.html
拼接起来赋值给$tplfile变量
3.load_file函数
去读取$tplfile变量
中存放路径对应的文件的内容,并返回给$zcontent变量
中
4.$zcontent变量
当做参数传入parserCommom函数
执行
5.parserCommom函数
中定义将参数,也就是$zcontent变量
,传入parserIfLabel函数
来执行
6.parserIfLabel函数
通过正则表达式将恶意代码{if:phpinfo()};{end if}
进行匹配筛选,将筛选出来的字符串phpinfo()
赋值给变量$ifstr
7.parserIfLabel函数
通过eval
将$ifstr
中的恶意代码phpinfo()
进行执行