返回顶部
关闭软件导航
位置:首页 > 资讯 > wordpress>0x02 SQL注入漏洞

  revision trick

  漏洞发现者的文章最开始提到了一个revision的trick,用于承接越权写文章之后如何继续进行深入攻击。但是由于这个老外隐藏了部分技巧,导致按照他文章所说的内容无法复现订阅者账号触发SQL注入漏洞WordPress批量添加栏目 ,所以phithon在文章中没有提到这个trick。我在这里本着还原作者思路的目的,向大家介绍一下关于这个trick的原理。

  下面是原文关于这个trick部分的翻译:

  revisions字段用于记录草稿或者更新的发布,Wordpress中用revisions记录对于完成的提交和存储都会在posts数据库表中将post_type设置成revision,每个revision都会有一个’post_parent’字段,指明这个revision所基于的原版提交。

  当尝试编辑一个revision时,会通过post_parent来进行校验,而不是revision本身。这样,如果我们基于一个post创建一个revision,那么我们可以任意设置它的状态为“trash”之外的任何状态,即使原始的post的状态是“trash”

  使用这个trick,我们能够编辑这个“puppet revision”(傀儡文章?)和自由的向他添加评论,即使他的原版post已经被丢弃到了垃圾箱当中。

  结合我们上文的越权写漏洞,可以看出作者提出使用这个trick的目的是为了,利用我们之前写进垃圾箱中文章(post)的修订版(revision)来进行编辑和评论进行操纵。因为类型为post的文章,即使是当前订阅用户提交的WordPress批量删除关键词 ,也是没有权限编辑的WordPress批量上传内容 ,而revision却是可以编辑的。所以按照原文中所说,我们可以使用这个trick继续后面的操作。

  漏洞原因

  这个漏洞其实是一个二次注入的漏洞,它的本质原因是在从垃圾箱还原文章时,也要还原文章下面的评论,而在还原评论的代码中存在直接拼接用户可控内容,从而导致SQL注入漏洞。下面为问题代码:

  function wp_untrash_post_comments( $post = null ) {

  global $wpdb;

  $post = get_post($post);

  if ( empty($post) )

  return;

  $post_id = $post->ID;

  $statuses = get_post_meta($post_id, '_wp_trash_meta_comments_status', true);

  if ( empty($statuses) )

  return true;

  do_action( 'untrash_post_comments'WordPress批量添加产品 , $post_id );

  // Restore each comment to its original status.

WordPress批量助手

  $group_by_status = array();

  foreach ( $statuses as $comment_id => $comment_status )

  $group_by_status[$comment_status][] = $comment_id;

  foreach ( $group_by_status as $status => $comments ) {

  // Sanity check. This shouldn't happen.

  if ( 'post-trashed' == $status )

  $status = '0';

  $comments_in = implode( "', '", $comments );

  $wpdb->query( "UPDATE $wpdb->comments SET comment_approved = '$status' WHERE comment_ID IN ('" . $comments_in . "')" );

  }

  clean_comment_cache( array_keys($statuses) );

  delete_post_meta($post_id, '_wp_trash_meta_comments_status');

  do_action( 'untrashed_post_comments', $post_id );

  }

  从代码中我们可以看到$status和$comments变量的内容会拼接到SQL中,而这两个变量的内容是用户可以操控的。因为用户传入的数据会先被过滤处理后存储到数据库中,然后直接从数据库提取数据进行拼接,所以如果我们的攻击语句会在数据库提取时恢复本来面貌——标准的二次注入。

如果您觉得 0x02 SQL注入漏洞 这篇文章对您有用,请分享给您的好友,谢谢
文章地址:https://www.tianxianmao.com/article/wordpress/xSQLzrld.html
解放双手无尽可能,有问题添加天线猫微信