WodPress的XML-RPC文件容易被黑客利用攻击

海外服务器 (490) 2015-10-31 13:30:49

XML-RPC的隐藏特性之一,则是你可以使用system.multicall方法,在单个请求中进行多次尝试,这是非常有用的。它允许应用程序通过一条HTTP请求,执行多个命令。

 

XML-RPC是一个通过HTTP方法进行远程调用的,非常简单易用的玩意儿。它支持Perl、Java、Python、C、C++、PHP,以及许多其他编程语言。Wordpress和Drupal,以及许多其他内容管理系统都支持XML-RPC。

 

当然,任何好的技术都是双刃剑。在XML-RPC技术被普通程序开发者所喜爱的同时,也成了黑客手中的利器。

 

我们跟踪有关XML-RPC的攻击好几个星期了,第一次在网络上发现案例是在2015年9月10日,类似的攻击有愈演愈烈的趋势。与以前黑客热衷于wp-login.php不同,这个文件很容易被登录保护,或者.htaccess给ban掉。黑客尝试利用system.multicall方法,试图在一个请求里包含数百次攻击。你可以想象一下,你在查看日志的时候,一个条目就包含如此多尝试的样子。

 

194.150.168.95 – – [07/Oct/2015:23:54:12 -0400] “POST /xmlrpc.php HTTP/1.1″ 200 14204 “-” “Mozilla/5.0 (Windows; U; WinNT4.0; de-DE; rv:1.7.5) Gecko/20041108 Firefox/1

 

光看这个,你看的出来这是调用了数百次密码猜解的攻击么?黑客可以通过它们绕过安全检测,进行暴力尝试。

 

wp.getCategories方法攻击

 

我们在网络上还发现了wp.getCategories方法,这要求用户名和密码,请求效果如下:

 

<methodCall><methodName>system.multicall</methodName>
 <member><name>methodName</name><value><string>wp.getCategories</string></value></member>
 <member><name>params</name><value><array><data>
 <value><string></string></value><value><string>admin</string></value><value><string>demo123</string></value>
 ..
 <member><name>methodName</name><value><string>wp.getCategories</string></value></member>
 <member><name>params</name><value><array><data>
 <value><string>admin</string></value>
 <value><string>site.com</string></value>
 …

 

WordPress(xmlrpc)会响应是否有成功的用户名密码组合。

 

在上面这个例子中,黑客尝试了admin/demo123和admin/site.com的组合,响应包如下:

 

[{‘faultCode': 403, ‘faultString': ‘Incorrect username or password.‘}, {‘faultCode': 403, ‘faultString': ‘Incorrect username or password.‘}, {‘faultCode': 403, ‘faultString': ‘Incorrect username or password.’}, {‘faultCode': 403, ‘faultString': ‘Incorrect username or password.’}, {‘faultCode': 403, ‘faultString': …
 [[{‘url': ‘http://site.com/wordpress/’, ‘isAdmin': True, ‘blogid': ‘1’, ‘xmlrpc': ‘http://site.com/wordpress/xmlrpc.php’, ‘blogName': ‘wpxxx’}]]]

 

这里我们使用的是wp.getCategories方法进行攻击实验,其他需要认证的方法也可以这样用。所以ban掉wp.getCategories对阻止同类攻击,并没有太大用处。下面是需要身份认证的方法列表:

 

wp.getUsersBlogs, wp.newPost, wp.editPost, wp.deletePost, wp.getPost, wp.getPosts, wp.newTerm, wp.editTerm, wp.deleteTerm, wp.getTerm, wp.getTerms, wp.getTaxonomy, wp.getTaxonomies, wp.getUser, wp.getUsers, wp.getProfile, wp.editProfile, wp.getPage, wp.getPages, wp.newPage, wp.deletePage, wp.editPage, wp.getPageList, wp.getAuthors, wp.getTags, wp.newCategory, wp.deleteCategory, wp.suggestCategories, wp.getComment, wp.getComments, wp.deleteComment, wp.editComment, wp.newComment, wp.getCommentStatusList, wp.getCommentCount, wp.getPostStatusList, wp.getPageStatusList, wp.getPageTemplates, wp.getOptions, wp.setOptions, wp.getMediaItem, wp.getMediaLibrary, wp.getPostFormats, wp.getPostType, wp.getPostTypes, wp.getRevisions, wp.restoreRevision, blogger.getUsersBlogs, blogger.getUserInfo, blogger.getPost, blogger.getRecentPosts, blogger.newPost, blogger.editPost, blogger.deletePost, mw.newPost, mw.editPost, mw.getPost, mw.getRecentPosts, mw.getCategories, mw.newMediaObject, mt.getRecentPostTitles, mt.getPostCategories, mt.setPostCategories

 

如果你是一名Wordpress站长,并且没有使用依赖xmlrpc.php文件的插件,你可以重命名或者删除这个文件来防御攻击。但如果你正在使用如JetPack之类的插件,ban掉这个文件可能会让你的网站功能异常。

THE END