freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

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

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

FreeBuf+小程序

FreeBuf+小程序

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

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

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安全
本文为 Nourt 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
Nourt LV.1
这家伙太懒了,还未填写个人描述!
  • 1 文章数
  • 0 关注者
文章目录