freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Wordpress主题ripro5.6,后台sql注入
2023-12-12 19:50:26

这是我第一次发表相关文章,有问题的地方欢迎大佬指正

ripro

ripro主题是一个倾向于付费的主题,现在也有一些网站正在使用这个主题。该网站的页面:RiPro主题_资源站首选优质内容变现主题实践 (rizhuti.com)

漏洞的代码是在wordpress/wp-content/themes/ripro/inc/admin/page/balance.php该php代码中,具体代码如下:

<?php
// 主页面PHP

$perpage = 20; // 每页数量
$paged=isset($_GET['paged']) ?intval($_GET['paged']) :1;  //当前页
$offset = $perpage*($paged-1); //偏移页
//////// 构造SQL START ////////
$sql = "SELECT * FROM {$balance_log_table_name}";
$where = ' WHERE 1=1';

// charge,post,cdk,other  类型:充值 资源 卡密 其他
if ( !empty( $_GET['type'] ) ) {
    $where .= ' AND type="'.esc_sql($_GET['type']).'"';
}
if ( !empty( $_GET['user_id'] ) ) {
    $where .= ' AND user_id='.esc_sql($_GET['user_id']);
}
echo $where;
$orderlimti = ' ORDER BY time DESC';
$orderlimti .= ' LIMIT '.esc_sql($offset.','.$perpage);
$result = $wpdb->get_results($sql.$where.$orderlimti);
$total   = $wpdb->get_var("SELECT COUNT(id) FROM $balance_log_table_name {$where}");

//////// 构造SQL END ////////
?>

漏洞代码就是上面的if ( !empty( $_GET['user_id'] ) ) {
$where .= ' AND user_id='.esc_sql($_GET['user_id']);
}这里了,将用户的get请求的参数直接拼接到了sql语句中,并且在后面传到$wpdb->get_results()函数里面,造成的sql注入,先来说说为什么esc_sql()没有用。因为该参数预期是数值,所以在其外面没有像其他的参数加上了双引号包裹,就比如上面的type参数。

复现:

这里我的复现是使用phpstudy,使用wordpress5.2.5版本加上ripro5.6版本。

安装好wordpress后,在在主题里面安装ripro。

屏幕截图 2023-12-11 200440.png

ripro安装好后,就基本上算是安装完成,可以复现了。

那么怎么用到上面漏洞用的这个php代码呢?如果你直接访问,结果会是这样:

屏幕截图 2023-12-11 200732.png

提示找不到函数esc_sql(),这样不是正常的调用方式,要像正常的访问该段代码,在管理员登陆wordpress后,进入wp-admin/目录,即wordpress的管理页面:

屏幕截图 2023-12-11 201010.png

左下角有个商城管理,鼠标移过去,然后点击用户余额明细查询。进入到这个页面:

屏幕截图 2023-12-11 201447.png

这个地方对应的就是那段代码实现功能的地方。

根据代码可以尝试union 联合注入,有回显的,上面的部分php代码没贴全,后面的html会回显$result的内容。

构造user_id=-1 union select 1,2,3,user(),5,6,7,8#:

屏幕截图 2023-12-11 203109.png

这里是已经测试了好几次是那个位置回显的,直接可以看见执行了union 并且回显了我们输入的user()。

总结:

就是一次esc_sql()函数利用错误导致的sql注入漏洞,而且是需要管理员后台的权限才可以执行,可适用范围较小,但是有特定环境还是可以为后续渗透提供一个方向的。

有什么疑问的地方可以直接发消息给我,欢迎小伙伴的讨论。

# 漏洞 # 黑客 # 网络安全 # web安全
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录