代码审计之Fiyo CMS案例分享
Fiyo CMS是小型的商务电话服务及移动合作工具,由一名前职业学校学生首次开发和创建的,后者当时在RPL的SMK 10三宝垄学习。 那时他的名字不是Fiyo CMS,而是Sirion,它是Site Administration的首字母缩写。
PS:虽然网上有一些分析文章,但是通过本次审计,还是发现了一些其他的漏洞,再次做个总结,漏洞触发过程均以gif图片来展示。
审计漏洞
任意文件删除
漏洞文件位置:dapur\apps\app_config\controller\backuper.php ,实际上这个cms多处都存在这个问题。
可以非常明确的看到这个程序供的大部分功能都是用于备份,但是POST传过去的参数又不经过过滤直接和路径进行拼接(第10行),导致路径穿越,再结合 unlink 函数就导致了任意文件删除。下面看这个的攻击demo:
点击查看原图
SQL注入点
注入点一:
该cms的update方法中存在SQL注入,可以看到程序对变量 $where 直接进行了拼接,具体代码如下:
举个例子,我们对 dapur\apps\app_user\controller\status.php 文件进行SQL注入,这里直接用sqlmap进行验证,后台用户身份,访问链接 http://192.168.43.229/fiyocms/dapur/apps/app_user/controller/status.php?stat=1&id=1 保存请求包为 headers.txt ,将参数 id=1 改成id=1* ,然后使用命令sqlmap -r headers.txt –batch –dbs ,效果如下:
注入点二:
待绕过
POST /fiyocms/dapur/index.php?app=menu&view=edit&id=126'`test%23&theme=blank HTTP/1.1
Host: 192.168.199.229
Content-Length: 10
Accept: */*
Origin: http://192.168.199.229
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://192.168.199.229/fiyocms/dapur/index.php?app=menu&view=controller
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=dl8r6oo3lmi0c8lr5upveckl11
Connection: close
blank=true
响应结果
string(55) "SELECT id FROM fiyo25_menu WHERE id='126`test#' LIMIT 1"
漏洞文件在system\function.php 中的 oneQuery 方法。
function oneQuery($table,$field,$value,$output = null) {
$value = str_replace("'","",$value);
$query = FQuery($table,"$field='$value'",$output,null,null,$output,1);
return $query;
}
文件读取漏洞
这里只能读取后缀为:html、htm、xhtml、js、jsp、php、css、xml 的任意文件,漏洞文件在 dapur\apps\app_theme\libs\check_file.php 中,第5行代码未对$_GET[src] 和 $_GET[name] 变量进行过滤,导致路径穿越,结合 file_get_contents 函数,造成文件读取漏洞。
效果如下:
任意文件上传漏洞
这个漏洞是在登录后台的时候,发现有个文件管理的功能。于是查看了一下程序源代码,果然没有过滤。看下图最后四行代码,又是路径穿越,也不检查文件后缀名。
效果如下:
CSRF添加超级用户
漏洞位置 dapur\apps\app_user\sys_user.php ,代码如下:
Fiyo CMS是小型的商务电话服务及移动合作工具,由一名前职业学校学生首次开发和创建的,后者当时在RPL的SMK 10三宝垄学习。 那时他的名字不是Fiyo CMS,而是Sirion,它是Site Administration的首字母缩写。
PS:虽然网上有一些分析文章,但是通过本次审计,还是发现了一些其他的漏洞,再次做个总结,漏洞触发过程均以gif图片来展示。
审计漏洞
任意文件删除
漏洞文件位置:dapur\apps\app_config\controller\backuper.php ,实际上这个cms多处都存在这个问题。
可以非常明确的看到这个程序供的大部分功能都是用于备份,但是POST传过去的参数又不经过过滤直接和路径进行拼接(第10行),导致路径穿越,再结合 unlink 函数就导致了任意文件删除。下面看这个的攻击demo:
点击查看原图
SQL注入点
注入点一:
该cms的update方法中存在SQL注入,可以看到程序对变量 $where 直接进行了拼接,具体代码如下:
举个例子,我们对 dapur\apps\app_user\controller\status.php 文件进行SQL注入,这里直接用sqlmap进行验证,后台用户身份,访问链接 http://192.168.43.229/fiyocms/dapur/apps/app_user/controller/status.php?stat=1&id=1 保存请求包为 headers.txt ,将参数 id=1 改成id=1* ,然后使用命令sqlmap -r headers.txt –batch –dbs ,效果如下:
www.wnhack.com
注入点二:
待绕过
POST /fiyocms/dapur/index.php?app=menu&view=edit&id=126'`test%23&theme=blank HTTP/1.1
Host: 192.168.199.229
Content-Length: 10
Accept: */*
Origin: http://192.168.199.229
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Referer: http://192.168.199.229/fiyocms/dapur/index.php?app=menu&view=controller
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Cookie: PHPSESSID=dl8r6oo3lmi0c8lr5upveckl11
Connection: close
blank=true
响应结果
string(55) "SELECT id FROM fiyo25_menu WHERE id='126`test#' LIMIT 1"
漏洞文件在system\function.php 中的 oneQuery 方法。
function oneQuery($table,$field,$value,$output = null) {
$value = str_replace("'","",$value);
$query = FQuery($table,"$field='$value'",$output,null,null,$output,1); www.wnhack.com
return $query;
}
文件读取漏洞
这里只能读取后缀为:html、htm、xhtml、js、jsp、php、css、xml 的任意文件,漏洞文件在 dapur\apps\app_theme\libs\check_file.php 中,第5行代码未对$_GET[src] 和 $_GET[name] 变量进行过滤,导致路径穿越,结合 file_get_contents 函数,造成文件读取漏洞。
效果如下:
任意文件上传漏洞
这个漏洞是在登录后台的时候,发现有个文件管理的功能。于是查看了一下程序源代码,果然没有过滤。看下图最后四行代码,又是路径穿越,也不检查文件后缀名。 无奈人生安全网
效果如下:
CSRF添加超级用户
漏洞位置 dapur\apps\app_user\sys_user.php ,代码如下: